Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查文件(可能有多个扩展名)是否存在?_Php_Arrays_Csv_Object_Conditional Statements - Fatal编程技术网

Php 检查文件(可能有多个扩展名)是否存在?

Php 检查文件(可能有多个扩展名)是否存在?,php,arrays,csv,object,conditional-statements,Php,Arrays,Csv,Object,Conditional Statements,我得到了一个脚本,它可以帮助我将一些数据添加到csv文件中,这是基于一个事实,即图像是否在文件夹中(是否存在)。文件是图像,所以我需要检查文件是否存在,以及它是否是png、jpg、jpeg、gif 到目前为止,它只检查它是否是一个JPG,但我希望它找到文件存在,如果它是一个PNG或JPEG,甚至GIF <?php $columns = array("row1","row2","row3","row4","row5","row6","row7","row8","row9", "row10",

我得到了一个脚本,它可以帮助我将一些数据添加到csv文件中,这是基于一个事实,即图像是否在文件夹中(是否存在)。文件是图像,所以我需要检查文件是否存在,以及它是否是png、jpg、jpeg、gif

到目前为止,它只检查它是否是一个JPG,但我希望它找到文件存在,如果它是一个PNG或JPEG,甚至GIF

<?php
$columns = array("row1","row2","row3","row4","row5","row6","row7","row8","row9",
"row10","row11","row12","row13","row14","row15","row16","row17","row18"
);
$rootDir = "/path/to/images/folder/files";
$file = fopen("database.csv", "r") or die('fopen database failed');
$newFile = fopen("newdata.csv", "w") or die('fopen newdata.csv failed');
while (($data = fgetcsv($file, 999999, ";")) !== FALSE) {
    $row = array_combine($columns, $data);
    $filename = $row['row4'].".jpg"; // could be png or jpEg, or even gif
    if (file_exists("$rootDir/$filename")) {
        $row['image'] = .$filename; //also needs correct extension of image which exists.
        $row['small_image'] = .$filename;
        $row['thumbnail'] = .$filename; 
    }
    fputcsv($newFile, array_values($row), ";",'"' );
}
fclose($file);
fclose($newFile);
?>

您可以执行以下操作:

编辑:

如果要执行不区分大小写的
文件\u exists()
检查,则解决方案如下:

下面的
fileExists()
函数返回找到的完整路径文件,如果没有找到,则返回
false

function fileExists($fileName, $caseSensitive = true) {

    if(file_exists($fileName)) {
        return $fileName;
    }
    if($caseSensitive) return false;

    // Handle case insensitive requests            
    $directoryName = dirname($fileName);
    $fileArray = glob($directoryName . '/*', GLOB_NOSORT);
    $fileNameLowerCase = strtolower($fileName);
    foreach($fileArray as $file) {
        if(strtolower($file) == $fileNameLowerCase) {
            return $file;
        }
    }
    return false;
}
以下是消息来源:

现在你的代码

// your code

$possible_extensions = array("jpg", "jpeg", "png", "gif");
$row = array_combine($columns, $data);
foreach($possible_extensions as $ext){
    $filename = $row['row4'] . "." . $ext;
    if ($filename = fileExists("$rootDir/$filename", false)) {
        $row['image'] = .$filename; //also needs correct extension of image which exists.
        $row['small_image'] = .$filename;
        $row['thumbnail'] = .$filename; 
        break;
    }
}
fputcsv($newFile, array_values($row), ";",'"' );

// your code

您可以使用扩展名创建一个数组,并将
$filename=$row['row4'].“.jpg”//可以是png或jpEg,甚至可以是gif,如果(file_exists($rootDir/$filename)){$row['image']=.$filename;//还需要正确的图像扩展名。$row['small_image']=.$filename;$row['thumbnail']=.$filename;}
在for中检查扩展名建议:检查,与检查扩展名相比,它可以为您提供更好的图像类型详细信息。因此,
row4
包含文件名的根,但没有扩展名?@mlclm,您的问题仍然适用于您吗?我有一些很好的解决方案(如果你熟悉Linux shell的话)嗯。。。扩展名为
.JPG
的文件如何,而不是
.JPG
和其他大小写变体。这有点贵,因为每个文件名都要循环四次。最好查看每个文件名,然后运行循环检查扩展名,直到找到正确的扩展名。此时,如果它们都是数组中最后一个扩展名,则每四次只能运行一次。@MarkSetchell-hmm,在这种情况下,由于数组的大小,它会很昂贵。@JesseWilliams不是每次都这样。一旦获得文件,它将执行其操作,然后从循环中中断,因此出现
break
语句。
// your code

$possible_extensions = array("jpg", "jpeg", "png", "gif");
$row = array_combine($columns, $data);
foreach($possible_extensions as $ext){
    $filename = $row['row4'] . "." . $ext;
    if ($filename = fileExists("$rootDir/$filename", false)) {
        $row['image'] = .$filename; //also needs correct extension of image which exists.
        $row['small_image'] = .$filename;
        $row['thumbnail'] = .$filename; 
        break;
    }
}
fputcsv($newFile, array_values($row), ";",'"' );

// your code