Php副本:仅在内部while循环和处理最后一条记录时发生无效参数错误

Php副本:仅在内部while循环和处理最后一条记录时发生无效参数错误,php,copy,Php,Copy,读取图像url的文件并调用复制函数 imagecopy.txt https://server.com/2017/12/check.png https://server.com/2017/12/contacts.png https://server.com/2018/06/CDP.bmp https://server.com/module-acculturation-1.png 从url复制文件时,获取“打开流失败:仅在内部While循环上无效”参数错误。但如果文件有更多文件,则适用于最后一条记

读取图像url的文件并调用复制函数

imagecopy.txt

https://server.com/2017/12/check.png
https://server.com/2017/12/contacts.png
https://server.com/2018/06/CDP.bmp
https://server.com/module-acculturation-1.png
从url复制文件时,获取“打开流失败:仅在内部While循环上无效”参数错误。但如果文件有更多文件,则适用于最后一条记录

   <?php
$file=fopen("imagecopy.txt","r") or exit("Unable to open file!");
while (!feof($file))
{
    $source = fgets($file);
    $imagename = explode("/", $source);
    $pathname = 'uploads/' . date("Y") . '/' . date("m") . '/';
    if (!is_dir($pathname)) 
    {
    mkdir($pathname, 0777, true);
    }

    $destination = $pathname.end($imagename); 
    copyimageURL($source, $destination);                  
}
fclose($file);

function copyimageURL($source, $destination)
{
    echo $source;
    echo "<br>";
    echo $destination;
    copy($source, $destination);
}

?>

1.工作良好,有单记录
2.仅当文件具有更多图像列表时才复制最后一个图像。

我猜您正在读取的imagecopy.txt以换行结束,这会使文件的最后一行为空。 如果你改变

$source = fgets($file);

它应该很好用

试试这个:

if ($file) {
    while (($name = fgets($file)) !== false) {
        $imagename = basename($name);
        $pathname = 'uploads/' . date("Y") . '/' . date("m") . '/';
        if (!is_dir($pathname)) 
            mkdir($pathname, 0777, true);

        $destination = $pathname.$imagename; 
        copyimageURL(trim($name), $destination);     
    }
    fclose($file);
}

$imagename[8]
看起来它将在某个时候被取消定义(索引)。使用正确的索引位置更新了代码,而将问题放在错误的位置更新了旧代码。sry。仅为最后一条记录工作。不面对空数据问题。
if ($file) {
    while (($name = fgets($file)) !== false) {
        $imagename = basename($name);
        $pathname = 'uploads/' . date("Y") . '/' . date("m") . '/';
        if (!is_dir($pathname)) 
            mkdir($pathname, 0777, true);

        $destination = $pathname.$imagename; 
        copyimageURL(trim($name), $destination);     
    }
    fclose($file);
}