0

我使用一些命令行 PHP 脚本。作者为他们不使用shebang线。我将它们保存在/opt/scripts目录中。

目前,如果我想在该目录之外运行它们,我必须使用完整路径,例如

php /opt/scripts/foo.php

我更喜欢使用

php foo.php

不管当前目录。我可以修改php.ini或其他一些技巧来允许这个吗?

4

2 回答 2

1

这自然会由 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 或包装器),因此可能有更好的方法来缩小最后一个包含路径。

于 2013-02-27T10:16:08.137 回答
0

您可以通过添加“/opt/scripts/”目录路径在 php.ini 中设置包含路径。

于 2013-02-27T09:45:32.590 回答