2010-12-03 7 views
0

Ich erhalte einen Fehler auf diesem Code:keep MAX Timeout-Fehler immer auf urlencode

<?php 
function encode_object(&$obj) { 
    foreach ($obj as &$current) { 
    if (is_string($current) or is_object($current) or is_array($current)) { 
     if (is_object($current) or is_array($current)) { 
     encode_object($current); 
     } 
     if (is_string($current)) { 
     $current = urlencode($current); 
     } 
    } 
    } 
} 
?> 

Dieser Code hat vor gearbeitet, aber aus irgendeinem Grund jedes Mal, wenn ein Lauf es erhalte ich:

Fatal error: Maximum execution time of 30 seconds exceeded in * on line 9

Was ich versuche, ist es, ein Objekt zu geben, es zu durchsuchen und alle Strings zu kodieren.

Ich habe mehrere Male versucht, aber halten den gleichen Fehler

Ich verwende: Apache 2.2.15.0 PHP 5.3.3 Windows 7 Ultimate bauen 7600

EDIT: Der Eingang I‘ m Eingeben ist ein Fehler, der nach dem Durchlaufen dieser Funktion in JSON umgewandelt und von JavaScript über Ajax gelesen werden soll. Die Eingabe in diesem Fall wäre:

array("error"=> 
    array(
    "error"=>"error", 
    "number"=>2, 
    "message=>"json_encode() [<a href='function.json-encode'>function.json-encode<\/a>]: recursion detected", 
    "line"=>22)) 

Das ist ein weiterer Fehler, den ich später darum kümmern wird, aber es scheint, dass, wenn ich legte obj $ [ 'error'] [ 'message'] blah‘= '; auf dem Objekt, bevor ich es sende, funktioniert der Code gut. Also gibt es etwas über

json_encode() [<a href='function.json-encode'>function.json-encode<\/a>]: recursion detected 

, dass urlencode ein Problem zu haben scheint.

+0

Geben Sie Beispieleingabedaten an, die dies unterbrechen. – dkamins

Antwort

0

Wenn es vorher funktioniert hat, dann scheint es nichts falsch mit dem Code zu sein, nur dass die Objekte, die Sie senden, groß sind und länger dauern als die in PHP eingestellte Ausführungszeit.

Der schnelle und schmutzige Weg, dies zu umgehen, ist die Verwendung der Funktion ini_set(): ini_set ("max_execution_time", 840); (in diesem Fall 840 ist 840/60 oder 14 Minuten)

Ich habe dies zuvor auf eine Abfrage mit einem besonders großen Ergebnis-Set, eine, die mindestens fünf Minuten dauerte, um zu laden, und bauen Sie den HTML-Code für Die Seite.

Hinweis: Dies funktioniert nicht, wenn auf Ihrem Host der "abgesicherte Modus" aktiviert ist. In diesem Fall müssen Sie die Einstellung in PHP.ini ändern. Ansonsten benutze ich diesen schnellen und schmutzigen Karussell ziemlich oft für lächerlich große Parsing-/Verarbeitungsaufgaben.