いつもお世話になっております。どうしてもわからないことがありますので質問いたします。
巨大なバイナリファイルをサーバーにアップロードする際に、クライアント側でファイルを分割し、サーバー側で分割したファイルを元に戻すという実装を行っているのですが、分割したファイルを元に戻す過程でPermission Deniedが発生します。
どうしてもわからないのは、最初や2回目の書き込み時にPermission Deniedが発生するのではなく、途中(7回目や50回目など、おそらくランダム)でPermission Deniedが発生することです。
php
1<?php 2$tmp_path = $_FILES["part"]["tmp_name"]; 3$contents = file_get_contents($tmp_path); 4 5$path = "temp.exe"; 6file_put_contents($path, $contents, FILE_APPEND);
$_FILES["part"]
は分割したバイナリファイルです。$path
には拡張子exeのファイル名が入ります。重要な点は、拡張子がexe以外の場合ではPermission Deniedが発生しないということです。次のようにすることで、Permission Deniedは発生しません。
php
1<?php 2$tmp_path = $_FILES["part"]["tmp_name"]; 3$contents = file_get_contents($tmp_path); 4 5$path = "temp"; 6file_put_contents($path, $contents, FILE_APPEND);
なぜ拡張子をexeにすると、途中でPermission Deniedが発生してしまうのでしょうか。質問文を書いている最中に問題の回避策(拡張子をつけないor拡張子をexe以外にする)を見つけることはできましたが、拡張子exeでPermission Deniedが発生する理由がわかりませんので、どなたかこの疑問を解消してくれないでしょうか。よろしくお願いいたします。
<環境>
・Windows 10に今現在の最新版であるXAMPP v5.6.21をインストールしている。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/20 08:40