我需要通过命令行运行PHP脚本,但这种情况会发生

时间:2010-06-05 14:30:10

标签: php command-line

我需要通过命令行运行脚本,但运行它所需的文件要求我在脚本目录中。但我无法为我需要运行的每个命令行执行此操作。他们超过五千。有人可以告诉我如何轻松地格式化列表或添加一些使其运行的格式。我有这样的事情......

php /path/to/the/script/01240/script.php
php /path/to/the/script/03770/script.php
php /path/to/the/script/02110/script.php
php /path/to/the/script/02380/script.php
php /path/to/the/script/03220/script.php
php /path/to/the/script/02340/script.php
php /path/to/the/script/03720/script.php
php /path/to/the/script/03460/script.php
php /path/to/the/script/0180/script.php
php /path/to/the/script/02000/script.php
php /path/to/the/script/01830/script.php
php /path/to/the/script/0980/script.php
php /path/to/the/script/0400/script.php
php /path/to/the/script/02750/script.php
php /path/to/the/script/0760/script.php
php /path/to/the/script/02690/script.php

.....它继续增加5000行。

4 个答案:

答案 0 :(得分:1)

find -type f -iname script.php -execdir php {} \;

或者,如果脚本的名称不同:

find -type f -iname '*.php' -execdir php {} \;

编辑:如果它是特定脚本的列表而不是全部: 另一种方法是在php.ini中定义一个auto_prepend_file(或者这个脚本的自定义php.ini),这样你就可以放在那里:

<?php
    chdir(dirname($argv[1]));
?>

答案 1 :(得分:0)

您无需手动编辑列表。编写另一个读入主脚本的脚本,并在每个脚本之前/之后添加cd个命令。然后运行结果。

答案 2 :(得分:0)

您可以使用以下内容创建名为php1.bat的新文件:

pushd %~p1
php %1
popd

这将更改为参数的目录,执行php并跳回。

在此之后,用您最喜欢的搜索/替换所有编辑器,用php /替换脚本中call php1 /的每个出现,这样它就不会执行php,而是php1.bat

答案 3 :(得分:0)

我可以建议两种可能的解决方案:

一种是为脚本添加一个选项,以便指定工作目录。每个进程都有自己的工作目录,因此这意味着您的PHP脚本会更改其目录,但是您运行脚本的shell则不会。一旦PHP脚本完成,你就会回到你开始的同一目录中的shell中。

<?php

$options = getopt("d:");
if (isset($options["d"])) {
  chdir($options["d"]) or die("Cannot chdir to " . $options["d"]);
} 

...do the rest of the script...

然后调用您的脚本:

php script.php -d /path/to/the/script/01240/

另一种解决方案是在调用PHP脚本时更改目录。记得我说每个进程都有自己的工作目录。但是你可以简单地使用括号使shell打开一个子进程。然后在该子shell中使用cd来更改目录并调用PHP脚本。一旦你完成了parens中的子shell,你就会回到你开始的地方。

shell$ ( cd /path/to/the/script/01240/ ; php ~/bin/script.php)
shell$ ( cd /path/to/the/script/03770/ ; php ~/bin/script.php)
shell$ ( cd /path/to/the/script/02110/ ; php ~/bin/script.php)

但我猜你的脚本只是打开带有相对路径名的文件。如果您在脚本中相对于调用脚本的位置dirname(__FILE__)执行了一些代码,那么这些解决方案将无效。