【问题标题】:PHP Crons using file_get_contents in Loop Not workingPHP Cron 在循环中使用 file_get_contents 不起作用
【发布时间】:2015-02-22 22:47:08
【问题描述】:

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

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

1) 我启用的 apache 服务器模块与我的 wamp 上的相同(安装了 curl,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.php php5 /home/domain/public_html/test1.php php /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) 指向文件的链接重定向到 https(我仍在尝试查看它是否会影响任何东西......但我更倾向于排除这一点,因为链接可以正常工作并随机停止。)

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

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

8) 我还在玩 max_execution_time .. 我目前设置为 61,200 秒(17 小时)我还在另一台服务器上同时运行相同的测试,其中 max_execution_time 设置为 60 并且 cron 每 60 次访问文件秒

9) 就像我之前说的,如果我在我的 Windows 系统上本地点击文件,它会像预期的那样工作(在将 $con 详细信息切换到我的服务器之后)我添加一个 javascript 并在 firefox/chrome localhost/test1 中打开它。 php

请帮帮我!

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


【问题讨论】:

  • 删除您的 file_get_content() 之前的@,您可能会收到有用的错误消息。
  • 另外,您需要发布您的实际代码。有了这个伪代码,没有人能分辨出哪里出了问题。
  • 我试过了,不管有没有@都没有任何区别......

标签: php mysql apache curl cron


【解决方案1】:

我没有费心阅读你的整个帖子,因为它太长了。据我了解,您的脚本在手动启动时运行良好,但不能从 CRON 正常运行。

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

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

【讨论】:

  • 这很有帮助.. 成功了!但是现在在上午 11.30 开始我检查了时区,但这并没有导致它,没有错误.. 它不会获取值,但它会插入 0/null 并继续更新时间戳.. 看看代码和看看你能不能找到什么......谢谢!
  • 我不知道,你的代码没有帮助。我建议你重写你的问题,简化它,然后作为一个新问题发布。
猜你喜欢
  • 1970-01-01
  • 2012-08-30
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
相关资源
最近更新 更多