2014-01-05 56 views
-1

我有一個文件,最終可能會有2-5個不同的域名。遇到file_get_contents問題,然後在每一行上執行任務?

我想用的file_get_contents解析出每一行,然後

set_time_limit(0); 

date_default_timezone_set('UTC'); 

$file = "monitor-available.txt"; 
$lines = file('testingdomains.txt'); 

for ($x=0; $x<=15; $x++) 

foreach($lines as $line){ 

usleep(125000); // sleep 1/8 of a second 

$time = date("h:i:s"); 
$result = gethostbyname($line); 
$query = $time . " - " .$result. "\r"; 

file_put_contents($file, $query, FILE_APPEND | LOCK_EX); 

} 

這工作時,我在文字中的一個域文件,結果會是這樣的:

$時間 - (來自gethostbyname的IP地址)

但是,如果我將多個域名添加到文本文件中,它將返回:

$時間 - 域1 $時間 - 域2

我在做什麼錯?

+1

'for($ x = 0; $ x <= 15; $ x ++)'---這是什麼? – zerkms

+0

從我知道的很少的PHP中,我相信這是告訴它循環15(16計數0?)次。現在我查看代碼,因爲它沒有括號到下一節,所以沒有什麼。添加它們並仍然是相同的最終結果。 – CodingNoob

+0

它循環15次?整個foreach($行爲$ line){'?爲什麼?這一切似乎都很混亂。 – JakeGould

回答

0

這條線:

$query = $time . " - " .$result. "\r"; 

我建議不要做這樣的:

$query = $time . " - " . $result . "\r\n"; 

\r是一個回車&通常最好將其與\n這是一個新行結合起來。

整理了代碼實現該解決方法是如下:

set_time_limit(0); 

date_default_timezone_set('UTC'); 

$file = "monitor-available.txt"; 
$lines = file('testingdomains.txt'); 

for ($x=0; $x<=15; $x++) { 
    foreach($lines as $line){ 
    usleep(125000); // sleep 1/8 of a second 
    $time = date("h:i:s"); 
    $result = gethostbyname($line); 
    $query = $time . " - " . $result . "\r\n"; 
    file_put_contents($file, $query, FILE_APPEND | LOCK_EX); 
    } 
} 

EDIT下面是使用fopen輕微重新編碼,fputs & fclose代替file_put_contents

set_time_limit(0); 

date_default_timezone_set('UTC'); 

$file = "monitor-available.txt"; 
$lines = file('testingdomains.txt'); 

for ($x=0; $x<=15; $x++) { 
    foreach($lines as $line){ 
    usleep(125000); // sleep 1/8 of a second 
    $time = date("h:i:s"); 
    $result = gethostbyname($line); 
    $query = $time . " - " . $result . "\r\n"; 
    $log_file = fopen($file, "a+"); 
    fputs($file, query); 
    fclose($file); 
    } 
} 
+0

這仍然返回: 03:48:25 - test2342314313.com 03:48:25 - domain.com – CodingNoob

+0

UltraEdit - 如果我將testdomains.txt文件保存在一個域中,它將追加顯示器可用.txt文件加上'time-ip address'而不是'time - domain name' – CodingNoob

+0

編輯我的答案,添加一個稍微不同的方法來保存使用更細粒度的命令而不是'file_put_contents'的文件。 – JakeGould

0
set_time_limit(0); 
date_default_timezone_set('UTC'); 
$file = "monitor-available.txt"; 
$lines = explode("\n", file_get_contents('testingdomains.txt')); 
$query = ""; 
foreach($lines as $line){ 
    usleep(125000); // sleep 1/8 of a second 
    $time = date("h:i:s"); 
    $result = gethostbyname($line); 
    $query .= $time . " - " .$result. "\n"; 
} 
file_put_contents($file, $query, FILE_APPEND | LOCK_EX); 

這對於IO更好只導致一個文件寫入。但是,如果你需要數據輸出立即文件,那麼這是不是一個選項

+1

這對整體IO來說可能會更好,但如果腳本在運行時中斷,會發生什麼情況?未被寫入文件的'$ query'的內容將消失。記錄對於性能來說永遠不會有好處,但被認爲是基本系統管理的必要任務。 – JakeGould