Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用wget和Windows调度程序运行php脚本_Php_Windows_Command Line_Localhost_Wget - Fatal编程技术网

使用wget和Windows调度程序运行php脚本

使用wget和Windows调度程序运行php脚本,php,windows,command-line,localhost,wget,Php,Windows,Command Line,Localhost,Wget,在我的笔记本电脑上,我安装了一个Web服务器并编写了一个脚本。通过http://localhost/test/search.php在任何浏览器中都可以使其正常运行:它搜索、下载和存储某些推文 我现在想让脚本每20分钟自动运行一次,所以我在C:\ProgramFiles\GnuWin32\bin\wget.exe中下载并安装了Windows的wget。然后,我创建了一个具有以下操作的Windows任务(在“操作”选项卡上填写): 正如预期的那样,每20分钟就会打开一个命令行来运行脚本。然而,什么也

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

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


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

请创建一个bat文件,在那里提及所有命令,如Broncha在注释中提到的命令,然后将其添加到Windows任务计划程序

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

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

"C:\Program Files\GnuWin32\bin\wget.exe" -O - -q -t 1 http://localhost/test/search.php
任务计划程序有许多选项卡用于设置,检查历史记录选项卡可查看计划的任务历史记录,您可以在其中检查最近几次运行的退出代码。在历史记录中查找类似的事件:

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

检查其退出代码
操作“C:\Program Files(x86)\GnuWin32\bin\wget.exe”,返回代码为x
。如果它是零,那么它工作,任何其他整数都意味着错误


请告诉我你在使用哪个窗口?还可以发布上面提到的命令的输出,这样我就可以确切地知道任务调度程序中的错误是什么。

您提到了
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.
当命令行开始工作时,您可以专注于使用任务调度器运行它

task1.bat
-----------
cd c:\xampp\htdocs\test
php search.php
您可以自己或任何其他帐户运行任务。使用
本地服务
可以在不提供密码的情况下运行它,即使您已注销。只需让舒尔确认您选择的帐户拥有wget所在目录的权限即可

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

最后,简化。从命令行运行php。用一个简单的脚本


编写代码,以便可以从命令行调用search.php standalone。无需将HTTP客户端和web服务器置于两者之间。以下是与Twitter相关的各种操作

我不明白为什么你首先需要使用wget。您可以像从CLI运行文件一样执行该文件
php-f c:\xampp\htdocs\search.php
如果我这样做,cli将打开,但它返回许多php错误,即
警告:include_once(includes/template.php):无法打开流:第12行的D:\htdocs\test\includes\bootstrap.php中没有这样的文件或目录;警告:include_once():在第12行的D:\htdocs\test\includes\bootstrap.php中打开includes/template.php以包含(include_path=';C:\XAMPP\php\PEAR')失败,这很奇怪,因为当我从浏览器运行脚本时,我没有收到这些错误。为什么像这样调用scipt时,在C:\XAMPP\php\PEAR中查找
template.php
,而不是在D:\htdocs\test\includes中查找呢?好的,我现在知道了。在这种情况下,请执行以下操作:step1:cd C:\XAMPP\php\,Step2: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-t1http://localhost/ting/search.php SYSTEM_WGETRC=c:/progra~1/wget/etc/WGETRC syswgetrc=c:\Program Files\GnuWin32/etc/WGETRC:\Users\Pr0no>
我没有收到任何错误,但脚本没有执行。这很奇怪,因为当我运行
http://localhost/ting/search.php
在浏览器中,脚本确实会执行。。?!这与OP中的问题完全相同。请参阅我上面的最新评论。如何正确调用PHP?这可能不是一个(值得赏金的)答案,但却是找到问题的基本步骤!在任务历史中,我看到;换句话说,操作成功完成。尽管如此,
search.php
中的php代码并不像在浏览器中运行脚本那样(通过从Twitter API中提取推文)填充数据库。我不明白你说的“检查出口代码”是什么意思。如果我键入
action“C:\Program Files(x86)\GnuWin32\bin\wget.exe”
,cmd将返回
action
未被识别为内部或外部命令等…@ixe13感谢您的回复!(1) 在运行
“c:\program files\gnuwin32\bin\wget.exe”-O---verbose-t1时,在写入OP(2)之后,我将目录测试重命名为tinghttp://localhost/ting/search.php
除了HTTP请求之外,一切都进行得很顺利:
HTTP请求已发送,正在等待响应。。。401需要授权
…然后我突然想到:我最近在
.htaccess
中添加了用户名/密码来保护ting。我的浏览器显然记住了登录代码,因此运行
search.php
没有任何问题,但是
search.php
的cmd请求被阻止。通过删除
.htaccess
它现在可以工作了