• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Fehler 500 sobald 'explode()' im Quelltext steht

paoloposo

Mitglied
Hallo zusammen, kurz und knapp:

Sobald ich 'explode()' in meinem PHP-Quelltext verwende, bekomme ich vom Browser folgende Meldung:
Code:
[COLOR=#777777][FONT=Helvetica]HTTP-Fehler 500 (Internal Server Error): Beim Versuch des Servers, die Anforderung zu verarbeiten, ist eine unerwartete Bedingung aufgetreten.[/FONT][/COLOR]
Das passiert aber nur auf dem Webserver (Apache 2.2.16 / PHP 5.3.3), lokal (Apache 2.4.3 / PHP 5.4.7) klappt es ohne Probleme.

Wieso klappt das nicht bzw. wie klappt es?
Ich hoffe auf baldige Hilfe, bin schon am Verzweifeln!
 
Kannst Du mal formulieren was diese Funktion machen soll? Imho kann man das mit RegExp deutlich performanter lösen.

Wenn Du bei diesem Code bleiben willst, schau auch mal in die error-Logs des Apache-Webservers wo ein auftretender PHP-Fehler, der einen HTTP Status 500 verursacht, auch aufgelistet sein sollte.
 
Die Funktion soll mir eine Text-Datei auslesen (zB. diese hier) und dann die Werte zwischen zB. [titel] und [/titel] herausfinden und das ganze zurückgeben.

Aber explode() funktioniert nicht nur in diesem Beispiel nicht - vielmehr ruft es schon einen Fehler hervor wenn es überhaupt nur im Quelltext erscheint (noch nicht mal aufgerufen).
 
Ich glaube die Ursache ist die Art wie Du auf das erste Ergebnis zugreifst. Z.B. hier:

PHP:
explode('[/titel]', $inhalt)[0]

Das kann PHP imho erst ab 5.4 oder später sogar. Unabhängig davon ist es aber immernoch eine ungünstige Art und Weise wie Du versuchst das umzusetzen.
 
Ich hab ein bisschen rumprobiert, aber es erschließt sich mir nicht, wie mir preg_match bei meinem Problem helfen soll. Wäre nett, wenn du mal einen kleinen Beispiel-Code posten könntest.
 
Beispiel #2 von oben verlinktem Manual:

PHP:
<?php
// Das \\2 ist ein Beispiel für Rückreferenzierung. Es teilt pcre mit, dass
// der reguläre Ausdruck auf den für das zweite Klammerpaar gefundenen
// Ausdruck selbst, also in diesem Fall auf den für ([\w]+) gefundenen
// Ausdruck passen muss.
// Der zusätzliche Backslash wird wegen der doppelten Anführungsstriche
// benötigt.
$html = "<b>fett gedruckter Text</b><a href=howdy.html>klick mich an</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $treffer, PREG_SET_ORDER);

foreach ($treffer as $wert) {
  echo "gefunden: " . $wert[0] . "\n";
  echo "Teil 1: " . $wert[1] . "\n";
  echo "Teil 2: " . $wert[2] . "\n";
  echo "Teil 3: " . $wert[3] . "\n";
  echo "Teil 4: " . $wert[4] . "\n\n";
}
 
Irgendwas sagt mir, dass es einfacher wäre auf dem Server eine neuere PHP-Version aufzuspielen. Wie siehst du das?
Ich verstehe das Beispiel nämlich überhaupt nicht.
 
Irgendwas sagt mir, dass es einfacher wäre auf dem Server eine neuere PHP-Version aufzuspielen. Wie siehst du das?

Kaufst Du dir ein neues Auto nur weil ein Schloss etwas eingerostet ist? ;)

Ich verstehe das Beispiel nämlich überhaupt nicht.

Mal noch weiter vereinfach:

PHP:
$html = "<b>find mich</b> hier steht noch irgendwas anderes <b>find mich auch</b>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $treffer, PREG_SET_ORDER);
foreach ($treffer as $wert) {
 echo $wert[0]."<br>;
}

Ausgabe:
HTML:
find mich<br>find mich auch

Warum?
Weil der reguläre Ausdruck nach dem sucht was zwischen HTML-Element (beginnend mit < und endend mit >) steht.
 
Preg_replace fällt mir da auch noch ein:

PHP:
   $titel = preg_replace("#\[titel](.*?)\[/titel\]#si",'<h1>\1</h1>',$inhalt);
// u.s.w

Explode ist syntaktisch nach meiner auffassung auch falsch angewand (habe ich was vollkommen neues übersehen?):
Erklär mir bitte mal die Syntax von dieser Zeile:
PHP:
$titel = explode('[titel]', explode('[/titel]', $inhalt)[0])[1];
Entweder da fehlt ein riesen Teil (Klammersetzung, Kommatas, Variablennamen) oder ich verstehe da was nicht.
PHP: explode - Manual

Was ist das für ein return in deiner Funktion ??

Dein File einzulesen ist auch so ein Ding:
http://at2.php.net/manual/de/function.file-get-contents.php

Oder du liest das File Zeilenweise ein (Befehl: PHP: file - Manual ) und lässt jede Zeile durch obige replacements laufen.


PS
Warum baust du deine datei nicht der Einfachheit halber Zeilenweise auf und definierst, was jede Zeile beinhaltet, ähnlich einer Datenbank.
Zeile 1 = Titel
Zeile 2 = Autor
Zeile 3 = Datum
u.s.w

Am besten wäre, du würdest mal definieren, was du eigentlich machen willst.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben