PHP赢得';t在文本文件中循环


PHP won't loop though a text file

我在试图让php循环通过一个文本文件时遇到了问题,所以它会从文本文件中下载所有链接,第一个文件下载得很好,但随后它停止了,如果有人能帮忙,我真的很感激,非常感谢。

<?php
$file_handle = fopen("list.txt", "r"); 
$lineCount=0;
$line = array();
while (!feof($file_handle)) {
array_push($line, fgets($file_handle));
$lineCount++;
}
for($i=0;$i<$lineCount;$i++){
set_time_limit (24 * 60 * 60);
$destination_folder = 'files/';
$newfname = $destination_folder . basename($line[$i]);
$file = fopen ($line[$i], "rb");
if ($file) {
    $newf = fopen ($newfname, "wb");
    if ($newf){
        while(!feof($file)) {
             fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
        }
    }
}
echo $line[$i].'...done.<br />';
if ($file) {
    fclose($file);
}
if ($newf) {
    fclose($newf);
}
}
?>

尝试包装您希望for循环在{}中重复的所有内容

$file_handle = fopen("list.txt", "r");
$lineCount=0;
$line = array();
while (!feof($file_handle)) {
    array_push($line, fgets($file_handle));
    $lineCount++;
}
for($i=0;$i<$lineCount;$i++){
    set_time_limit (24 * 60 * 60);
    $destination_folder = 'files/';
    $newfname = $destination_folder . basename($line[$i]);
    $file = fopen ($line[$i], "rb");
    if ($file) {
        $newf = fopen ($newfname, "wb");
        if ($newf){
            while(!feof($file)) {
                 fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
            }
        }
    }
    echo $line[$i].'...done.<br />';
    if ($file) {
        fclose($file);
    }
    if ($newf) {
        fclose($newf);
    }
}

您试图通过while循环获取"lineCount",但"$line"变量将被覆盖。

将$line声明为while循环上面的数组,然后在其中添加文件名。使用下面的代码。

$file_handle = fopen("list.txt", "r");
$lineCount=0;
$line = array();
while (!feof($file_handle)) {
    $strmTemp = trim(fgets($file_handle));
    if (strlen($strmTemp) > 0)
    {
        $line[] = $strmTemp;
        $lineCount++;
    }
}
for($i=0;$i<$lineCount;$i++){
    set_time_limit (24 * 60 * 60);
    $destination_folder = 'files/';
    $newfname = $destination_folder . basename($line[$lineCount]);
    $file = fopen ($line[$lineCount], "rb");
    if ($file) {
        $newf = fopen ($newfname, "wb");
        if ($newf){
            while(!feof($file)) {
                 fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
            }
        }
    }
    echo $line[$lineCount].'...done.<br />';
    if ($file) {
        fclose($file);
    }
    if ($newf) {
        fclose($newf);
    }
}

如果list.txt文件不大,可以使用file()读取:

$urls = file('list.txt');
foreach ($urls as $url) {
    // Do download and save logic here
}