【问题标题】:Wierd issue with using task schedule to process php script使用任务调度程序处理 php 脚本的奇怪问题
【发布时间】:2014-05-16 22:05:56
【问题描述】:

我创建了一个任务计划,它处理一个批处理文件,该批处理文件又处理一个 php 脚本(“sendtext.php”)以发送文本消息。 “sendtext.php”包含另一个 php 文件(“prefs.php”),它检查特定文本文件是否存在。如果是,则该过程继续,否则它会发出警报并重定向到不同的页面以首先创建文本文件。 现在,如果我手动运行批处理文件,它会发送文本消息。当我运行运行相同批处理文件的计划任务时,它会从包含的文件(“prefs.php”)中发出警报,因为它找不到文本文件。所有 php 文件和批处理文件都在同一个文件夹中。 我认为这是任务计划的某种路径问题。 请帮忙!!!

【问题讨论】:

  • 你应该把我认为的批处理文件的内容贴出来。

标签: php batch-file scheduled-tasks


【解决方案1】:

在您的 .bat 文件中,使用更改目录命令 (cd) 到您的程序根目录。 为 php 配置环境变量后,您可以在下一行运行 php,您不会遇到 include、require 等语句的任何问题。如果不配置环境变量,第二行应该指向你的php.exe目录:c:\program files\php...php.exe

cd C:\inetpub\wwwroot\myprogram-dev\
php execute-this.php

【讨论】:

    【解决方案2】:

    当您正常运行脚本时,您是从它所在的文件夹运行它。Cron 作业假定它们是从不同的位置(甚至是不同的文件夹)运行,例如,如果您在 root 用户下运行 cron 任务,它假定您正在从目录 /root 执行脚本)。

    包含文件的更好方法是这样的:

    include(__DIR__ . '/prefs.php');
    

    该常量将确保路径相对于包含所述文件的当前脚本。 IE。如果我的脚本是 /var/www/vhosts/website.com/scripts/test.php,那么它会在 /var/www/vhosts/website.com/scripts/ 中查找 prefs.php。

    【讨论】:

    • 我所有的 php 和批处理文件都在“C:/wamp/www/reminders/”文件夹中。你能详细说明你的答案吗?我应该使用什么作为 DIR .thanks.
    • 这是一个常量,它会自动假定本地目录。你不会用任何东西代替它。您只需使用代码:p 不知道如何进一步详细说明。也许你应该对常数做一个回声,这样你就可以亲眼看到它的作用。 cron 任务不假定它们是从您所在的同一目录执行脚本。
    • 谢谢我明白了,但似乎我必须在我引用脚本中的任何文件的任何地方都这样做。我实际上弄清楚了问题所在。我需要在计划任务中将“开始”选项定义到我的文件所在的目录。当我通过“SCHTASKS”命令从批处理文件创建计划任务时,我仍在努力寻找有关如何设置该选项的有效解决方案。它不提供该选项。我读了一些其他的想法,但还没有成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多