PHP fopen()不起作用。文件存在,路径正确,权限已检查

时间:2014-07-03 12:39:11

标签: php fopen

我正在尝试用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

3 个答案:

答案 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(因此,有关空文件名的通知)。