php:文件存在为现有文件返回false

时间:2018-01-25 10:34:29

标签: php file

我是PHP的新手。

我正在尝试一个简单的程序。

  1. 打开文件
  2. 阅读第一行
  3. 行包含另一个文件名
  4. 此文件名的表单文件路径
  5. 检查是否存在。
  6. 它始终返回file does not exists,但实际上该文件存在于计算机中。

    当我在上面的步骤5中 硬编码文件路径 时,它开始检测file exists and evaluates true

    以下是我的代码:

    <?php
    
    $filepath = "/Users/aashok";
    $x="myfile";
    $file1="$filepath/$x";
    
    function checkFileExists($newFile){
     if(file_exists($newFile)){
            echo "exists";
     }else{
        var_dump($newFile);
     }
    }
    
    if(file_exists($file1)){
     $f = fopen($file1, 'r');
     $file2 = fgets($f);
     fclose($f);
     $filepath2="$filepath/$file2";
     // echo "filepath2 : $filepath2 ------ ";
     var_dump($file2);
     var_dump($filepath2);
     checkFileExists($filepath2);
     }else{
      echo "does not exists";
     }
    ?>
    

    我得到的输出是: string(8) "myfile2 " string(22) "/Users/aashok/myfile2 " string(22) "/Users/aashok/myfile2 "

    目录结构是:

    aashok$ ls|grep myfile
      myfile
      myfile2
    aashok$ pwd
      /Users/aashok
    aashok$ cat myfile
      myfile2
    

    我在这里有什么不妥之处。我可以帮忙。

2 个答案:

答案 0 :(得分:1)

如果 file1 包含多行,则对fgets的调用将包含行尾。当您将其传递给file_exists时,它将返回false,因为显然磁盘上的文件名不包含一个。

来自https://github.com/dpkp/kafka-python/issues/746

  

读取长度 - 读取1个字节,换行符(包含在返回值中)或EOF(以先到者为准)。

如果您首先从$file2修剪行尾,这应该可以正常工作:

更改

$file2 = fgets($f);

$file2 = rtrim(fgets($f));

答案 1 :(得分:0)

因为您的$file2只包含文件名,对吧?它的相对路径。 试试这段代码修复你的问题:

$filepath   = "/Users/abhinav";
$src        = "file1";
$file1      = "$filepath/$src";

function checkFileExists($newFile)
{
    if(file_exists($newFile))
    {
        echo "exists";
    }else{
        echo "file does not exists :$newFile ";
    }
}

if(file_exists($file1))
{
    $f      = fopen($file1, 'r');
    $file2  = trim(fgets($f)); // remove start/end spaces,new line, etc

    //If file is relative with current file, you need this
    $file2  = dirname($file1) . DIRECTORY_SEPARATOR . $file2;

    fclose($f);
    echo "file1 :$file1 ";
    //assume it return /Users/abhinav/newFile2 which is existing
    echo "filepath2 : $file2 ";
    checkFileExists($file2);//evaluates false in function
    checkFileExists("/Users/abhinav/newFile2");//evaluates true in function
}else
{
   echo "does not exists";
}