Come faccio a passare i parametri in uno script PHP attraverso una pagina Web?


139

Sto chiamando uno script PHP ogni volta che viene caricata una pagina Web. Tuttavia, esiste un parametro che deve essere eseguito dallo script PHP (che normalmente passo attraverso la riga di comando quando collaudo lo script).

Come posso passare questo argomento ogni volta che lo script viene eseguito al caricamento della pagina?


1
Puoi pubblicare il tuo codice, per favore?
Senor Amor

1
quindi vuoi eseguire una riga di comando? o uno script php?
Christopher Pelayo

Va bene, grazie ragazzi. Di seguito ho le risposte: usa $ GET e passalo come valore di parametro nell'URL stesso.
Nick,

Risposte:


233

Presumibilmente stai passando gli argomenti nella riga di comando come segue:

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

... e quindi accedervi nello script in questo modo:

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

Quello che devi fare quando passi argomenti tramite HTTP (accedendo allo script sul web) è usare la stringa di query e accedervi attraverso il superglobal $ _GET:

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

... e accedi:

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

Se vuoi che lo script venga eseguito indipendentemente da dove lo chiami (riga di comando o dal browser) vorrai qualcosa di simile al seguente:

EDIT: come sottolineato da Cthulhu nei commenti, il modo più diretto per testare in quale ambiente stai eseguendo è usare 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'];
}
?>

Vorrei usare empty($_GET). $_GETè un valore predefinito, quindi sono abbastanza sicuro che sia sempre impostato, ma vuoto se non ci sono parametri GET impostati. empty()ritorna falseper stringhe e array vuoti.
Tim S.

Senza effettivamente controllare, credo che $_GETin realtà non sia impostato se lo script viene chiamato in un contesto da riga di comando. empty()indurrebbe a cercare argomenti della riga di comando se si accede allo script dal Web senza una stringa di query, generando così più avvisi.
Jason

$ argv [0] non è in realtà arg1 nel tuo primo esempio, sarebbe "/path/to/wwwpublic/path/to/script.php". ( Php.net/manual/en/reserved.variables.argv.php )
CasualT

3
Mi rendo conto di essere in ritardo per la festa, ma il modo corretto di controllare è PHP_SAPI === 'cli'.
Cthulhu,

1
@emanueledelgrande Non sono del tutto sicuro di seguire quello che mi stai chiedendo, ma ci proverò. .htaccessè un file Apache - Apache elabora le richieste in arrivo con le direttive .htaccesse quindi invoca PHP per creare la risposta alla richiesta. Quindi, se sei nella riga di comando,.htaccess sarà completamente ignorato. Se si accede a uno script tramite il Web e si desidera aggiungere nuovi argomenti di querystring dopo aver ricevuto la richiesta, in genere viene eseguita mod_rewrite. Se ciò non risponde sufficientemente alla tua domanda, ti suggerisco di pubblicare una nuova domanda.
Jason,

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

Se vuoi che tutto lo script venga eseguito indipendentemente da dove lo chiami (riga di comando o dal browser) vorrai qualcosa di simile al seguente:

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

Per chiamare dalla riga di comando chmod 755 /var/www/webroot/index.phpe utilizzare

/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.