Próbuję napisać skrypt, aby pobrać dane online; Skrypt powinien być wywoływany przez zadanie cron lub php cli oraz standardowe żądanie GET HTTP. Jak podano na stronie PHP $_SERVER['argv']
powinien pasować do moich potrzeb:
Tablica argumentów przekazanych do skryptu. Gdy skrypt jest uruchamiany w wierszu poleceń, daje to dostęp w stylu C do parametrów wiersza poleceń. W przypadku wywołania za pomocą metody GET, będzie zawierał ciąg zapytania.
Jednak nie mogę go uruchomić ze standardowym żądaniem HTTP GET. $_SERVER['argv']
nie jest ustawiony. Czego mi brakuje?
<?php
// jobs/fetch.php
var_dump($_SERVER['argv']);
?>
Wyjście CLI php jobs/fetch.php -a -bhello
:
array(3) {
[0]=>
string(14) "jobs/fetch.php"
[1]=>
string(2) "-a"
[2]=>
string(7) "-bhello"
}
Pobierz dane wyjściowe jobs/fetch.php?a=&b=hello
:
Uwaga: Niezdefiniowany indeks: argv w jobs/fetch.php.
2 odpowiedzi
Instrukcja nie określa tego zbyt dobrze, ale jeśli chcesz, aby $_SERVER['argc']
, $_SERVER['argv']
, $argc
, $argv
zostały zarejestrowane, gdy nie korzystasz z CLI
, a następnie wartość php.ini
register_argc_argv musi być włączony w php.ini (domyślnie wyłączone [ze względu na wydajność]).
Możesz wykonać następujące czynności, aby uzyskać argv
lub argumenty ciągu zapytania w zależności od tego, jak działa skrypt:
if (php_sapi_name() == 'cli') {
$args = $_SERVER['argv'];
} else {
parse_str($_SERVER['QUERY_STRING'], $args);
}
Oto kilka szczegółów z php.ini
:
; This directive determines whether PHP registers $argv & $argc each time it
; runs. $argv contains an array of all the arguments passed to PHP when a script
; is invoked. $argc contains an integer representing the number of arguments
; that were passed when the script was invoked. These arrays are extremely
; useful when running scripts from the command line. When this directive is
; enabled, registering these variables consumes CPU cycles and memory each time
; a script is executed. For performance reasons, this feature should be disabled
; on production servers.
; Note: This directive is hardcoded to On for the CLI SAPI
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/register-argc-argv
Zobacz także http://www.php.net/manual/en/reserved .variables.argv.php i parse_str().
Będziesz musiał użyć $_GET
lub $_SERVER['argv']
w zależności od tego, jak wywoływany jest twój skrypt. Żaden z nich nie jest używany do obu.
Na przykład:
if(!empty($_SERVER['argv'][0]) {
$a = $_SERVER['argv'][1];
$b = $_SERVER['argv'][2];
} else {
$a = $_GET['a'];
$b = $_GET['b'];
}
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.