我使用一些命令行 PHP 脚本。作者为他们不使用shebang线。我将它们保存在/opt/scripts
目录中。
目前,如果我想在该目录之外运行它们,我必须使用完整路径,例如
php /opt/scripts/foo.php
我更喜欢使用
php foo.php
不管当前目录。我可以修改php.ini
或其他一些技巧来允许这个吗?
我使用一些命令行 PHP 脚本。作者为他们不使用shebang线。我将它们保存在/opt/scripts
目录中。
目前,如果我想在该目录之外运行它们,我必须使用完整路径,例如
php /opt/scripts/foo.php
我更喜欢使用
php foo.php
不管当前目录。我可以修改php.ini
或其他一些技巧来允许这个吗?
这自然会由 include_path 指令处理,但不会被 CLI 的初始文件考虑在内;文件中使用的包含将使用includes_path。
看:
[root@host ~]# php -v
PHP 5.2.9 (cli) (built: Oct 17 2010 16:55:28)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
[root@host ~]# php -i | grep include_path
include_path => .:/usr/lib/php:/usr/local/lib/php => .:/usr/lib/php:/usr/local/lib/php
[root@host ~]# ls /usr/lib/php
Archive Console HTML Net OS PEAR PEAR.php PEAR5.php Structures System.php XML build data doc pearcmd.php peclcmd.php test
[root@host ~]# php PEAR.php
Could not open input file: PEAR.php
一种替代方法是使用编写一个读取 INI 文件、将其解析为 include_path 并调用php ${INCLUDE_PATH_PREFIX}$1
. 您必须将该路径添加到 php.ini 文件中...例如:
#!/bin/sh
INCLUDE_PATH_PREFIX=grep -Ei '^include_path.*:([^ ]+)' /usr/local/lib/php.ini | grep -oEi ":[^:]+" | grep -oEi "[^:\"]+" | tail -1
php ${INCLUDE_PATH_PREFIX}$1 -c $2
用法:phpinc.sh file.php /path/to/custom/php.ini
我没有在 CLI 中广泛使用 grep(通常有 PCRE API 或包装器),因此可能有更好的方法来缩小最后一个包含路径。
您可以通过添加“/opt/scripts/”目录路径在 php.ini 中设置包含路径。