$ GLOBALS ["argv"]和$ argv为空,$ _SERVER ["argv"]就好了

Mat*_*nik 4 php

我正在与在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)

它对我有用!