【问题标题】:Running a php script using wget and Windows Scheduler使用 wget 和 Windows Scheduler 运行 php 脚本
【发布时间】:2013-02-17 16:57:33
【问题描述】:

在我的笔记本电脑上,我安装了一个网络服务器并编写了一个脚本。在任何浏览器中通过http://localhost/test/search.php 访问脚本可以使其正常运行:它会搜索、下载和存储某些推文。

我现在想让脚本每 20 分钟自动运行一次,所以我在 C:\Program Files\GnuWin32\bin\wget.exe 下载并安装了适用于 Windows 的 wget。然后,我使用以下操作(在“操作”选项卡上填写)创建了一个 Windows 任务:

Program/script:
"C:\Program Files\GnuWin32\bin\wget.exe"

Add arguments (optional): -O - -q -t 1 http://localhost/test/search.php

正如预期的那样,每 20 分钟就会打开一个命令行来运行脚本。然而,什么也没有发生。脚本未初始化。我确信我的所有路径都是正确的。什么可能导致脚本没有被执行?命令行会在几毫秒内消失,所以我看不到它在说什么......

【问题讨论】:

  • 我不明白为什么你首先需要使用 wget。您可以像从 CLI 运行它一样执行该文件。 php -f c:\xampp\htdocs\search.php
  • 如果我这样做,cli 会打开,但会返回许多 php 错误,即。 Warning: include_once(includes/template.php): failed to open stream: No such file or directory in D:\htdocs\test\includes\bootstrap.php on line 12; Warning: include_once(): Failed opening 'includes/template.php' for inclusion (include_path='.;C:\XAMPP\php\PEAR') in D:\htdocs\test\includes\bootstrap.php on line 12 这很奇怪,因为当我从浏览器运行脚本时,我没有收到这些错误。为什么 scipt 在这样调用时会在 C:\XAMPP\php\PEAR 而不是 D:\htdocs\test\includes 中查找 template.php
  • 好的,我现在知道了。在这种情况下,请执行以下操作:步骤 1:cd C:\XAMPP\php\,步骤 2:php D:\htdocs\test\search.php。如果您现在遇到一些错误,那么它仅与脚本/框架有关,您需要以不同的方式调用它。
  • 打开命令行并简单地运行 "C:\Program Files\GnuWin32\bin\wget.exe" -O - -q -t 1 http://localhost/test/search.php 会发生什么?
  • C:\Users\Pr0no>"C:\Program Files\GnuWin32\bin\wget.exe" -O - -q -t 1 http://localhost/ting/search.php SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc syswgetrc = C:\Program Files\GnuWin32/etc/wgetrc C:\Users\Pr0no> 我没有收到任何错误,但脚本没有被执行。这很奇怪,因为当我在浏览器中运行http://localhost/ting/search.php 时,脚本确实 会被执行..?!这与 OP 中的问题完全相同。

标签: php windows command-line localhost wget


【解决方案1】:

您提到search.php 的两条路径:一条是/test,另一条是/ting。确保您在浏览器和 wget 中使用相同。

如果您请求的页面不存在,如果您提供-q,则不会出现错误。将其替换为-v--verbose 看看有什么问题。

c:\gnuwin32\bin\wget.exe -O - --verbose -t 1 http://localhost/test/search.php
--2013-02-25 23:42:03--  http://localhost/test/search.php
Resolving localhost... ::1, 127.0.0.1
Connecting to localhost|::1|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-02-25 23:42:03 ERROR 404: Not Found.

当您让命令行工作时,您可以专注于使用任务调度程序运行它。

您可以以自己或任何其他帐户的身份运行任务。使用LOCAL SERVICE 允许您在不提供密码的情况下运行它,即使您已注销。只需确保您选择的帐户具有 wget 所在目录的权限即可。

Others have mentionned,您必须设置计划任务的路径,否则您将获得屏幕截图中显示的操作代码 (2)。它还将确保 WIndows 找到 wget.exe 依赖项,即 libeay32.dlllibssl32.dll

.

最后,简化。从命令行运行 php。 The link above is an example of that 带有一个简单的脚本。

编写代码,以便您可以从命令行独立调用 search.php。无需在两者之间放置 HTTP 客户端和 Web 服务器。这里是a bunch of sample scripts,用于各种 Twitter 相关操作。

【讨论】:

  • @ixe13 感谢您的回复! (1) 写完 OP 后,我将目录 test 重命名为 ting (2) 运行 "c:\program files\gnuwin32\bin\wget.exe" -O - --verbose -t 1 http://localhost/ting/search.php 时,除了 HTTP 请求之外一切顺利:HTTP request sent, awaiting response... 401 Authorization Required...然后让我印象深刻:我最近通过向.htaccess 添加用户名/密码来保护ting。我的浏览器显然记住了登录代码,因此运行search.php 没有任何问题,但是对search.php 的cmd 请求被阻止了。通过删除.htaccess,它现在可以工作了
  • 但是,如何在cmd 中发送用户名和密码以及wget 请求?这是.htaccess 的相关位:AuthName "Protected Area" AuthType Basic AuthUserFile d:/.htpasswd require valid-user .htpasswd 内容为:the_user:the_passwd
  • 哦,知道了:http://the_user:the_passwd@localhost/...我只能在两个小时内将奖励发送给你,所以它会按照你的方式来:-)
【解决方案2】:

请创建一个 bat 文件,在其中提及所有命令,例如 Broncha 在评论中提到的命令,然后将其添加到 Windows 任务调度程序中。

task1.bat
-----------
cd c:\xampp\htdocs\test
php search.php

【讨论】:

  • 请看我上面的最新评论。如何正确调用 PHP?
【解决方案3】:

您应该从命令行测试您的脚本以了解它是否正常工作。只需在cmd 上运行即可检查

"C:\Program Files\GnuWin32\bin\wget.exe" -O - -q -t 1 http://localhost/test/search.php

任务调度程序有很多选项卡用于设置,检查历史选项卡以查看计划任务历史记录,您可以在其中检查最后几个运行时的退出代码。在历史上寻找这样的事件:

事件 ID:201 任务类别:操作已完成

检查其退出代码action "C:\Program Files (x86)\GnuWin32\bin\wget.exe" with return code x。如果它是零,那么它正在工作,任何其他整数都意味着错误。

请告知您使用的是哪些窗口?还要发布上面提到的命令的输出,以便我可以确切地知道任务计划程序中的错误。

【讨论】:

  • 可能不是一个(值得赏金的)答案,但找到问题的必要步骤!
  • 在任务历史中看到this;换句话说,动作成功完成。尽管如此,search.php 中的 php 代码并没有像在浏览器中运行脚本时那样填充数据库(通过从 Twitter API 中提取推文)。我不明白您所说的“检查退出代码”是什么意思。如果我输入action "C:\Program Files (x86)\GnuWin32\bin\wget.exe",cmd 会返回action 不被识别为内部或外部命令等...
猜你喜欢
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多