PHP不会循环遍历文本文件

时间:2015-02-18 09:58:43

标签: php

我在尝试让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);
}
}
?>

3 个答案:

答案 0 :(得分:0)

尝试在{}

中包装您希望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);
    }
}

答案 1 :(得分:0)

你正试图获得&#34; lineCount&#34;通过while循环但是&#34; $ line&#34;变量将被覆盖。

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

$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);
    }
}

答案 2 :(得分:0)

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

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