【发布时间】: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