我正在学习如何根据最近项目的要求使用命令行。我有一个将在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
在两种环境中都是相同的。
答案 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>