2013-03-05 60 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