Selbst: PHP-Skripte von Windows nach Linux portieren

Hallo,

habe mit xamp einige PHP-Skripte zum Laufen gebracht. Nun wollte ich alles auf Linux-Servern ablaufen lassen, habe PHP-5, php5-mysql, apache2, maria-db-server und client installiert. Der Funktionstest <?php phpinfo(); ?> liefert auch keine Fehler. Aber bei meinen Skripten funktioniert nichts mehr. Obwohl ich in Notpad++ bei allen Zeilenenden das CR rausgenommen habe. Die Kodierung steht auf UTF-8. Ist das so richtig? Konkret bekomme ich für fast jede Zeile die Meldung "Kommando nicht gefunden" Ich habe dann auch die Zeile #!/usr/bin/php eingefügt. Brauch ich die? Aber auch hier heißt es "Zeile 1: #!/usr/bin/php: Datei oder Verzeichnis nicht gefunden". /usr/bin/php ist aber unter diesem Pfad zu finden. Wie geht man vor, wenn man funktionierende PHP-Skripte von Windows-Rechnern auf Linux-Rechner portieren möchte? Liegt es vielleicht am kopieren mit WinSCP. Hier ist Default:binary für das Transferformat eingestellt.

Besten Dank!

  1. Tach!

    Aber bei meinen Skripten funktioniert nichts mehr. Obwohl ich in Notpad++ bei allen Zeilenenden das CR rausgenommen habe. Die Kodierung steht auf UTF-8. Ist das so richtig?

    Es ist egal, nicht relevant für das Problem.

    Konkret bekomme ich für fast jede Zeile die Meldung "Kommando nicht gefunden" Ich habe dann auch die Zeile #!/usr/bin/php eingefügt. Brauch ich die?

    Nur für Shell-Scripts.

    Wie geht man vor, wenn man funktionierende PHP-Skripte von Windows-Rechnern auf Linux-Rechner portieren möchte? Liegt es vielleicht am kopieren mit WinSCP. Hier ist Default:binary für das Transferformat eingestellt.

    Einfach kopieren. Die Dateiübertragung ist bestimmt nicht das Problem gewesen.

    Was auch immer du vorhast und machst, du macht dabei was verkehrt. Was es ist, kann ich dir noch nicht sagen, da musst du mal etwas genauer beschreiben.

    dedlfix.

    1. Hallo,

      vielen Dank für die Antworten. Da keines meiner Windows-PHP-Skripte unter LX funktioniert hat es wohl nichts mit den konkreten Programmcode dieser zu tun. Wenn ihr sagt, die Formatierung und der Zeichensatz wären egal, ist mir das zwar neu, aber um so besser.

      Trotzdem mal ein Bsp., das auf der Kommandozeilte des PHP-Servers ohne Parameter-Übergabe so funktioniert. Es meckert nur, dass kein Parameter übergeben wurde. Im Browser, der den Parameter übergibt, erscheint dann aber nur die Zeile #!/usr/bin/php.

      #!/usr/bin/php <?php

      $_db_host = "localhost";     $_db_username = "root";     $_db_passwort = "XXXXXX";     $_db_datenbank = "name";     $_zeitraum = $_GET["zeitraum"];     $_ra = "BR";

      # Verbindung zur Datenbank herstellen     $_link = mysql_connect($_db_host, $_db_username, $_db_passwort);

      # Prüfen ob die Verbindung geklappt hat     if (!$_link)         {         die("Keine Verbindung zur Datenbank: " .             mysql_error());         }

      # Verbindung ok     # echo "Verbindung zur Datenbank in Ordnung.<br>";

      # Datenbank auswählen     mysql_select_db($_db_datenbank, $_link);

      # Daten aus der Tabelle selektieren     $_sql = "SELECT ra, s, url, f, standort, provider, t, ursache FROM test WHERE DATE_SUB(CURDATE(),INTERVAL '$_zeitraum' DAY)<=t ORDER BY t DESC";     $_resultat = mysql_query($_sql, $_link); $_menge = mysql_num_rows($_resultat);

      # Alle Daten aus dem Array anzeigen     // Tabelle in HTML darstellen     echo "<table border="1" cellpadding="2">\n";     echo "<tr><th colspan='8' align='left'><p>&nbsp Streaming-Fehler der letzten $_zeitraum Tage: &nbsp $_menge</p></th></tr>";     echo "<tr><th align='left'><p>&nbsp RA &nbsp</p></th><th align='left'><p>&nbsp Stream &nbsp</p><th align='left'><p>&nbsp URL &nbsp</p><th align='left'><p>&nbsp Fehler &nbsp</p></th><th align='left'><p>&nbsp Standort &nbsp</p></th><th align='left'><p>&nbsp Provider &nbsp</p></th><th align='left'><p>&nbsp Fehlerbeginn &nbsp</p></th><th align='left'><p>&nbsp Ursache &nbsp</p></th></tr>";     while ($row=mysql_fetch_row($_resultat))     {         echo "<tr>";         foreach ($row as $item)    // jedes Element $item der Zeile $row durchlaufen             echo "<td>&nbsp $item &nbsp</td>";         echo "</tr>\n";     }     echo "</table>\n";     #print_r($_daten);

      # Datenbankverbindung wieder schliessen     mysql_close($_link); ?>

      1. Im Browser, der den Parameter übergibt, erscheint dann aber nur die Zeile #!/usr/bin/php.

        Was erwartest du?  Genau diese Zeile ist Text für den Browser, danach beginnt das PHP-Programm, das auf dem Server läuft und bei der Zeile

        Verbindung zur Datenbank herstellen

        mit Fehler endet. Was soll PHP mit dieser Zeile machen? # ist kein PHP-Kommando, sondern der Beginn eines Kommentars in einem MySQL Kommando.

        In PHP solltest du eine Kommentarzeile mit // beginnen.

        PHP-Fehler werden auf vielen Servern nicht angezeigt (Standard). Deine erste PHP-Zeile sollte die Fehlermeldungen einschalten:

        error_reporting(E_ALL);      // steuert, dass alle Fehler gemeldet werden

        Und bei der Fehlersuche nimmt man Code weg bzw. setzt ihn zwischen Kommentar-Zeichen

        /* hier irgendwas, was PHP nicht interessiert */

        Wenn du keine Ahnung hast, wo PHP "aufgibt", füge zum Testen solche Zeilen ein:

        echo "[1] "; ... echo "[2] ";

        Linuchs

        1. Tach!

          [...] danach beginnt das PHP-Programm, das auf dem Server läuft und bei der Zeile

          Verbindung zur Datenbank herstellen

          mit Fehler endet. Was soll PHP mit dieser Zeile machen? # ist kein PHP-Kommando, sondern der Beginn eines Kommentars in einem MySQL Kommando.

          Für PHP ist # ebenso die Einleitung eines Zeilenkommentars und eine Alternative zu //.

          In PHP solltest du eine Kommentarzeile mit // beginnen.

          Oder mit #.

          PHP-Fehler werden auf vielen Servern nicht angezeigt (Standard).

          Und wenn PHP gar nicht ausgeführt wird, wirft es auch keine Fehler.

          dedlfix.

      2. Da wäre noch eine Frage zu klären.

        Ist denn überhaupt was in der Datenbank?

        Kann ja sein, Du hast nur die Tabelle angelegt.

        $_resultat = mysql_query($_sql, $_link);

        Keine Fehlerbehandlung...

        nicht mal :

        
        $_resultat = mysql_query($_sql, $_link) or trigger(mysql_error(), , E_USER_ERROR);
        

        Jörg Reinholz

        1. 
          $_resultat = mysql_query($_sql, $_link) or trigger_error(mysql_error(), E_USER_ERROR);
          

          Jörg Reinholz

      3. Hallo,

        nur so eine Vermutung, Dateiberechtigungen... Welche Berechtigungen haben die einzelnen PHP Dateien?

        Gruß Jan

  2. Hier ist Default:binary für das Transferformat eingestellt.

    Sollte passen. Ich hatte damit noch keine Probleme. CR wird bei mir nie entfernt, auch wenn ich auf Windows schreibe und unter Linux laufen lasse.

    Ich tippe darauf dass deiner Installation noch etwas fehlt. Hast du den Fehler schon in eine Suchmaschine getippt? Ich finde da z.B. einen Tip mit php-cli. Ist schon älter aber evtl. immer noch gültig. Unter Linux gibt es leider nicht immer Installationspakete die alles nötige enthalten.

    1. Unter Linux gibt es leider nicht immer Installationspakete die alles nötige enthalten.

      Da entlockt mir, gerade im Zusammenhang mit dem Apache und PHP jetzt mal ein "Hä?"

      1. Unter Linux gibt es leider nicht immer Installationspakete die alles nötige enthalten. Da entlockt mir, gerade im Zusammenhang mit dem Apache und PHP jetzt mal ein "Hä?"

        Das sollte ausdrücken, Installationen unter Linux sind manchmal unheimlich komplex. Da gibts nicht eine Installationsdatei die man ausführt und danach ist alles da wo es soll.

        Auf die Frage bezogen meinte ich da fehlt evtl. noch etwas in der Installation, auch wenn der Fragesteller glaubt er hätte alles.

        1. Hallo,

          Unter Linux gibt es leider nicht immer Installationspakete die alles nötige enthalten. Da entlockt mir, gerade im Zusammenhang mit dem Apache und PHP jetzt mal ein "Hä?" Das sollte ausdrücken, Installationen unter Linux sind manchmal unheimlich komplex.

          na, und unter Windows erstmal!

          Da gibts nicht eine Installationsdatei die man ausführt und danach ist alles da wo es soll.

          Da gibt's nämlich oft einfach nur eine geheimnisvoll verpackte Installationsdatei, die alles vollautomatisch macht, und wenn die fertig ist, hat man ein heilloses Durcheinander.

          Ein großes Problem von Windows ist, dass es kein zentrales Software- oder Paketmanagement gibt, sondern viel Wildwuchs. Installer bringen einen Haufen aktualisierte Systemkomponenten in der Version mit, die sie selbst gern hätten, ersetzen damit die schon vorhandenen Komponenten oft ungefragt. Das Ergebnis ist nicht selten, dass eine früher installierte Anwendung dann nicht mehr einwandfrei funktioniert.

          Eine Lösung, die ich in langjähriger Windows-Erfahrung für mich gefunden habe: Den Installationsvorgang protokollieren, nachher den ganzen Krempel, den der Installer in zentrale Verzeichnisse gelegt hat, ins Programmverzeichnis verschieben, ggf. Konfiguration und Registry-Einträge korrigieren. Den höheren Speicherbedarf durch mehrfaches Vorhalten diverser Bibliotheken nehme ich im Zeitalter So stelle ich sicher, dass jedes installierte Programm die DLLs, die es braucht, in genau der Version findet, die es selbst erwartet. Aber das ist kein Verfahren, das man einem Laien zumuten kann.

          Ciao,  Martin

          --
          Wenn man sieht, was der liebe Gott auf der Erde so alles zulässt, hat man das Gefühl, er experimentiert immer noch.   (Sir Peter Ustinov, Charakterdarsteller, †2004) Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        2. Unter Linux gibt es leider nicht immer Installationspakete die alles nötige enthalten. Da entlockt mir, gerade im Zusammenhang mit dem Apache und PHP jetzt mal ein "Hä?"

          Das sollte ausdrücken, Installationen unter Linux sind manchmal unheimlich komplex. Da gibts nicht eine Installationsdatei die man ausführt und danach ist alles da wo es soll.

          Nö. Da gibt es "apt-get" nebst "aptitude" nebst "synaptic"; "yum" nebst "yast" nebst "yast" (je nach Linux auch was anderes, aber fast immer ein Trio aus Installer fürs Terminal, Installer mit semi-grafischer Oberfläche und Installer mit grafischer Operfläche ) und eine Menge so ganz einfacher Sachen, welche die benötigten Pakte aus einem REPO runterladen, installieren und für die Updates sorgen, teilweise eine Suchfunktion bieten. Wenn man von Programmen was spezielles will kann man bei Diensten einfach in /etc/plablubb die eine oder andere Textdateien editieren und fix mit service plablubb reload testen was läuft. In harten Fällen hat man in einer 2. Konsole etwas wie "tail -f /var/log/plablubb.log" oder "tail -f /var/log/syslog" laufen und sieht gleich seine Denk- oder Tippfehler.

          Für die Programme mit grafischen Oberflächen muss man sich auch unter Linux durch etwas wie Extras -> Optionen -> hunderte "Reiter" durcharbeiten. Genau wie unter Windows.

          Ich finde Linux da einfacher. Vor allem aber finde ich es es richtig klasse, dass mir letztendlich weniger Beschränkungen auferlegt werden und dass ich nicht mit regedit rumfummeln muss. Es wird nur dann so beschissen wie unter Windows, wenn man meint, dass die Programme aus den Repos nicht reichen oder nicht aktuell genug sind und anfängt, die Dinger manuell zu installieren (z.B. mit deb oder yast -i ).  Wenn man gar anfängt selbst zu kompilieren, dann kann das einfach sein: ./configure && make && sudo make install oder, wegen der nicht erfüllten Abhängigkeiten, eine endlose Suche und viele Durchläufe von make bedeuten. Aber wann hat man das heute noch? Wir haben nicht mehr das Jahr 1999.

          Jörg Reinholz

          1. Hallo

            Ich finde Linux da einfacher. … Es wird nur dann so beschissen wie unter Windows, wenn man meint, dass die Programme aus den Repos nicht reichen oder nicht aktuell genug sind und anfängt, die Dinger manuell zu installieren (z.B. mit deb oder yast -i ).  Wenn man gar anfängt selbst zu kompilieren, dann kann das einfach sein: ./configure && make && sudo make install oder, wegen der nicht erfüllten Abhängigkeiten, eine endlose Suche und viele Durchläufe von make bedeuten. Aber wann hat man das heute noch? Wir haben nicht mehr das Jahr 1999.

            Bei aller Euphorie bezüglich der Paketverwaltung, die die Abhängigkeiten ohne weiteres Zutun auflöst, ist es doch in nicht wenigen Distributionen so, dass die Software zwar gut abgehangen, aber auch gut abgehangen ist. Nicht selten ist es abseits von „man meint, dass die Programme aus den Repos nicht reichen oder nicht aktuell genug sind“ notwendig, eine neuere Version von $programm einzusetzen, als es die Paketverwaltung hergibt.

            Als ich meinen Ebook-Reader unter Linux mit Calibre bestücken wollte, war die von der Distri angebotene Version museumsreif. Als ich anfangen wollte, mit Github zu arbeiten, war die von der Distri angebotene Git-Version zu alt. Also musste ich selbst kompilieren oder andere Quellen einbinden, denen ich mehr oder minder blind vertrauen muss.

            Und schon endet man ganz ohne „Ich will den heißen Scheiß haben!“, wie oben beschrieben.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, "Wachen! Wachen!" ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
            1. Hi,

              Bei aller Euphorie bezüglich der Paketverwaltung, die die Abhängigkeiten ohne weiteres Zutun auflöst, ist es doch in nicht wenigen Distributionen so, dass die Software zwar gut abgehangen, aber auch gut abgehangen ist.

              ja, und das betrachte ich in den meisten Fällen als Vorteil. Vor allem bei einem neuen Major Release irgendeiner Software hat die neue Version gern noch ihre Kinderkrankheiten und Unzulänglichkeiten, so dass ich gern das nächste Update abwarte.

              Nicht selten ist es abseits von „man meint, dass die Programme aus den Repos nicht reichen oder nicht aktuell genug sind“ notwendig, eine neuere Version von $programm einzusetzen, als es die Paketverwaltung hergibt.

              Das will ich nicht ausschließen; den Fall hatte ich aber noch nicht. Allerdings habe ich meinem Paketmanagement schon ab und zu bestimmte ppa-Quellen hinzugefügt; aber sobald die mit in sources.list stehen, werden sie ja von der Paketverwaltung genauso gewissenhaft mit betrachtet wie die Original-Quellen der Distro.

              So long,  Martin

              --
              Soso, der Klügere gibt nach. Aber warum sollen sich immer nur die Dummen durchsetzen?  .oO(?) Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Hallo

                Bei aller Euphorie bezüglich der Paketverwaltung, die die Abhängigkeiten ohne weiteres Zutun auflöst, ist es doch in nicht wenigen Distributionen so, dass die Software zwar gut abgehangen, aber auch gut abgehangen ist.

                ja, und das betrachte ich in den meisten Fällen als Vorteil.

                Was ist mit den nicht-meisten Fällen, denen, die ich zu beschreiben versuchte?

                Vor allem bei einem neuen Major Release irgendeiner Software hat die neue Version gern noch ihre Kinderkrankheiten und Unzulänglichkeiten, so dass ich gern das nächste Update abwarte.

                Meinst du jenes Update, das du wegen des Alters der im Repo vorhandenen Version genausowenig angeboten bekommst, wie das eventuell fehlerbehaftete Major-Release?

                Ich stehe ja auch auf sich durch die Praxis als stabil erwiesen habende Software. Allerdings möchte ich die nicht immer erst dann benutzen, wenn schon zwei neuere Major-Releases da sind, deren Funktionen ich zumindest teilweise nutzen möchte.

                Nicht selten ist es abseits von „man meint, dass die Programme aus den Repos nicht reichen oder nicht aktuell genug sind“ notwendig, eine neuere Version von $programm einzusetzen, als es die Paketverwaltung hergibt.

                Das will ich nicht ausschließen; den Fall hatte ich aber noch nicht.

                Ich habe zwei reale Fälle im von dir nicht zitierten Text genannt.

                Allerdings habe ich meinem Paketmanagement schon ab und zu bestimmte ppa-Quellen hinzugefügt; aber sobald die mit in sources.list stehen, werden sie ja von der Paketverwaltung genauso gewissenhaft mit betrachtet wie die Original-Quellen der Distro.

                Das sind die auch von mir genannten zusätzlichen Quellen, denen ich vertrauen können muss. Momentan z.B. nervt mich Fontforge wegen eines laut dem Updatesystem kaputten Updates über ein ppa. Muss ich mich wieder drum kümmern. Reibungslos – und das ist, worauf ich hinaus wollte – funktioniert das mit dem Repo eben auch nicht, auch wenn es mMn um Längen besser und bequemer ist, als das Windows-System.

                Tschö, Auge

                --
                Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, "Wachen! Wachen!" ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
  3. Der Funktionstest <?php phpinfo(); ?> liefert auch keine Fehler.

    Dann war das hier hyperliquid (super-unnötig, wenn nicht schädlich):

    Ich habe dann auch die Zeile #!/usr/bin/php eingefügt.

    Wie geht man vor, wenn man funktionierende PHP-Skripte von Windows-Rechnern auf Linux-Rechner portieren möchte?

    Man macht normalerweise Folgendes: Gar nichts.

    Um Die jetzt helfen zu können müsste man mehr wissen. Code + Fehlermeldungen. Du hat hoffentlich ein Error-Log.

    Jörg Reinholz

  4. habe nun in Notepad++ auf ANSI-Kodierung umgestellt. Jetzt funktioniert das PHP auf der Kommandozeile, wenn ich in der ersten Zeile "#!/usr/bin/php" einfüge. Im Browser funktiert es allerdings nicht. Hier wird nur diese erste Zeile #!/usr/bin/php angezeigt. Wenn ich die wieder rausnehmen ist im Browser gar nichts zu sehen. Unter Windows funktionierts.

    1. Moin,

      Im Browser funktiert es allerdings nicht. Hier wird nur diese erste Zeile #!/usr/bin/php angezeigt. Wenn ich die wieder rausnehmen ist im Browser gar nichts zu sehen. Unter Windows funktionierts.

      Schau dir doch mal den Quelltext deiner Seite an. Kann es sein, dass dort PHP-Code auftaucht? Ich vermute, dass dein Webserver die PHP-Dateien nicht als PHP bearbeitet, sondern den Code ausliefert.

      Viele Grüße, Robert

      1. Ja, ich denke, wenn ich ein PHP-Skript schreibe ist das auch PHP-Code. Wie ändere ich das angesprochene Verhalten des Webservers bitte?

    2. habe nun in Notepad++ auf ANSI-Kodierung umgestellt. Jetzt funktioniert das PHP auf der Kommandozeile, wenn ich in der ersten Zeile "#!/usr/bin/php" einfüge.

      Nicht, dass Du UTF-8 mit BOM eingestellt hattest?

      Im Browser funktiert es allerdings nicht. Hier wird nur diese erste Zeile #!/usr/bin/php angezeigt.

      Wenn ich die wieder rausnehmen ist im Browser gar nichts zu sehen.

      <?php error-reporting(E_ALL); ?> in der ersten Zeile könnte helfen.

      Unter Windows funktionierts. Soso. ->

      Jörg Reinholz

      1. <?php error-reporting(E_ALL); ?> in der ersten Zeile könnte helfen.

        Habe den Index nach der folgenden Fehlerzeile nun nochmal als konstante Zuweisung (=1) eingetragen. Auf der Kommandozeile kommt demnach auch jetzt genau das erwartete Ergebnis: "1 Tage: &nbsp 0"

        PHP Notice:  Undefined index: zeitraum in /var/www/html/DB-Historie.php on line 8 <table border="1" cellpadding="2"> <tr><th colspan='8' align='left'><p>&nbsp Streaming-Fehler der letzten 1 Tage: &nbsp 0</p></th></tr><tr><th align='left'><p>&nbsp RA &nbsp</p></th><th align='left'><p>&nbsp Stream &nbsp</p><th align='left'><p>&nbsp URL &nbsp</p><th align='left'><p>&nbsp Fehler &nbsp</p></th><th align='left'><p>&nbsp Standort &nbsp</p></th><th align='left'><p>&nbsp Provider &nbsp</p></th><th align='left'><p>&nbsp Fehlerbeginn &nbsp</p></th><th align='left'><p>&nbsp Ursache &nbsp</p></th></tr></table> root@nbg-bisping-1b:/var/www/html# vi ./DB-Historie.php root@nbg-bisping-1b:/var/www/html# ./DB-Historie.php PHP Notice:  Use of undefined constant error - assumed 'error' in /var/www/html/DB-Historie.php on line 2 PHP Fatal error:  Call to undefined function reporting() in /var/www/html/DB-Historie.php on line 2 root@nbg-bisping-1b:/var/www/html#

        Die Webseite, wie gesagt, zeigt aber nichts an (andere html-Dokumente auf dem gleichen Server schon).

        1. <?php error-reporting(E_ALL); ?> in der ersten Zeile könnte helfen.

          PHP Notice:  Use of undefined constant error - assumed 'error' in /var/www/html/DB-Historie.php on line 2 PHP Fatal error:  Call to undefined function reporting() in /var/www/html/DB-Historie.php on line 2

          Naja. Es hat geholfen. Natürlich muss das "error_reorting['E_ALL']" heisen. Aber gut. Durch meinen Fehler wissen wir jetzt schon ein wenig über Deinen Kenntnisstand.

          Ändere das und schicke die neuen Fehlermeldungen.

          Ah ja:

          Undefined index: zeitraum

          Könnte es sein, dass davor was geladen werden soll, wobei eine unterdrückte Notiz anfällt, weil include 'datei' statt des hier richtigen require 'datei' verwendet wird und der Pfad zur Datei nicht mehr stimmt?

          Jörg Reinholz

          1. Hallo,

            <?php error-reporting(E_ALL); ?> in der ersten Zeile könnte helfen.

            PHP Notice:  Use of undefined constant error - assumed 'error' in /var/www/html/DB-Historie.php on line 2 PHP Fatal error:  Call to undefined function reporting() in /var/www/html/DB-Historie.php on line 2

            Naja. Es hat geholfen. Natürlich muss das "error_reorting['E_ALL']" heisen. Aber gut. Durch meinen Fehler wissen wir jetzt schon ein wenig über Deinen Kenntnisstand.

            und wir wissen noch was: Nämlich dass PHP wirklich ausgeführt wird. Das stand ja bis eben auch noch in Frage.

            Ciao,  Martin

            --
            Ordnung ist, wenn man etwas findet, was man gar nicht sucht. Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          2. Moin!

            PHP Notice:  Use of undefined constant error - assumed 'error' in /var/www/html/DB-Historie.php on line 2 PHP Fatal error:  Call to undefined function reporting() in /var/www/html/DB-Historie.php on line 2

            Naja. Es hat geholfen. Natürlich muss das "error_reorting['E_ALL']" heisen. Aber gut. Durch meinen Fehler wissen wir jetzt schon ein wenig über Deinen Kenntnisstand.

            Sorry, aber: Sorry, sowas von fail!

            Erstens: Tippfehler: error_reorting braucht ein P. Zweitens: Die runden Klammern sind unerlässlich, weil es eine Funktion ist - eckige Klammern sind komplett falsch hier.

            Ändere das und schicke die neuen Fehlermeldungen.

            - Sven Rautenberg

            1. Sorry, aber: Sorry, sowas von fail!

              Ja. Wenn ich müde bin will mein Gehirn nicht mehr den Job vom Gimp machen... Da geht ohne Lesebrille sowas halt mal mit durch.

              Jörg Reinholz

  5. Liebe(r) Selbst,

    habe mit xamp einige PHP-Skripte zum Laufen gebracht.

    das bedeutet, auf Deiner Windows-Mühle tuckert ein Webserverprogramm namens Apache, ein Datenbankserver-Programm namens MySQL und eine Scriptsprache namens PHP mit einem in den Apache eingeklinkten Modul, dass PHP in Webseiten zur Verfügung stellt.

    Wie sieht das jetzt bei Dir unter Linux aus?

    Nun wollte ich alles auf Linux-Servern ablaufen lassen, habe PHP-5, php5-mysql, apache2, maria-db-server und client installiert. Der Funktionstest <?php phpinfo(); ?> liefert auch keine Fehler.

    Soweit sehe ich einen wesentlichen Unterschied: MariaDB als Ersatz für MySQL. Bist Du sicher, dass Deine mysql-Funktionen unter PHP reibungslos mit MariaDB zusammenarbeiten?

    Aber bei meinen Skripten funktioniert nichts mehr.

    Extrem ungenaue Fehlerbeschreibung. Was exakt steht in Deinem Error-Log unter "/var/log/apache2/error.log"? Mach mal eine Shell auf (SSH-Verbindung z.B. mit PuTTY) und tippe ein:

    tail /var/log/apache2/error.log
    
    

    Da sollte nun etwas stehen, das Dir weiterhilft. Du darfst gerne die erhaltenen Fehler hier posten, wenn Du sie nicht selbst verstehst.

    Obwohl ich in Notpad++ bei allen Zeilenenden das CR rausgenommen habe. Die Kodierung steht auf UTF-8. Ist das so richtig?

    UTF-8 ist richtig. "Ohne BOM" wäre eine dazu nützliche Einstellung. Die CRs würde ich aber lassen. Unter Windows solltest Du immer CRLF als Zeilenenden haben, Linux kann das auch wunderbar verarbeiten.

    Konkret bekomme ich für fast jede Zeile die Meldung "Kommando nicht gefunden"

    Wenn Du im Browser Deinen Apache kontaktierst? Welche "Internetadresse" gibst Du denn ein? http://localhost/? Und das führt im Fehlerlog (s.o.) zu "Kommando nicht gefunden"? Sehr seltsam das.

    Ich habe dann auch die Zeile #!/usr/bin/php eingefügt. Brauch ich die?

    Nur, wenn Du PHP nicht aus dem Apache heraus nutzt, sondern von der Shell aus.

    Wie geht man vor, wenn man funktionierende PHP-Skripte von Windows-Rechnern auf Linux-Rechner portieren möchte?

    Copy&Paste. Ich habe eine Partition, die sowohl unter Windows, als auch unter Linux gelesen werden kann. Meine Web-Projekte befinden sich dort. Sowohl unter Apache/Windows als auch unter Apache/Linux sind die identisch lauffähig.

    Liegt es vielleicht am kopieren mit WinSCP. Hier ist Default:binary für das Transferformat eingestellt.

    Auch das sieht absolut richtig aus.

    Also: Was steht in der Fehlerlog-Datei (/var/log/apache2/error.log)?

    Liebe Grüße,

    Felix Riesterer.

    --
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
    1. Also: Was steht in der Fehlerlog-Datei (/var/log/apache2/error.log)?

      Liebe Grüße,

      Felix Riesterer.

      Hallo Felix,

      das stehen jede Menge "Call to undefined function mysql_connect()".

      Danach hatte ich auch schon gegoogelt und gedacht, ich finde, wie die Funktion vielleicht bei MariaDB heißt. Aber sollte wohl nicht anders sein. Funktioniert ja auch auf der Kommandozeile und ist doch nur was zwischen PHP und DB. Warum erhält da Apache eine Fehlermeldung?

      Beste Grüße

      1. Tach!

        das stehen jede Menge "Call to undefined function mysql_connect()".

        Die mysql_-Funktionen sind veraltet und fallen in Zukunft weg. mysqli_ oder PDO ist der Ersatz. Dein PHP hat jedenfalls die PHP-Extension mysql nicht geladen. Das zeigt dir auch die phpinfo()-Ausgabe durch Fehlen des entsprechenden Bereichs an.

        dedlfix.

        1. Die mysql_-Funktionen sind veraltet und fallen in Zukunft weg. mysqli_ oder PDO ist der Ersatz. Dein PHP hat jedenfalls die PHP-Extension mysql nicht geladen. Das zeigt dir auch die phpinfo()-Ausgabe durch Fehlen des entsprechenden Bereichs an.

          Vielen Dank, dedlfix,

          verstehe zwar immer noch nicht, warum es dann auf der Kommandozeile und unter Windows funktioniert, aber wie kann ich diese Funktionen installieren? Es scheint, ich muß dann einiges neu schreiben. Ist das wirklich der Grund meiner Probleme oder eher ein Optimierungs-Vorschlag?

          Wie kann ich die PHP-Extension mysql laden?

          1. Tach!

            verstehe zwar immer noch nicht, warum es dann auf der Kommandozeile und unter Windows funktioniert, aber wie kann ich diese Funktionen installieren? Es scheint, ich muß dann einiges neu schreiben. Ist das wirklich der Grund meiner Probleme oder eher ein Optimierungs-Vorschlag?

            Sowohl als auch.

            Wie kann ich die PHP-Extension mysql laden?

            Bei howtoforge gibt es sicherlich auch ein Tutorial für deine Linux-Distribution, das die Installation und Konfiguration von Webservern mit PHP detailliert beschreibt.

            dedlfix.

            1. Tach!

              verstehe zwar immer noch nicht, warum es dann auf der Kommandozeile und unter Windows funktioniert, aber wie kann ich diese Funktionen installieren? Es scheint, ich muß dann einiges neu schreiben. Ist das wirklich der Grund meiner Probleme oder eher ein Optimierungs-Vorschlag?

              Sowohl als auch.

              Wie kann ich die PHP-Extension mysql laden?

              Bei howtoforge gibt es sicherlich auch ein Tutorial für deine Linux-Distribution, das die Installation und Konfiguration von Webservern mit PHP detailliert beschreibt.

              dedlfix.

              service apache2 restart hat's getan!

              Sorry für die Aufregung und vielen Dank an alle für die Tipps!

      2. Liebe(r) Selbst,

        das stehen jede Menge "Call to undefined function mysql_connect()".

        siehste! Da liegt der Hase im Pfeffer.

        Funktioniert ja auch auf der Kommandozeile und ist doch nur was zwischen PHP und DB. Warum erhält da Apache eine Fehlermeldung?

        Du erwähntest phpinfo() und dass diese Ausgabe im Browser angezeigt würde. Steht da etwas zu mysql-Funktionen? Nein? Braucht PHP etwa mysql(li)-Erweiterungen, die Du unter Linux noch nicht installiert hast?

        Liebe Grüße,

        Felix Riesterer.

        --
        "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
    2. Tach!

      Soweit sehe ich einen wesentlichen Unterschied: MariaDB als Ersatz für MySQL. Bist Du sicher, dass Deine mysql-Funktionen unter PHP reibungslos mit MariaDB zusammenarbeiten?

      Ja. Es sind noch keine generellen Inkompatibilitäten der API bekanntgeworden.

      Obwohl ich in Notpad++ bei allen Zeilenenden das CR rausgenommen habe. Die Kodierung steht auf UTF-8. Ist das so richtig? UTF-8 ist richtig. "Ohne BOM" wäre eine dazu nützliche Einstellung.

      Da UTF-8 zu ASCII kompatibel ist und alle syntaxrelevanten Teile ASCII verwenden, gibt es kein generelles Problem, an dem die Kodierung schuld wäre.

      Die CRs würde ich aber lassen. Unter Windows solltest Du immer CRLF als Zeilenenden haben, Linux kann das auch wunderbar verarbeiten.

      Lediglich der Windows-Editor hat damit Probleme. Ansonsten kommt Windows nicht direkt mit den Zeilenenden in PHP in Berührung. PHP kann in beiden Welten mit beiden Arten umgehen, den Apachen stört es nicht. Die Empfehlung kann ich so nicht teilen. Im Zweifelsfall ist das CR störend. Beispielsweise, wenn man Shellscripts für Linux schreibt. Es ist aber ein sehr unwahrscheinlicher Anwendungsfall, dass man Scripts hat, die unter Windows im Apachen laufen und unter Linux in der Shell funktioniern sollen.

      Konkret bekomme ich für fast jede Zeile die Meldung "Kommando nicht gefunden"

      Es kann durchaus sein, dass die CR hier die Ursache sind, wenn man den sehr unwahrscheinlichen Fall doch probiert.

      Wenn Du im Browser Deinen Apache kontaktierst? Welche "Internetadresse" gibst Du denn ein? http://localhost/? Und das führt im Fehlerlog (s.o.) zu "Kommando nicht gefunden"? Sehr seltsam das.

      Wohl eher nicht, aber da er nicht genau sagt, was er konkret wie macht, kann man nur mehr raten als helfen.

      Liegt es vielleicht am kopieren mit WinSCP. Hier ist Default:binary für das Transferformat eingestellt. Auch das sieht absolut richtig aus.

      Das sieht eher komisch aus, weil das Zeilenenden-Umfummeln eine Spezialität von FTP ist und nicht von SSH/SCP.

      Also: Was steht in der Fehlerlog-Datei (/var/log/apache2/error.log)?

      Wenn PHP nicht auf die eine oder andere Weise in den Webserver eingebunden ist (und dann ein Fehler im PHP-Skript steckt), ist es aus der Sicht des Apachen kein Fehler, eine Datei ungesichtet und uninterpretiert auszuliefern.

      dedlfix.

      1. PHP kann in beiden Welten mit beiden Arten umgehen

        Naja. So lange man nach file() für jede Zeile ein trim() macht und es zudem tunlichst vermeidet an PHP_EOL zu glauben...

        Jörg Reinholz

        1. Tach!

          PHP kann in beiden Welten mit beiden Arten umgehen Naja. So lange man nach file() für jede Zeile ein trim() macht und es zudem tunlichst vermeidet an PHP_EOL zu glauben...

          Andere Baustelle. Es geht hier um PHP-Script-Dateien. Die wird man wohl eher selten mit file() einlesen.

          dedlfix.