我正在与在Hostgator共享主机上运行的PHP CLI的(可能)简单问题作斗争.一个简单的代码:
<?php
var_dump($argv);
var_dump($GLOBALS["argv"]);
var_dump($_SERVER["argv"]);
var_dump(ini_get("register_argv_argv"));
?>
Run Code Online (Sandbox Code Playgroud)
在我的本地计算机以及php的其他几个实例上运行时:
php test.php arg1
Run Code Online (Sandbox Code Playgroud)
按预期正确输出:
array (
0 => 'test.php',
1 => 'arg1'
)
array (
0 => 'test.php',
1 => 'arg1'
)
array (
0 => 'test.php',
1 => 'arg1'
)
1
Run Code Online (Sandbox Code Playgroud)
但是从Host上的cron运行共享托管它的输出:
array (
)
NULL
array (
0 => 'test.php',
1 => 'arg1'
)
1
Run Code Online (Sandbox Code Playgroud)
我正在与之战斗的代码是遗留代码,并且在很大程度上依赖于$ GLOBALS ["argv"]来解析命令行参数.我无法修改整个代码库来依赖$ _SERVER ["argv"].
可能是为什么我的所有PHP实例都使用命令行参数填充所有数组,而且Hostgator上的托管php根本没有填充$ GLOBALS ["argv"]?
我做了一个解决这个问题的解决方法,但是当我不知道为什么会发生什么时我讨厌:)
谢谢你的任何想法!
小智 6
我有同样的问题没有 $_SERVER['argv'];
尝试php-cli而不是php:
$job = "* * * * * php-cli /home/user/file.php surf";
Run Code Online (Sandbox Code Playgroud)
它对我有用!