脚本搜索路径

时间:2013-02-27 09:24:25

标签: php command-line

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

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

php /opt/scripts/foo.php

我更愿意使用

php foo.php

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

2 个答案:

答案 0 :(得分:1)

这自然会由includes_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

一种替代方法是使用写入shell脚本(称为phpinc.sh,比如说)来读入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或包装器),因此可能有更好的方法来缩小最后一个包含路径。

答案 1 :(得分:0)

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