2017-06-02 13 views
0

ファイルマネージャアプリケーションを作成しました ファイルをダウンロードしようとすると問題が発生します uploadsディレクトリにあるファイルと私のPHPのtempディレクトリから移動したフォルダのアクセス許可を継承していけないので、私はPHPのエラーログで、このエラーを得たreadfile():ストリームを開くことに失敗しました:Windowsサーバーで許可が拒否されました。IIS 8

PHP Warning: readfile(files/xxx.zip): failed to open stream: Permission denied in ... 

私はIISの内側に移動して、[セキュリティ]タブに移動して、それが

<?php 

    set_time_limit(0); 
    ini_set('memory_limit', '2147483648'); 

    $file = "files/".htmlspecialchars($_GET["file"]); 

    $quoted = sprintf('"%s"',addcslashes(basename($file),'"\\"')); 
    $size = filesize($file); 
    if (file_exists($file)) { 
     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Cache-Control: public"); 
     header("Content-Description: File Transfer"); 

     header("Content-Type: force-download"); 

     header("Content-Disposition: attachment; filename=".$quoted); 

     header("Content-Transfer-Encoding: binary"); 
     header('Connection: Keep-Alive'); 
     header("Content-Length: ".$size); 

     ob_clean(); 
     flush(); 
     readfile($file); 
    } else { 
     header("Location: fileNotFound.php?file=$file"); 
    } 
を働く継承権限を適用
+0

許可を確認してください –

+2

[ストリームを開くことに失敗しました:許可が拒否されました]エラー - Laravel](https://stackoverflow.com/q/23540083/6521116) –

+0

許可をそのディレクトリに変更しましたか? –

答えて

0

angeフォルダのアクセス許可、あなたは問題を解決することができます。 IISを再起動する必要があるかもしれません。

まあ、出力バッファの内容を破棄したときに動作するob_cleanを使用しています。とにかく、関数を呼び出す前にob_cleanのコンテンツを使用すると、そのエラーが発生します。だから、他のPHPファイルにスペースや他の "見えない"文字を残した可能性はありますか?

+0

私は既にすべてのフォルダのアクセス許可を確認しましたが、運はありません。私はまた、私の一時フォルダと同じアクセス許可を与えました – Bill

+0

相対パスの代わりに "c:/ foo/bar"のような完全なファイルパスを渡そうとします – sensorario

+0

PHPがサービスとしてインストールされている場合は、PHPも再起動する必要があります。 – sensorario

関連する問題