0

我制作了某种 PHP 文件来组织来自旧网站的图像。那个旧网站的管理员没有使用子文件夹,所以我在一个目录中获得了数千张图片。

我得到了一个带有文件名和类别的 csv 文件,现在我只想逐行复制这些文件名,然后让 PHP 将它们复制到 destenie 目录中。

这是在我本地机器上的 XAMPP 上,也许这是问题所在?

这是我已经拥有的:

<?php
$source = "";
$destination = "Kompaniefest05/";
$handle = fopen($source."names.txt", "r");
$buffers[] = "";
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        array_push($buffers, $buffer);
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
};

foreach ($buffers as $buffer){
    echo "Copy ".$source.$buffer." to ".$destination.$buffer;
    if(copy($source.$buffer, $destination.$buffer)){
        echo "</br>True</br>";
    }else{
        echo "</br>False</br>";
    };
};
?>

代码按预期运行,我得到了包含 .txt 文件中所有文件名的列表,但始终显示为“False”,并且目标目录保持为空。

这是 XAMPP 的配置问题还是我的代码中有一些错误?

// 编辑:.txt 文件的示例

_1_20081008_2089220027.jpg
_2_20081008_1467211531.jpg
_3_20081008_1388589383.jpg
_4_20081008_1327719202.jpg
_5_20081008_1691023977.jpg
_6_20081008_1494910005.jpg
_7_20081008_1101725852.jpg
_8_20081008_1123823020.jpg
_9_20081008_1092805517.jpg
_10_20081008_1752481220.jpg
_11_20081008_1420860420.jpg
_12_20081008_1803761675.jpg
_13_20081008_1199173697.jpg
_14_20081008_1877520136.jpg
_15_20081008_1344646088.jpg
_16_20081008_1918096785.jpg
_17_20081008_1895142423.jpg
_18_20081008_1841060330.jpg
_19_20081008_1438833482.jpg
_20_20081008_1871628956.jpg
_21_20081008_1141581267.jpg
_22_20081008_1416565613.jpg
_23_20081008_1868584205.jpg
_24_20081008_1265588276.jpg
_25_20081008_2023422375.jpg
_26_20081008_1410663038.jpg
_27_20081008_1398533505.jpg
_28_20081008_1413417063.jpg
_29_20081008_1827605061.jpg
_30_20081008_1883399407.jpg
_31_20081008_1468535188.jpg
_32_20081008_1742608861.jpg
_33_20081008_1818421650.jpg
_34_20081008_1682119571.jpg
_35_20081008_1066121950.jpg
4

1 回答 1

0

试试这个,我在 localhost 上检查了一些示例文件及其工作。
您也可以使用自己的代码,只需稍作改动。

只需更改array_push($buffers, $buffer);array_push( $buffers, trim( $buffer ) );

因为您的文件名末尾包含一个新行,这会阻止您复制文件。并且在编码时
始终打开:)error_reporting

<?php
  $source       = "";
  $destination  = "Kompaniefest05/";

  if ( !file_exists( $destination ) ) {
    mkdir( $destination, 0755 );
  }

  $buffers  = file( $source."names.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );

  foreach( $buffers as $buffer ) {
    $fcopy  = $source.trim( $buffer );
    $tcopy  = $destination.trim( $buffer );

    echo "Copying ".$fcopy." to ".$tcopy." - ";
    if ( file_exists( $fcopy ) ) {
      if ( copy( $fcopy, $tcopy ) ) {
        echo "SUCCESS";
      }
      else {
        echo "FAILED";
      }
    }
    else {
      echo "FILE MISSING";
    }
    echo "<br />";
  }
?>
于 2013-06-26T09:42:37.667 回答