我是PHP的新手。
我正在尝试一个简单的程序。
它始终返回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
我在这里有什么不妥之处。我可以帮忙。
答案 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";
}