从命令行运行脚本时的open_basedir限制

时间:2011-07-13 17:50:48

标签: php apache command-line

我正在学习如何根据最近项目的要求使用命令行。我有一个将在cronjob期间运行的脚本,并通过使用Putty从命令行命中它来测试它。

我的脚本在浏览器中运行良好,但是从命令行我得到权限错误,试图包含文件甚至检查它们是否存在。

这只发生在命令行中。这是控制台中的内容(我确定正在执行正确的脚本,现在它所做的只是检查是否存在所需文件):

这是终端中执行命令的行:

  

安全:〜/ www / private / cron $ php -f ./update.php

这是输出:

  

警告:file_exists():open_basedir限制生效。   文件(/usr/local/apache/htdocs/example.com/private/modules/real_estate/config/condos.php)   不在允许的路径内:   (:/ tmp目录/:/ var / tmp中/:在/ usr /本地/ Apache / htdocs中/ example.com /图片/:/家庭/例子/ WWW /图片/)   在/usr/local/apache/htdocs/example.com/private/cron/update.php中   在第43行

在浏览器中运行脚本时出现此错误,这让我感到困惑 - 但正如我所提到的,我是使用命令行的新手。我已经尝试过各种我能想到的方法来引用update.php中的文件,并尝试更改包含路径,但似乎没有任何效果。我得到权限错误或找不到文件。

有谁知道为什么在浏览器和命令行中执行脚本之间存在差异,以及我可以采取哪些措施来解决此错误?我很乐意按要求提供更多信息。


更多信息:

这是php --ini的CLI输出:

  

配置文件(php.ini)路径:/ usr / local / lib
  加载的配置文件:/usr/local/Zend/etc/php.ini
  扫描其他.ini文件:(无)
  解析了其他.ini文件:(无)

这是Loaded Configuration File中来自浏览器的phpinfo()条目:

  

/usr/local/Zend/etc/php.ini

因此Loaded Configuration File在两种环境中都是相同的。

2 个答案:

答案 0 :(得分:3)

您可能希望为CLI与Apache实例运行两个不同的php.ini文件。

一种方法是将当前的php.ini文件复制到另一个目录 - 例如“/usr/local/Zend/etc/php_cli/php.ini”或更方便的目录。然后,更改“/usr/local/Zend/etc/php_cli/php.ini”中的设置以更好地适应命令行环境(稍微展开open_basedir,日志文件路径and other CLI-specific settings)。然后,在执行CLI脚本时,请包含-c "/usr/local/Zend/etc/php_cli"开关以使CLI引用 ini文件。

答案 1 :(得分:1)

服务器的php.ini和命令行的php.ini之间通常有区别。这意味着,无论您在浏览器中看到什么,几乎肯定不是您在命令行中输入php -r 'phpinfo();'时所看到的(我的意思是,格式不同,而且颜色不那么多)

你想要寻找其他的php.ini,然后你会想要推荐open_basedir = <something>