我正在尝试用fopen()打开一个文件,但它不起作用。
“警告:fopen():文件名不能为空”
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
$file = 'output/example.csv';
$handle = fopen("$file", "r");
if ($handle != FALSE) {
echo "error";
}
?>
我检查了文件是否存在以及路径是否正确。
echo $file;
给我“output / example.csv”
我无法理解。在另一个PHP脚本中,上面的代码工作正常......
请帮助。任何帮助表示赞赏。谢谢!
******* ******* EDIT 也许我应该确定我的问题并发布我的代码的更大部分:
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
clearstatcache();
require('mainConfig.php');
################ Save & delete markers #################
if($_POST) //run only if there's a post data
{
//make sure request is comming from Ajax
$xhr = $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
if (!$xhr){
header('HTTP/1.1 500 Error: Request must come from Ajax!');
exit();
}
/***** Datei öffnen *****/
$code = filter_var($_POST["mfileName"], FILTER_SANITIZE_STRING);
$file = 'output/'.$code.".csv";
echo "file to open: ".$file."<br>";
if (!file_exists($file)) {
echo "file doesn't exist: ".$file."<br>";
} else {
echo "file exists: ".$file."<br>";
}
$directory = 'output/backup/versions/'.$code;
if (!file_exists($directory)) {
mkdir($directory, 777, true);
}
$handle = fopen($file, "rb"); // 'r' = Lese und Schreib Rechte
if (!$handle) {
echo "Es ist ein Fehler aufgetreten. Datei konnte nicht geöffnet werden.<br>";
}
fclose($handle);
$i = 0;
if ($handle = opendir($directory)) {
while (($file = readdir($handle)) !== false){
if (!in_array($file, array('.', '..')) && !is_dir($dir.$file))
$i++;
}
}
closedir($handle);
$versionFileNameAndPath = 'output/backup/versions/'.$code.'/'.$code.'_versionNr_'.$i.".csv";
echo "copy Ziel-Datei: ".$versionFileNameAndPath."<br>";
if (!file_exists($versionFileNameAndPath)) {
if ( copy($file , $versionFileNameAndPath) ) {
// file copied.
} else {
print_r(error_get_last());
// error occurred..call error_get_last() function for err details.
}
}
$handle = fopen($file, "r"); // 'r' = Lese und Schreib Rechte
$managedPinArray = "";
$managedPinArrayIndexInFile = 0;
if ($handle != FALSE) {
echo "Es ist ein Fehler aufgetreten. Datei konnte geöffnet werden.";
} else {
$connection = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error());
mysql_select_db($DB_Name,$connection) or die(mysql_error());
...
etc.
这给了我以下输出:
file to open: output/69-1407031331-de.csv
file exists: output/69-1407031331-de.csv
copy Ziel-Datei: output/backup/versions/69-1407031331-de/69-1407031331-de_versionNr_0.csv
Warning: copy(): Filename cannot be empty in C:\xampp\htdocs\guide\map_process.php on line 49
Array ( [type] => 2 [message] => copy(): Filename cannot be empty [file] => C:\xampp\htdocs\guide\map_process.php [line] => 49 )
Warning: fopen(): Filename cannot be empty in C:\xampp\htdocs\guide\map_process.php on line 56
答案 0 :(得分:0)
如果
,则会出错<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
$file = 'output/example.csv';
$handle = fopen("$file", "r");
if (!$handle) {
echo "error";
}
?>
尝试此代码,您的条件是&#34;如果$ handle不是错误报告错误&#34;
答案 1 :(得分:0)
尝试使用整个地址
实施例 在Windows中
<强> C:\\一些\\输出\\ example.csv 强>
在linux中
<强> /home/some/example.csv 强>
答案 2 :(得分:0)
问题在于:
$file = 'output/'.$code.".csv";
// ... other code ...
while (($file = readdir($handle)) !== false){
// ... other code ...
copy($file , $versionFileNameAndPath)
您正在重复使用$file
变量,并且在while
循环结束时它将是false
(因此,有关空文件名的通知)。