簡體   English   中英

Mac OS X MAMP Pro PHP Cli配置

[英]Mac OS X MAMP Pro PHP Cli configuration

我有Mamp pro的php cli命令問題。 我的問題是php腳本中和終端中的exec不同。 我解釋:

  1. 當我執行此命令=> 哪個PHP

    在mac終端中:

    我得到這個路徑:/Applications/MAMP/bin/php/php5.6.2/bin/php

    這是正常現象,因為我像這樣更改.bash_profile文件中的路徑:

     export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.18/bin export PATH="$MAMP_PHP:$PATH" 

    在導航器中:

     with this line inside a php script: <?php echo exec("which php"); ?> 

    我得到這個路徑:/ usr / bin / php

  2. 結果相同,但使用命令=> php --ini更詳細

    在mac終端中:

     Configuration File (php.ini) Path: /Applications/MAMP/bin/php/php5.5.18/conf Loaded Configuration File: /Applications/MAMP/bin/php/php5.5.18/conf/php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none) 

    在導航器中:

     Configuration File (php.ini) Path: /etc Loaded Configuration File: /etc/php.ini Scan for additional .ini files in: /Library/Server/Web/Config/php Additional .ini files parsed: /Library/Server/Web/Config/php/php.ini 
  3. 而且更奇怪的是,當在其中編寫帶有以下代碼的php文件時: <?php var_dump(shell_exec("which php -v")); phpinfo(); ?> <?php var_dump(shell_exec("which php -v")); phpinfo(); ?> <?php var_dump(shell_exec("which php -v")); phpinfo(); ?> ,我也在終端和導航器中啟動此腳本。 我懂了:

    在mac終端中:

    使用以下命令啟動:php -f /Users/tm/Sites/test.com/test.php

    結果:/Applications/MAMP/bin/php/php5.5.18/bin/php PHP版本=> 5.5.18

    在導航器中:

    結果:/ usr / bin / php PHP版本=> 5.5.18

因此,似乎從導航器啟動的php腳本使用了正確的php版本,因為php信息返回了正確的版本(5.5.18),但是此php腳本的cli使用了另一個php,這是我的問題。 但是當從終端啟動此腳本時,一切都如預期。

您遇到的問題是,Apache不使用您的用戶帳戶下的Mac OS X Terminal使用的基於BASH的PATH配置。 換句話說,在Web運行頁面在Apache下運行時,通過配置特定的登錄用戶.bash_profile條目設置的“ PATH”值特定於用戶的BASH Shell(終端)進程。即它不會加載您的用戶帳戶的BASH設置)。

如果要使用exec(),則使用相同的二進制文件(基於每個PHP腳本)結束的簡單方法是執行以下操作:

<?php 
    echo "Default PHP path: " . exec('which php') . PHP_EOL;
    $current_path = exec('echo $PATH');
    $your_custom_php_path = '/Applications/MAMP/bin/php/php5.5.18/bin';
    putenv('PATH=' . $your_custom_php_path . ':' . $current_path);
    echo "New PHP path: " . exec('which php') . PHP_EOL;
?>

(注意:以上腳本是針對換行符而不是Web輸出格式化的,用於shell輸出)。

這基本上是在運行中配置PHP腳本,以在您的BASH中(但在Apache運行的PHP腳本的上下文中)預先設置(和使用)與PATH相同的PATH設置值。

還有其他方法可以完成同一件事(Apache級配置等)-但希望這可以解釋為什么您看到不同的值,並為您提供解決此問題的一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM