2013-03-21 30 views
13

鑑於命令:PHP:如何獲得內部參數?

/usr/bin/php -c /path/to/custom/php.ini /path/to/script.php 

我想獲得的內部選項:

-c /path/to/custom/php.ini 

事情我已經試過了不起作用:

  • 包含['/path/to/script.php']
  • getopt('c')包含[]
  • $_ENV不包含它
  • $_SERVER不包含它

我也看了PHP_*常數(如PHP_BINARY但無法找到一個爲這些參數。

有什麼辦法可以得到這些參數嗎?請注意,我並非試圖獲取已加載的ini文件,而是可能在此處顯示的任何參數。

+0

建議var_export($ _ SERVER)作爲第一個停靠港,也,謂心不是一個腳本參數,所以我懷疑你會看到它,我彷彿記得你將永遠只能看到跟從的任何ARGS腳本。另外,你是否試圖獲得自定義INI?或傳遞給PHP的任何參數?如果你只是想要ini,請看http://www.php.net/manual/en/function.php-ini-loaded-file.php – bizzehdee 2013-03-21 21:47:41

+0

'echo shell_exec('ps -p'.getmypid()。' -o args =');' – salathe 2013-03-21 23:16:30

回答

2

-c /path/to/custom/php.ini是一個在啓動腳本之前傳遞給PHP解析器,解釋器和其他內部東西的選項。

/path/to/script.php是一個不僅傳遞給PHP可執行文件,而且傳遞到腳本的實際參數。

以下參數如/usr/bin/php -c /path/to/custom/php.ini /path/to/script.php A B C也會傳遞給您的腳本。

不幸的是,-c選項不是其中之一。

您可以使用get_cfg_var在已執行的PHP腳本中獲取已使用的php.ini文件。

echo get_cfg_var('cfg_file_path'); 

如果您正在過-c選項,你會得到的路徑php.ini文件。否則,你會得到默認的php.ini文件。

0

不幸的是,由於命令行BASH參數如何被解析,您將無法在腳本調用之前訪問參數。現在,程序/usr/bin/php

argv[0]=/usr/bin/php 
argv[1]=-c 
argv[2]=/path/to/custom/php.ini 
argv[3]=/path/to/script.php 

這就是你的參數登陸的地方。你在另一方面腳本有:

argv[0]=/path/to/script.php 

僅僅因爲參數經過處理從右到左,還有你的腳本調用後沒有參數。

3

PHP沒有這樣做的內部方式,所以你將不得不依賴於某些系統信息和權限。

$pid = getmypid(); 
$ps = `ps aux | grep $pid`; 
$command = substr($ps, strpos($ps, '/usr/bin/php')); 
$args = explode(' ', $command); //not pretty, should probably use preg 
+0

除非將'-H'作爲php參數傳遞,否則它會執行。也不需要你可以將'-p pid'傳遞給'ps'來獲得特定的pid - 不需要grep。 – 2013-03-21 22:22:43

+0

'ps aux | grep pid | grep -v grep | awk'{for(i = 11; i <= NF; i ++)printf $ \ n「」; printf「\ n」}'' – 2013-03-21 22:32:04

0

因爲它不需要任何解析,所以我會使用如下的內容。

$ (ARGS="-c /path/to/custom/php.ini"; /usr/bin/php $ARGS /path/to/script.php $ARGS) 
+0

其他一些腳本可能會在命令行上調用它。外部腳本不太可能將選項作爲參數傳遞。 – 2013-03-21 22:54:27

+0

@HaralanDobrev,是的,它應該用在*受控*環境中 – Alexander 2013-03-22 16:36:28