Я вызываю PHP-скрипт всякий раз, когда загружается веб-страница. Однако есть параметр, который необходимо запустить сценарию PHP (который я обычно передаю через командную строку при тестировании сценария).
Как я могу передавать этот аргумент каждый раз, когда скрипт запускается при загрузке страницы?
php
parameters
Ник
источник
источник
Ответы:
Предположительно, вы передаете аргументы в командной строке следующим образом:
... а затем доступ к ним в скрипте таким образом:
<?php // $argv[0] is '/path/to/wwwpublic/path/to/script.php' $argument1 = $argv[1]; $argument2 = $argv[2]; ?>
При передаче аргументов через HTTP (доступ к сценарию через Интернет) вам нужно использовать строку запроса и обращаться к ним через суперглобальный $ _GET:
Перейдите на http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2
... и доступ:
<?php $argument1 = $_GET['argument1']; $argument2 = $_GET['argument2']; ?>
Если вы хотите, чтобы сценарий запускался независимо от того, откуда вы его вызываете (из командной строки или из браузера), вам понадобится что-то вроде следующего:
EDIT: как указал Ктулху в комментариях, самый прямой способ проверить, в какой среде вы выполняете, - использовать константу PHP_SAPI . Я обновил код соответственно:
<?php if (PHP_SAPI === 'cli') { $argument1 = $argv[1]; $argument2 = $argv[2]; } else { $argument1 = $_GET['argument1']; $argument2 = $_GET['argument2']; } ?>
источник
empty($_GET)
.$_GET
- это предопределенное значение, поэтому я почти уверен, что оно всегда установлено, но пусто, если не заданы параметры GET.empty()
возвращаетfalse
пустые строки и массивы.$_GET
на самом деле это не установлено, если сценарий вызывается в контексте командной строки.empty()
приведет к тому, что он будет искать аргументы командной строки, если к сценарию осуществляется доступ из Интернета без строки запроса, тем самым генерируя больше уведомлений.PHP_SAPI === 'cli'
..htaccess
является файлом Apache - Apache обрабатывает входящие запросы с помощью директив,.htaccess
а затем вызывает PHP для создания ответа на запрос. Итак, если вы находитесь в командной строке,.htaccess
будут полностью проигнорированы. Если вы обращаетесь к сценарию через Интернет и хотите добавить новые аргументы строки запроса после получения запроса, обычно это делается с помощьюmod_rewrite
. Если это недостаточно ответ на ваш вопрос, я предлагаю вам опубликовать новый вопрос.$argv[0]; // the script name $argv[1]; // the first parameter $argv[2]; // the second parameter
Если вы хотите, чтобы весь скрипт запускался независимо от того, откуда вы его вызываете (из командной строки или из браузера), вам понадобится что-то вроде следующего:
<?php if ($_GET) { $argument1 = $_GET['argument1']; $argument2 = $_GET['argument2']; } else { $argument1 = $argv[1]; $argument2 = $argv[2]; } ?>
Для вызова из командной строки
chmod 755 /var/www/webroot/index.php
и использования/usr/bin/php /var/www/webroot/index.php arg1 arg2
Чтобы позвонить из браузера, используйте
http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
источник