Передать переменную в php-скрипт работает из командной строки



у меня есть PHP-файл, который необходимо запустить из командной строки (через crontab). Мне нужно пройти type=daily файл, но я не знаю как. Я попробовал:



php myfile.php?type=daily


но эта ошибка была возвращена:




не удалось открыть входной файл: файл myfile.php?тип=ежедневно




что я могу сделать?

725   12  

12 ответов:

The ?type=daily аргумент (в конечном итоге в $_GET массив) только для веб-страниц.

вам нужно будет назвать это как php myfile.php daily и получить этот аргумент от $argv массив (который будет $argv[1] С $argv[0] будет myfile.php).

если страница также используется в качестве веб-страницы, вы можете рассмотреть два варианта. Либо доступ к нему с shell-скрипт из cron и wget и называем это:

#!/bin/sh
wget http://location.to/myfile.php?type=daily

или проверить в php-файл вызывается ли он из командной строки или нет:

if (defined('STDIN')) {
  $type = $argv[1];
} else { 
  $type = $_GET['type'];
}

(Примечание: вам, вероятно, нужно / хотите проверить, если $argv на самом деле содержит мало переменных и т. п.)

просто передайте его как обычные параметры и получите доступ к нему в PHP с помощью $argv массив.

php myfile.php daily

и в файл myfile.php

$type = $argv[1];

эти строки преобразуют аргументы вызова CLI как php myfile.php "type=daily&foo=bar" в известной $_GET-массив:

if (!empty($argv[1])) {
  parse_str($argv[1], $_GET);
}

хотя это довольно грязно, чтобы перезаписать глобальный $_GET-массив, он быстро преобразует все ваши скрипты, чтобы принимать аргументы CLI.

см.http://php.net/manual/en/function.parse-str.php для деталей.

параметры отправки по индексу, как и другие приложения

php myfile.php type=daily

и тогда вы можете Гат их так

<?php
if (count($argv) == 0) exit;
foreach ($argv as $arg)
    echo $arg;
?>

Сохраните этот код в файл myfile.php и работать как php myfile.php type=daily

<?php
$a = $argv;
$b = array();
if (count($a) == 1) exit;
foreach ($a as $key => $arg){
        if ($key > 0){
            list($x,$y) = explode('=', $arg);
            $b["$x"]    = $y;  
           }
       }
?>

если добавить var_dump($b); до ?> тег, вы увидите, что массив $b содержит type => daily.

<?php
if (count($argv) == 0) exit;
foreach ($argv as $arg)
echo $arg;
?>

этот код не должен использоваться. Прежде всего CLI называется так: /usr/bin/php phpscript.php будет иметь одно значение argv, которое является именем скрипта

array(2) {
   [0]=>
   string(13) "phpscript.php"
}

этот всегда будет выполняться, так как будет иметь 1 или 2 args passe

Я настоятельно рекомендую использовать getopt.

документация по адресу http://php.net/manual/en/function.getopt.php

Если вы хотите помощь распечатать для ваших вариантов, чем взглянуть на https://github.com/c9s/GetOptionKit#general-command-interface

чтобы использовать $_GET, так что вам не нужно поддерживать оба, если он может быть использован из командной строки и из веб-браузера.

if(isset($argv))
    foreach ($argv as $arg) {
        $e=explode("=",$arg);
        if(count($e)==2)
            $_GET[$e[0]]=$e[1];
        else    
            $_GET[$e[0]]=0;
    }

с помощью функции getopt () мы также можем прочитать параметр из командной строки просто передать значение с помощью PHP running command

в PHP Азбука.php --name=xyz

abc.php

$val = getopt(null, ["name:"]);
print_r ($val);
о/п: -
массив ( 'name' = > 'xyz', )

вы можете используйте то, что sep16 on php.net рекомендует:

<?php

parse_str(implode('&', array_slice($argv, 1)), $_GET);

?>

он ведет себя точно так же, как вы ожидали бы с cgi-php.

$ php -f myfile.php type=daily a=1 b[]=2 b[]=3

устанавливается $_GET['type'] до 'daily',$_GET['a'] до '1' и $_GET['b'] до array('2', '3').

просто передайте его в качестве параметра следующим образом:

php test.php one two three

и внутри теста.php:

<?php
if(isset($argv))
{
    foreach ($argv as $arg) 
    {
        echo $arg;
        echo "\r\n";
    }
}
?>
if (isset($argv) && is_array($argv)) {
    $param = array();
    for ($x=1; $x<sizeof($argv);$x++) {
        $pattern = '#\/(.+)=(.+)#i';
        if (preg_match($pattern, $argv[$x])) {
            $key =  preg_replace($pattern, '', $argv[$x]); 
            $val =  preg_replace($pattern, '', $argv[$x]);
            $_REQUEST[$key] = $val;
            $$key = $val;
        }    
    }
}

Я поставил параметры в $_REQUEST

$_REQUEST[$key] = $val;

а также использовать непосредственно

$$key=$val

использовать это так:

мой_файл.php / key=val

Comments

    Ничего не найдено.