PHP Crons在循环中使用file_get_contents不起作用


PHP Crons using file_get_contents in Loop Not working

好!这就是我想要实现的。。。让我们调用文件test1.php使用file_get_contents,我从一个站点获取数据,并在3秒的循环中将其插入另一个数据库,因为获取和存储需要1秒,所以使用另一个1秒的缓冲区,我希望获得不超过5秒的数据。该文件在我的localhost/test1.php上运行得很好。。在我的本地上,我添加了一个java脚本来刷新浏览器。。。如果我将$con设置替换到我的服务器,并使用wamp在本地浏览器上点击该文件,也可以。。当我把它上传到服务器上并作为cron添加时,问题就开始了,早上只点击它一次,让它运行一整天——循环工作,而它返回的值为null。

你可能想知道的事情。。。

1) 我启用的apache服务器模块与我的wamp上的模块相同(curl installed,php 5.5.9 allow_url_fopen=on allow_url_include=Off)

2) Apache Mods

3) 代码

<?php
$con=mysqli_connect("localhost","user","pwd","dbname");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }
$open_time=strtotime('07:00:00');
$close_time=strtotime('23:55:00');
$current_time=strtotime(date('H:i:s'));
/***************** End Timing ********************/

if($current_time >= $open_time && $current_time<=$close_time) {
while ($current_time < $close_time) {
// Perform queries 
$dataQuery = mysqli_query(); //my query goes here
while($row = $dataQuery->fetch_assoc())
{
    $data = @file_get_contents();
            $insert = mysqli_query(); //insert this data into my db

 }
 sleep(3);
    }
 mysqli_close($con);
 }
 ?>

4) 我尝试过的执行cron:p的不同方式

php/home/domain/public_html/test1.phpphp5/home/domain/public_html/test1.phpphp/home/domain/public_html/test/test1.php/usr/bin/php-q/home/domain/public_html/test1.php/usr/bin/php-q/home/domain/fcgid/test1.php

5) 指向文件get的链接重定向到https(我仍在尝试看看它是否会影响任何事情……但我更倾向于排除这一点,因为链接是随机工作和停止的。)

6) 在修复了所有错误后,文件没有返回任何输出,这也可能意味着没有错误(或者它们通过电子邮件发送给我)

7) 当它工作一段时间时,它会获取一段时间的值,但在2-3小时后停止,我可以看到它创建了几个空闲/睡眠的连接。它冻结mysql,有时会使服务器资源达到最大。即使重新启动也无济于事,重新启动后插入的值为null和0的

8) 我仍在玩max_execution_time。。我目前已设置为61200秒(17小时)。我还在另一台服务器上同时运行相同的测试,max_execution_time设置为60,cron每60秒命中一次文件

9) 就像我之前所说的,如果我在windows系统上本地访问该文件,它的工作方式就像它所设想的那样(在将$con详细信息切换到我的服务器后),我添加一个javascript并在firefox/chrome localhost/test1.php 中打开它

请帮帮我!

************我的问题**************1) 我做错了什么,你会建议我怎么做这项任务。2) 我需要在我的apache/php上启用/禁用什么/3) 有更好的方法做同样的事情吗?


我没有费心阅读你的整篇文章,因为它太长了。据我所知,您的脚本在手动启动时运行良好,但在CRON中运行不好。

从CRON运行PHP脚本不会设置当前的工作目录。此外,有时甚至没有设置PATH,所以cron不知道在哪里查找php二进制文件。您必须设置CRON,使其了解您的路径,或者执行CRON命令,如下所示:

cd /home/domain/public_html/ && /usr/bin/php test1.php