Kalaus: php text in variable einfügen

Hallo Leute,

habe ein einfaches Problem:

$head = "<?php include('../../../menu_oben.html');?>";

ich will diesen Text einfach in der $head variable speichern und per fputs in eine *.php datei einfügen.

Bei ausführen der *.php Datei  bekomme ich diese Fehlermeldung:

Warning: main(): SAFE MODE Restriction in effect. The script whose uid is 33 is not allowed to access ../../../menu_oben.html owned by uid 1148 in /var/www/web402/html/supermoto/admin/news/newsposts/newspost_1168292872.php on line 11

Warning: main(../../../menu_oben.html): failed to open stream: No such file or directory in /var/www/web402/html/supermoto/admin/news/newsposts/newspost_1168292872.php on line 11

Warning: main(): Failed opening '../../../menu_oben.html' for inclusion (include_path='.') in /var/www/web402/html/supermoto/admin/news/newsposts/newspost_1168292872.

schreibe dich den include tag Falsch in die $head variable?

Bitte helft mir..leider bin ich ein absoluter Anfänger in php!!
Danke

mfg Kalaus

  1. Hallo Kalaus.

    habe ein einfaches Problem:

    $head = "<?php include('../../../menu_oben.html');?>";

    ich will diesen Text einfach in der $head variable speichern und per fputs in eine *.php datei einfügen.

    Eine Möglichkeit:

    $head = [link:http://www.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc@title=<<<HEAD]  
    <?php [link:http://de.php.net/manual/de/function.readfile.php@title=readfile]('../../../menu_oben.html');?>  
    HEAD;
    

    Einen schönen Montag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Hallo Mathias, hallo Kalaus,

      $head = [link:http://www.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc@title=<<<HEAD]

      <?php link:http://de.php.net/manual/de/function.readfile.php@title=readfile;?>
      HEAD;

        
      Nein, das hat damit nichts zu tun. Kalaus Code an sich ist ja nicht Fehlerhaft, das Problem ist lediglich die Serverkonfiguration.  
        
      Noch einmal als Kurzfassung: Auf dem Server ist Safe-Mode aktiviert, das bedeutet, dass ein Script nur auf Dateien zugreifen kann, die dem selben Benutzer wie eben jenes Script gehören.  
        
      Die PHP-Dateien, die Kalaus von zuhause per FTP o.ä. hochgeladen hat, haben den gleichen Eigentümer, wie die HTML-Dateien (in diesem Fall menu\_oben.html), die er hochgeladen hat, deswegen kann er diese Datei in seinen Scripten einbinden.  
        
      Wenn er aber mit PHP eine neue Datei erzeugt, gehört diese dem Benutzer, unter dem der Webserver ausgeführt wird. Deswegen kann das erzeugt Script nicht die Datei, die per FTP hochgeladen wurde ausführen.  
        
      Man könnte, die Datei menu\_oben.html auch durch ein Script erzeugen lassen, sofern sie nicht irgendwo anders eingebunden wird. Es wäre wohl auch einen Versuch wert, eine Datei für das zu erstellende Script per FTP hochzuladen, und die Rechte so zu setzen, dass der Webserver-Benutzer sie modifizieren kann. Diese Lösungen sind allerdings nicht besonders schön, weil sie das Programm unnötig kompliziert machen und in einer Shared-Hosting-Umgebung (wovon ich wegen des aktivierten Safe-Modes ausgehe) zu Sicherheitslücken führen können.  
        
      Der ganze Ansatz, eine ausführbahre Datei dynamisch erzeugen zu lassen, erscheint mir allerdings schon etwas verquer. Es wäre also schön, wenn du noch ein bisschen mehr Hintergrundinfos zu deinem Problem lieferst, Kalaus. Möglicherweise lässt sich dann das Problem auf elegantere Art umgehen anstatt nur an den Symptomen herum zu frickeln.  
        
      Schöne Grüße,  
        
      Johannes
      
  2. echo $begrüßung;

    Bei ausführen der *.php Datei  bekomme ich diese Fehlermeldung:

    Warning: main(): SAFE MODE Restriction in effect. The script whose uid is 33 is not allowed to access ../../../menu_oben.html owned by uid 1148 in /var/www/web402/html/supermoto/admin/news/newsposts/newspost_1168292872.php on line 11

    schreibe dich den include tag Falsch in die $head variable?

    Nein, dir wurde durch deinen Provider der Safe Mode auferlegt. Korrigiere die Script-Besitzverhältnisse, wende dich an deinen Provider oder wechsle zu einem, der den Safe-Mode nicht verwendet.

    echo "$verabschiedung $name";

    1. Nein, dir wurde durch deinen Provider der Safe Mode auferlegt. Korrigiere die Script-Besitzverhältnisse, wende dich an deinen Provider oder wechsle zu einem, der den Safe-Mode nicht verwendet.

      Nein das kann nicht sein, weil ich beim gleichen Provider schon einige Seiten per php laufen hab, der include tag funtioniert auch, aber nur bei einer selbst geschriebenen Seite und nicht bei einer "generierten".

      Wie kann man nich "php code" in einer variable speichern gibt es bestimmte Escape Sequence Tabellen??

      mfg Kalaus

      1. echo $begrüßung;

        Nein, dir wurde durch deinen Provider der Safe Mode auferlegt. Korrigiere die Script-Besitzverhältnisse, wende dich an deinen Provider oder wechsle zu einem, der den Safe-Mode nicht verwendet.

        Nein das kann nicht sein, weil ich beim gleichen Provider schon einige Seiten per php laufen hab, der include tag funtioniert auch, aber nur bei einer selbst geschriebenen Seite und nicht bei einer "generierten".

        Ja, aber keine der Include-Dateien wurde bisher vom Webserver/PHP angelegt. Die funktionierenden dürftest du genau wie die inkludierenden Dateien mit deiner FTP-Kennung hochgeladen haben. Und hier gibt es nun eine Diskrepanz zwischen dem Besitzer der hochgeladenen Dateien und dem Besitzer der vom Webserver/PHP angelegten, wie dir der Fehlermeldungstext erzählt.

        echo "$verabschiedung $name";

        1. Ja, aber keine der Include-Dateien wurde bisher vom Webserver/PHP angelegt. Die funktionierenden dürftest du genau wie die inkludierenden Dateien mit deiner FTP-Kennung hochgeladen haben. Und hier gibt es nun eine Diskrepanz zwischen dem Besitzer der hochgeladenen Dateien und dem Besitzer der vom Webserver/PHP angelegten, wie dir der Fehlermeldungstext erzählt.

          OK, kann man den <?php include('../../../menu_oben.html');?> Code, den ich einfach in die Datei einfügen will, nicht als "text" in eine Datei einfügen, damit sie erst ausgeführt wird wenn die neue "generierte" Seite aufgerufen wird? Oder kann man den SafeMode manuell abschalten?

          mfg Kalaus

          1. Moin

            OK, kann man den <?php include('../../../menu_oben.html');?> Code, den ich einfach in die Datei einfügen will, nicht als "text" in eine Datei einfügen, damit sie erst ausgeführt wird wenn die neue "generierte" Seite aufgerufen wird? Oder kann man den SafeMode manuell abschalten?

            Das kanst du m.E. so aufrufen.

            Wenn du an die php.ini rankommst kannst das umstellen. Soweit ich weiß geht das nicht über einen PHP-Befehl.

            Gruß Bobby

            --
            -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
            -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
          2. echo $begrüßung;

            Ja, aber keine der Include-Dateien wurde bisher vom Webserver/PHP angelegt. Die funktionierenden dürftest du genau wie die inkludierenden Dateien mit deiner FTP-Kennung hochgeladen haben. Und hier gibt es nun eine Diskrepanz zwischen dem Besitzer der hochgeladenen Dateien und dem Besitzer der vom Webserver/PHP angelegten, wie dir der Fehlermeldungstext erzählt.

            OK, kann man den <?php include('../../../menu_oben.html');?> Code, den ich einfach in die Datei einfügen will, nicht als "text" in eine Datei einfügen, damit sie erst ausgeführt wird wenn die neue "generierte" Seite aufgerufen wird?

            Doch, das kann man, wenn einem nicht gerade die Besitzverhältnisse und der Safe-Mode in die Quere kommt.

            Oder kann man den SafeMode manuell abschalten?

            Das kann man nicht. Jedenfalls sollte man das nicht als Kunde eines Providers können. Dazu wäre ein Zugriff auf die zentrale PHP-Konfiguration nötig.

            Im Allgemeinen wird (neben einem Wechsel des Providers) empfohlen, ein Upload-Script zu schreiben. Die damit angelegten Dateien haben die gleiche UID wie andere per Script angelegte Dateien.

            Vielleicht hilft dir auch Toms Artikel "Wie funktioniert der Safe Mode?" beim Verständnis des Safe-Modes weiter.

            echo "$verabschiedung $name";

            1. Moin

              Vielleicht hilft dir auch Toms Artikel "Wie funktioniert der Safe Mode?" beim Verständnis des Safe-Modes weiter.

              Dazu vielleicht auch noch ne Frage von mir. Mit chmod() kann man doch die Serverrechte ändern oder geht das bei Safe-Modus nicht?

              Gruß Bobby

              --
              -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
              -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
              1. echo $begrüßung;

                Vielleicht hilft dir auch Toms Artikel "Wie funktioniert der Safe Mode?" beim Verständnis des Safe-Modes weiter.
                Dazu vielleicht auch noch ne Frage von mir. Mit chmod() kann man doch die Serverrechte ändern oder geht das bei Safe-Modus nicht?

                Ich weiß nicht, ob es geht, aber dass es nichts nützt, sagt ja schon die Fehlermeldung. Die User-IDs stimmen nicht überein, und da verhindert der Safe-Mode einen Zugriff.

                echo "$verabschiedung $name";