Alex: $argv leer

Habe ein Skript bei dem mittels $argv was übergeben werden soll. Habe das Skript jetzt leider nicht hier.

Jedenfalls steht bei erneuten Aufruf des Skripts nichts in $argv drin. Was ist bei $argv zu beachten? Muss irgendwas bestimmtes konfiguriert sein auf dem Server oder muss was beim zugreifen und übergeben beachtet werden?

Welche Alternativen gibt es, falls die Lösung schwierig ist. Danke für Eure Hilfe!

  1. Hi,

    Habe ein Skript bei dem mittels $argv was übergeben werden soll. Habe das Skript jetzt leider nicht hier.

    was meinst Du mit übergeben? Ist das ein Include? Bitte mal das Problem auf den Punkt bringen.

    Code wäre dann nicht schlecht.

    silver Karnickel

    1. Erst einmal danke für die Infos. Problem ist, dass das ganze nicht mein Skript ist. Ich bin nur für die Fehlerbehebung zuständig :\

      Das ist der Aufruf eines Threads in einem Forum:
      forum.php3?titel&id=$id&antworten=$antworten                                                        &maximum=$maximum&titel=$titel

      In ID wird die ID des Threads übergeben, in antworten die Anzahl der Antworten, in Maximum die ID des letzten Datensatzes (Eintrags) und in Titel der Titel. Überall steht auch das entsprechende drin.

      Dann wird halt innerhalb des Skripts beim erneuten Aufruf abgefragt, ob in $argv[0] titel, add oder sonstiges drin steht um halt einen Beitrag zu lesen, hinzuzufügen..... In $argv steht aber halt nichts drin. Ich kenne argv nicht, weiß nur das es eine globale Variable ist. Die Sache läuft auf einem Webserver und wird normal mittels Browser aufgerufen.

      Dieses Skript lief vorher, aber da wars noch unter PHP3, jetzt auf PHP4 läufts nicht mehr.

      Wäre sehr dankbar für Hilfe. Komme nicht hinter den Fehler.

      1. Wie sieht genau der Befehl für register argc argv aus?

        Sorry für die dumme Nachfrage, kenne mich damit nicht aus.

      2. echo $begrüßung;

        forum.php3?titel&id=$id&antworten=$antworten&maximum=$maximum&titel=$titel
        Dann wird halt innerhalb des Skripts beim erneuten Aufruf abgefragt, ob in $argv[0] titel, add oder sonstiges drin steht um halt einen Beitrag zu lesen, hinzuzufügen..... In $argv steht aber halt nichts drin. Ich kenne argv nicht, weiß nur das es eine globale Variable ist.

        Der globale Variablenraum wird nur dann mit Variablen von außerhalb angereichert, wenn register_globals eingeschaltet ist. Die Defaulteinstellung ist aber schon seit einer ganzen Weile aus, weil sich damit nicht richtig programmierte Scripte ungebetene Variableninhalte zuziehen können.

        argc/argv sind vorwiegend für Kommandozeilenprogrammierung gedacht und ansonsten in $_SERVER zu finden. Ruf doch mal phpinfo() auf.

        echo "$verabschiedung $name";

        1. hmpf....

          habe jetzt mal phpinfo aufgerufen und mir wurde angezeigt das globale variablen off seien, argv_argc aber on. Die entsprechende Seite läuft auf einem Server und nur für diese Seite wollte ich die globals und argv_argc on schalten und zwar so:

          php_admin_flag register_globals on
          php_admin_flag register_argc_argv on

          in der vhost/conf. Aber komischwerweise werden mir die globals als "off" gezeigt.

          Konkret, wie könnte ich mit $_Server zugreifen? $_SERVER[0]?? Die ist nämlich auch leer.

          Bin langsam am verzweifeln. Wie gesagt, das Problem besteht nach Umstellung von PHP3 auf PHP4.

          1. echo $begrüßung;

            Konkret, wie könnte ich mit $_Server zugreifen? $_SERVER[0]?? Die ist nämlich auch leer.

            Um zu sehen, was in einem Array drin ist, kann man sich den kompletten Inhalt anzeigen lassen. Dazu eignet sich print_r() mit vorangehendem <pre>.

            Auch phpinfo() listet den Inhalt von $_SERVER, ziemlich weit unten, oder mit phpinfo(INFO_VARIABLES); ohne die anderen Angaben.

            echo "$verabschiedung $name";

        2. Nochmal ich ;)

          Ich muss auch nicht argv nutzen. Ich muss nur wissen wie ich auf den ersten übergebenen Wert zugreifen kann. Der 1. Wert ist halt das titel, add oder so. Ich muss abfragen können, wie der 1. übergebene Wert. Heißt er "titel" oder "add" oder....

          Wie kann ich den ansprechen, egal ob argv oder nicht.

          1. Hallo Alex,

            Ich muss auch nicht argv nutzen. Ich muss nur wissen wie ich auf den ersten übergebenen Wert zugreifen kann. Der 1. Wert ist halt das titel, add oder so. Ich muss abfragen können, wie der 1. übergebene Wert. Heißt er "titel" oder "add" oder....

            Du solltest Dir die Ausgabe von phpinfo() genau anschauen, Dich interessieren offensichtlich die Inhalte von $_SERVER.  Die Query-Komponente eines URI wird übrigens oft mit Querystring bezeichnet. Es ist übrigens nicht unbedingt die beste Idee, die Auswertung positionsabhängig vorzunehmen, typischerweise verwendet man Schlüssel-Wert-Paare. Soweit ich das sehe, ist das bei Deinem Problem auch der Fall. Schau Dir den Inhalt des superglobalen Arrays $_GET an; verwende die von dedlfix empfohlene Methode.

            Ach ja, einen Rat zum Schluß. Wenn die Anwendung so alt ist wie Du hier beschreibst, dann ist es möglicherweise ratsam, sie komplett neu zu schreiben. Seit PHP3 hat sich sehr viel getan ;-)

            Freundliche Grüße

            Vinzenz

          2. Hi Alex,

            Ich muss auch nicht argv nutzen. Ich muss nur wissen wie ich auf den ersten übergebenen Wert zugreifen kann. Der 1. Wert ist halt das titel, add oder so. Ich muss abfragen können, wie der 1. übergebene Wert. Heißt er "titel" oder "add" oder....

            Das geht mittlerweile (PHP 4 wie auch PHP 5) viel einfacher:

            // Prüfen ob "titel" übergeben wurde  
            if(isset($_GET['titel'])) {  
              // mache hier etwas, wenn "titel" übergeben wurde  
              
              // Was steht in "titel" drin?  
              echo 'In "titel" steht: ';  
              echo $_GET['titel'];  
              echo '<br>';  
            }  
            else {  
              // mache hier etwas anderes, wenn "titel"  
              // nicht übergeben wurde  
              
              echo 'Leider wurde kein "titel" übergeben.<br>';  
            }
            

            Das alles geht für beliebige Werte, die über die URL übergeben wurden, also auch $_GET['add'] usw., siehe auch $_GET und andere vordefinierte Variablen.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Patch zur Verwendung von PATHINFO in JLog
            Berater sind Leute die dir deine Uhr wegnehmen, damit sie dir anschließend sagen können wie spät das es ist! (Aus einem Kabarett)
      3. Hi Alex,

        Dieses Skript lief vorher, aber da wars noch unter PHP3, jetzt auf PHP4 läufts nicht mehr.

        Das du deinen Server erst jetzt von PHP 3 auf PHP 4 umstellst ist ein ganz gewaltiger Fehler, die letzte PHP 3 Version wurde Ende 2004 veröffentlicht - seit dem wurde die Entwicklung an PHP 3 nicht mehr weiter fortgeführt (also keine Bugs behoben etc). Sprich: Du hättest schon vor 2 Jahren auf PHP 4 umstellen sollen.

        Oder ist es gar nicht dein Server, sondern der eines Providers? Falls dem so ist würde ich dir dringend raten den Provider zu wechseln - ein Provider der jetzt erst auf PHP 4 umstellt kann nicht viel taugen.

        Doch machst du gerade jetzt den nächsten Fehler - indem du auf PHP 4 umstellst. PHP 4 ist nämlich gerade dabei alt zu werden, zwar wird derzeit PHP 4 noch weiter entwickelt und Bugs werden behoben, aber seit einem Jahr gibt es nun schon PHP 5 und und vor zwei Wochen wurde bereits PHP 5.1.6 veröffentlichst. Wenn du jetzt also am Updaten bist, dann update doch bitte direkt auf PHP Version 5 - dann kannst du dein Script auch direkt auf PHP 5 umschreiben und ersparst dir die überflüssige Arbeit, wenn du dein Script erst auf PHP 4 und dann später (vl. in einem halben Jahr) auf PHP 5 umschreiben würdest.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Patch zur Verwendung von PATHINFO in JLog
        Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. (Albert Einstein)
  2. Hi Alex,

    Muss irgendwas bestimmtes konfiguriert sein auf dem Server oder muss was beim zugreifen und übergeben beachtet werden?

    Ja, register_argc_argv muss auf 1 gesetzt sein (php.ini). Das Ganze ergibt natürlich nur dann Sinn, wenn man sein PHP-Scripte über Kommandozeile laufen lässt - lässt man es über einen Webserver laufen, so sagt $_SERVER einem alles was man braucht.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Patch zur Verwendung von PATHINFO in JLog
    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)