【问题标题】:getting Could not open input file when trying to call php script from shell_exec尝试从 shell_exec 调用 php 脚本时无法打开输入文件
【发布时间】:2015-12-21 23:07:21
【问题描述】:

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

但这里有一个问题: 我正在我的 Windows 机器上测试 WAMP,我正在尝试拨打如下所示的电话:

shell_exec("php $path$base_url$querystring > output_test.txt 2>&1 &");

$path 是脚本的完整 Windows 路径

$base_url 是我正在调用的脚本的基本网址

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

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

无法打开输入文件:

C:\xampp\htdocs\email\batch_email_send_u2u.php?dealer=7

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

在我看来,shell_exec 正在定位并运行 php,只是它无法打开引用的脚本。不知道为什么。

我还需要最终让它在真正的 linux 服务器上运行,所以任何关于如何实现它的建议都将不胜感激!

【问题讨论】:

  • 如果我错了,请纠正我(这会很酷),但我认为您不能只将查询字符串附加到文件名并使用 php filename?querstring 调用它。实际上是否有一个名为“batch_email_send_u2u.php?dealer=7”的文件?
  • 哦,有趣-我想这可能是问题的一部分。该文件是batch_email_send_u2u.php,查询字符串是dealer=7。当然我在浏览器中调用的时候可以添加查询字符串,但是从命令行调用时为什么不能添加呢?如果这确实是真的,任何关于我如何传递参数的建议都会被 $_GET 采纳?
  • 您可以在调用脚本之前设置$_GETshell_exec("php $_GET['dealer'] = 7; $path$base_url > output_test.txt 2>&1 &"); ,但可能有更好的方法。

标签: php


【解决方案1】:

找到了解决办法!特别感谢 dan08 让我走上了正确的道路。 最终我在这个帖子中找到了答案:Pass variable to php script running from command line

我最终使用了该帖子中描述的 argv[] 数组,并对我称之为的脚本进行了一些调整,现在它就像一个冠军。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 2018-01-25
    • 2016-12-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2013-07-08
    • 2010-09-23
    相关资源
    最近更新 更多