试图从shell_exec调用php脚本时,getting无法打开输入文件

试图从shell_exec调用php脚本时,getting无法打开输入文件,php,Php,我正在尝试构建一个小型自定义任务调度程序。基本上,我的想法是让cron运行我的流程脚本,它在数据库中查找并找到任何准备运行的计划任务,然后运行它们。因此,我认为最好的方法是尝试通过shell_exec并使用>/dev/null“在后台”启动任务,我理解这使得初始脚本(流程脚本)不会等待任务脚本完成。 因此,首先,如果有更好的方法来实现这一点,我愿意接受建议。尽管注意,我使用的是PHP5.3,因此在5.4及更高版本中可能有一些选项我无法访问:( 然而,眼前的问题是: 我正在我的windows机器上

我正在尝试构建一个小型自定义任务调度程序。基本上,我的想法是让cron运行我的流程脚本,它在数据库中查找并找到任何准备运行的计划任务,然后运行它们。因此,我认为最好的方法是尝试通过shell_exec并使用>
/dev/null
“在后台”启动任务,我理解这使得初始脚本(流程脚本)不会等待任务脚本完成。
因此,首先,如果有更好的方法来实现这一点,我愿意接受建议。尽管注意,我使用的是
PHP5.3
,因此在5.4及更高版本中可能有一些选项我无法访问:(

然而,眼前的问题是: 我正在我的windows机器上测试WAMP,我正在尝试打一个如下所示的电话:

shell_exec("php $path$base_url$querystring > output_test.txt 2>&1 &");
$path
是脚本的完整windows路径

$base\u url
是我正在调用的脚本的基本url

$querystring
当然是传递给任务脚本的查询字符串

我还将输出到output_test.txt,它在同一目录中创建这样的文件,在这里我得到以下错误:

无法打开输入文件:

C:\xampp\htdocs\email\batch\u email\u send\u u2u.php?经销商=7

是的,我意识到路径引用了xampp安装,但这不是问题所在-所有wamp文件都是从那里执行的,其他一切都是这样工作了多年-它只是以这种方式设置以支持遗留安装

在我看来,shell_exec正在查找并运行php,只是它无法打开引用的脚本。无法找出原因


此外,我还需要最终在真正的linux服务器上实现这一点,因此对于如何实现这一点的任何建议都将不胜感激!

找到了解决方案!特别感谢dan08让我走上了正确的道路。 最终,我在这条线索中找到了答案:


我最终使用了那篇文章中描述的argv[]数组,并对我称之为champ的脚本进行了一些调整。

找到了解决方案!特别感谢dan08让我走上了正确的道路。 最终,我在这条线索中找到了答案:


我最终使用了那篇文章中描述的argv[]数组,并对脚本进行了一些调整,我称之为champ。如果我错了,请纠正我(这会很酷),但我不认为您可以将查询字符串附加到文件名,然后用
php filename?querystring
调用它。是否确实有一个名为“批处理\u电子邮件\u发送\u u2u.php?经销商=7"?哦,很有趣-我想这可能是问题的一部分。文件是batch\u email\u send\u u2u.php,查询字符串是dealer=7。当然,我可以在浏览器中调用querystring时添加它,但为什么不能在从命令行调用时添加它呢?如果确实是这样,那么关于如何在其中传递参数的任何建议都会很有用被$\u-GET拾取?您可以在调用脚本之前设置
$\u-GET
shell\u-exec(“php$\u-GET['dealer']=7;$path$base\u-url>output\u-test.txt 2>&1&>”
,但可能有更好的方法。如果我错了,请纠正我(这会很酷)但是我不认为您可以只在文件名中添加一个查询字符串,然后用
php filename?querystring
调用它。实际上是否有一个名为“batch\u email\u send\u u2u.php?dealer=7”的文件?哦,很有趣-我想这可能是问题的一部分。文件是batch\u email\u send\u u2u.php,查询字符串是dealer=7。当然,我可以在浏览器中调用querystring时添加它,但为什么不能在从命令行调用时添加它呢?如果确实是这样,那么关于如何在其中传递参数的任何建议都会很有用被$\u-GET拾取?您可以在调用脚本之前设置
$\u-GET
shell\u-exec(“php$\u-GET['dealer']=7;$path$base\u-url>output\u-test.txt 2>&1&>”
,但可能有更好的方法。