Christian: Dateien einbinden unmöglich

Hallo,

ich habe mir vor ein paar Tagen Lighttpd, PHP und MySQL auf meinem Archlinux System installiert. Die Module habe ich wie in der Dokumentation beschrieben, von Lighttpd PHP eingebunden.
Anfangs hatte ich es mit mod_userdir versucht, was mich allerdings abgeschreckt hatte, als ich meinen Benutzerordner doch relativ viele öffentliche Rechte geben muss. Es liefen sogar ein paar Forensysteme, die auf alle Fälle include verwenden.
Erst nachdem ich das ganze wieder nach /srv/http gepackt habe, hat es nicht mehr funktioniert... Seitdem bekomme ich zwar keine Fehlermeldungen von PHP, dass die gewünschte Datei nicht gefunden wurde, sondern es passiert einfach gar nichts....
Ich habe deshalb einen Ordner namens "christian" angelegt und meinem normalen Benutzer "christian" die Rechte übertragen. (chown -hR christian christian)

Ich habe mal ein paar Testdateien angelegt.
foo.php:
  ~~~php <?php
  error_reporting(E_ALL);

// Diese Zeile stammt größtenteils von php.net
  if((include "./bar.php") == "OK") echo "Datei eingebunden!<br>\n";
  else echo "Datei nicht eingebunden!<br>\n";
  ?>

  
bar.php:  
  ~~~php
<?php  
  echo "Das ist meine tolle Datei! :o)<br>\n";  
  ?>

Nun ist die Ausgabe immer die, dass die Datei nicht eingebunden werden konnte:

[christian@tux christian]$ php-cgi foo.php
Content-type: text/html

Datei nicht eingebunden!<br>

In den Logdateien unter /var/log/lighttpd/ stehen auch keine Fehlermeldungen o.ä.

Weiß jemand, wo eventuell der Fehler liegt oder was ich noch probieren kann?

Vielen Dank,

Gruß
Christian

  1. Hallo,

    Nun ist die Ausgabe immer die, dass die Datei nicht eingebunden werden konnte:
    »» [christian@tux christian]$ php-cgi foo.php
    »» Content-type: text/html
    »»
    »» Datei nicht eingebunden!<br>

    include() hat keinen Rückgabewert. Du vergleichst (if((include "./bar.php") == "OK")) dort null mit "OK". Hast du schon probiert eine Funktion in bar.php zu definieren und diese dann in foo.php aufzurufen?
    Siehe auch hier: http://de3.php.net/manual/en/function.include.php

    Grüße

    1. Hallo,

      include() hat keinen Rückgabewert. Du vergleichst (if((include "./bar.php") == "OK")) dort null mit "OK". Hast du schon probiert eine Funktion in bar.php zu definieren und diese dann in foo.php aufzurufen?
      Siehe auch hier: http://de3.php.net/manual/en/function.include.php

      Das dachte ich auch, aber ich habe diesen Vergleich direkt von der php.net-Seite. Example 4:
        ~~~php <?php
        // won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('')
        if (include('vars.php') == 'OK') {
            echo 'OK';
        }

      // works
        if ((include 'vars.php') == 'OK') {
            echo 'OK';
        }
        ?>

      Auch mit dem Aufrufen einer Funktion aus bar.php passiert nichts.  
      Was mich ja wundert, wieso ich auch keine Fehlermeldung bekomme...  
        
      foo.php:  
        ~~~php
      <?php  
        error_reporting(E_ALL);  
        
        include("./bar.php");  
        meineFunc();  
        ?>
      

      bar.php:
        ~~~php <?php
        function meineFunc()
        {
         echo "Hallo Welt!<br>";
        }
        ?>

        
        
      Absolut keine Ausgabe... :-(  
        
        
        
      Sonst noch Ideen?  
        
      Danke,  
      Gruß  
      Christian
      
      1. Hallo,

        Das dachte ich auch, aber ich habe diesen Vergleich direkt von der php.net-Seite. Example 4:

        ja schon. Aber du hast keinen return Wert in deinem Beispiel. Deshalb klappt das nicht.

        Absolut keine Ausgabe... :-(

        Merkwürdig. Kannst du mal testen, ob es überhaupt zur Ausführung von der include Anweisung kommt? Also ein echo oder ähnliches nach der Anweisung platzieren.

        Grüße

        1. Nabend,

          Merkwürdig. Kannst du mal testen, ob es überhaupt zur Ausführung von der include Anweisung kommt? Also ein echo oder ähnliches nach der Anweisung platzieren.

          Nach der Include-Anweisung? So?
            ~~~php <?php
            error_reporting(E_ALL);

          include("./bar.php");
            meineFunc();

          echo "Eine Ausgabe. :-)";
            ?>

          Keine Ausgabe im Browser, aber mir gerade gerade eben aufgefallen, dass wenn ich das Script mithilfe von php-cgi ausführen lasse, bekomme ich diese Ausgabe:  
          
          > [christian@tux christian]$ php-cgi foo.php  
          > Status: 500 Internal Server Error  
          > Content-type: text/html  
          
          »»  
            
          Das könnte eventuell weiterhelfen, oder?  
            
          Wobei was mir aufgefallen ist: http://forum.de.selfhtml.org/?t=184831&m=1225749  
          Die Antwort von dedlfix.  
            
          Es ist ja eigentlich idiotisch, dass ich versucht habe, mit "OK" zu vergleichen. Als ich nämlich mal `<?php echo include "./bar.php"; ?> `{:.language-php}ausprobiert habe, war die Ausgabe:  
          
          > 1  
          
          Allerdings ist die Datei scheinbar nicht included.  
            
          Was auch nicht funktioniert, ist das Einlesen von Dateien. Beispielsweise  
            ~~~php
          <?php  
            print_r(file("./bar.php"));  
            ?>
          

          gibt lediglich ein leeres Array aus....

          Höchstwahrscheinlich liegt es irgendwie an Ordner, Datei bzw. Schreibrechten, oder nicht? Ich meine, woran soll es sonst liegen?

    2. echo $begrüßung;

      include() hat keinen Rückgabewert.

      Diese Aussage ist falsch.

      Du vergleichst (if((include "./bar.php") == "OK")) dort null mit "OK".

      Bei erfolgreichem include und ohne dass darin mit return ein Wert zurückgegeben wird, ist das Ergebnis eine 1 (Integer-Wert) ansonsten der dem return übergebene Wert. Bei nicht erfolgreichem include ist das Ergebnis ein false (Boolean-Wert).

      Er vergleicht also 1 mit "OK", was false ergibt.

      Siehe auch hier: http://de3.php.net/manual/en/function.include.php

      Siehe Abschnitt unter dem Example #5.

      echo "$verabschiedung $name";

      1. Hallo,

        »» include() hat keinen Rückgabewert.

        Diese Aussage ist falsch.

        Ja, war zu schnell mit der Formulierung. Danke für die Verbesserung.

        Grüße