2012-03-08 15 views
127

Sto chiamando uno script PHP ogni volta che viene caricata una pagina web. Tuttavia, c'è un parametro che lo script PHP deve eseguire (che normalmente passo attraverso la riga di comando quando sto testando lo script).Come posso passare i parametri in uno script PHP attraverso una pagina web?

Come posso passare questo argomento ogni volta che lo script viene eseguito quando viene caricata la pagina?

+0

Come si esegue? – zerkms

+1

Puoi pubblicare il tuo codice, per favore? – SenorAmor

+1

quindi vuoi eseguire una riga di comando? o uno script php? –

risposta

217

Presumibilmente si sta passando gli argomenti in sulla linea di comando come segue:

php /path/to/wwwpublic/path/to/script.php arg1 arg2 

... e poi accedervi nello script così:

<?php 
// $argv[0] is '/path/to/wwwpublic/path/to/script.php' 
$argument1 = $argv[1]; 
$argument2 = $argv[2]; 
?> 

Che cosa è necessario essere sta facendo passare gli argomenti tramite HTTP (accedendo allo script sul web) sta utilizzando la stringa di query e li accede tramite $ _GET superglobale:

Vai a http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2

... e l'accesso:

<?php 
$argument1 = $_GET['argument1']; 
$argument2 = $_GET['argument2']; 
?> 

Se si desidera eseguire lo script indipendentemente da dove si chiama da (riga di comando o dal browser) si vorrà qualcosa di simile al seguente:

MODIFICA: come indicato da Cthulhu nei commenti, il modo più diretto per verificare quale ambiente si sta eseguendo è utilizzare la costante PHP_SAPI. Ho aggiornato il codice di conseguenza:

<?php 
if (PHP_SAPI === 'cli') { 
    $argument1 = $argv[1]; 
    $argument2 = $argv[2]; 
} 
else { 
    $argument1 = $_GET['argument1']; 
    $argument2 = $_GET['argument2']; 
} 
?> 
+2

L'ultimo esempio di codice pubblicherà le notifiche – zerkms

+1

forse "if (isset ($ _ GET))" – Jason

+0

userei 'empty ($ _ GET)'. '$ _GET' è un valore predefinito, quindi sono abbastanza sicuro che sia sempre impostato, ma vuoto se non ci sono parametri GET impostati. 'empty()' restituisce 'false' per le stringhe e gli array vuoti. –

15
$argv[0]; // the script name 
$argv[1]; // the first parameter 
$argv[2]; // the second parameter 

Se si vuole tutto lo script per eseguire indipendentemente da dove si chiama da (riga di comando o dal browser) si vorrà qualcosa di simile a quanto segue :

<?php 
if ($_GET) { 
    $argument1 = $_GET['argument1']; 
    $argument2 = $_GET['argument2']; 
} else { 
    $argument1 = $argv[1]; 
    $argument2 = $argv[2]; 
} 
?> 

Per chiamare da linea di comando e utilizzare chmod 755 /var/www/webroot/index.php

/usr/bin/php /var/www/webroot/index.php arg1 arg2 

Per chiamare dal browser, utilizzare

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2 
Problemi correlati