2012-10-10 82 views
4

我正在與運行在Hostgator共享主機上的PHP CLI(可能)的簡單問題鬥爭。一個簡單的代碼:

<?php 
var_dump($argv); 
var_dump($GLOBALS["argv"]); 
var_dump($_SERVER["argv"]); 
var_dump(ini_get("register_argv_argv")); 
?> 

我的本地機器上運行的時候,以及PHP的其他幾個實例爲:所預測的正確

php test.php arg1 

輸出:

array (
    0 => 'test.php', 
    1 => 'arg1' 
) 
array (
    0 => 'test.php', 
    1 => 'arg1' 
) 
array (
    0 => 'test.php', 
    1 => 'arg1' 
) 
1 

但是從cron運行在Hostgator共享主機上輸出:

array (
) 
NULL 
array (
    0 => 'test.php', 
    1 => 'arg1' 
) 
1 

我與之戰鬥的代碼是遺留代碼,它非常依賴$ GLOBALS [「argv」]來解析命令行參數。我沒有辦法修改整個代碼庫來代替$ _SERVER [「argv」]。

什麼可能是爲什麼我所有的PHP實例用命令行參數填充所有數組,並且Hostgator上託管的php不會填充$ GLOBALS [「argv」]?

我做了一個解決辦法來處理這個問題,但我討厭當我不知道爲什麼有事情發生:)

感謝您的想法!

+2

只有當register_globals打開時,它才被定義爲全局'$ argv'。 – mario

+0

是不是$ _GLOBALS而不是$ GLOBALS? – Rolice

+0

@Roice - 不,它不是。 (它應該,但它不是 - 你不只是希望PHP可以一致嗎?) – SDC

回答

6

我有同樣的問題,沒有$_SERVER['argv'];

嘗試php-cli,而不是php

$job = "* * * * * php-cli /home/user/file.php surf"; 

它爲我工作!

+0

genious。我試圖找到一個解決方案大約兩個星期。非常感謝你! – robot11