2013-03-05 63 views
0

我有以下代码用于从站点提取数据并将其放入sql数据库。它停止在217个条目,但有619个不同的页面。无论我是否回显屏幕或将其存储在数据库中,它都会失败。没有错误信息。file_get_contents停止在217个条目

任何想法为什么?

for($i = 1; $i <= 619; $i++) { 

$str = file_get_contents('http://fantasy.mlssoccer.com/web/api/elements/'.$i.'/'); 
$jsonarray = json_decode($str, true); 

//get row data and store in variables 
$id = $jsonarray['id']; 
$name = addslashes($jsonarray['web_name']); 
$team = $jsonarray['team_name']; 
$pos = $jsonarray['type_name']; 
$flag = $jsonarray['status']; 
$cost = ($jsonarray['now_cost']/10); 
$ownedby = $jsonarray['selected']; 
$balance = $jsonarray['transfers_balance']; 

$playerupdate = mysql_query(" 
INSERT INTO playerprices (id, name, team, pos, flag, cost, ownedby, balance) 
VALUES ('$id', '$name', '$team', '$pos', '$flag', '$cost', '$ownedby', '$balance') 
ON DUPLICATE KEY UPDATE flag = '$flag', cost = '$cost', ownedby = '$ownedby', balance = '$balance'") 
or die (mysql_error()); 

} 

当我回声仅216-220页中的变量,他们都做工精细,所以我不认为这是与这些页面上的数据做。没有我能看到的特殊字符。

+1

剧本超时?尝试在200美元开始$ i,看看会发生什么 – Oli 2013-03-05 22:57:21

+0

@oli有它的权利我敢打赌。查看[set_time_limit](http://php.net/manual/en/function.set-time-limit.php),并希望您的主机允许您更改它。 – mkaatman 2013-03-05 22:58:30

+0

或者,从命令行(PHP CLI)运行它。超时限制不适用于命令行脚本 – xbonez 2013-03-05 22:59:26

回答

1

为了摆脱错误(启用display_errors查看)中,

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\stackoverflow\file_get_contents.php on line 5

尝试增加max_execution_time 5-10分钟。

ini_set('max_execution_time', 1000); //300 seconds = 5 minutes 

或者通过command line执行脚本。

When running PHP from the command line the default setting is 0. (Source: PHP.net , 2012).

+0

这种有点作品。它现在失败了312个条目,但至少在进步......但更重要的是告诉我,它只是超时而不是我的代码或它从中获取的页面的问题。谢谢! – Cully 2013-03-05 23:06:02

+0

@Cully没问题,:) – Killrawr 2013-03-05 23:07:00

0

如果在数据中的任何一点,有一个或多个单引号您的查询就会失败,并触发die()声明。您可以清理每个变量以删除或替换这些字符,也可以从已弃用的mysql_ *函数移开,并使用带有mySQLi或PDO的参数化查询。这意味着:

  1. 您不必从输入中删除特殊字符。
  2. 您的代码将不易受SQL注入影响。
  3. 您的代码不会在最新版本的PHP中生成E_DEPRECATED消息。
  4. 当这些功能被删除时,您的代码不会在将来的PHP版本中中断。
  5. 最重要的是,peopel将停止无休止地关注您使用的功能,而忽略您的实际问题。
+0

好吧,但这看起来像file_get_contents或超时问题,而不是一个SQL问题,所以我不明白你说什么与我的问题有什么关系。感谢您的建议,但我宁愿在尝试迁移到mySQLi之前先完成这项工作。 – Cully 2013-03-05 23:22:03