私は進捗バー付きのウェブページ経由でファイルをアップロードする作業をしていますValums ファイルアップローダーほとんどすべて正常に動作しますが、ファイルが保存されるデフォルトのtmpディレクトリを変更することはできません。その間アップロード。
ファイルはデフォルトのシステムディレクトリ/upload
ではなく、ディレクトリに保存する必要があります。これは、サイズが 4 MB に制限されている RAM ディスクにマウントされ、ユーザーがアップロードするファイルは 10 MB 程度になるためです。/tmp
/tmp
多くのウェブページを検索しましたが、解決策はどれも機能しませんでした。一時ディレクトリを次のように設定しましたphp.ini
:
upload_tmp_dir =/upload
ディレクトリに権限を設定しており/upload
、Apache がファイルの所有者であるため、ディレクトリは PHP によって確実に書き込み可能です。
ファイル アップローダーのターゲット パスを に設定しました/upload
。アップロード後にファイルもこのディレクトリに保存したいからです。最終結果として、小さなファイルは正常にアップロードされますが、4 MB を超えるファイルはアップロードに失敗します。この動作の原因として考えられるのは、/tmp
アップロード中にファイルが に保存されるということだけです。念のため、 で確認したところsys_get_temp_dir()
、結果は/tmp
- でした。つまり、PHP は php.ini ディレクティブを無視するか、アップロード中にファイルを保存する場所を設定する別の方法があるということです。
ああ、最後の情報:open_basedir
は設定されていないため、ディスクへの PHP アクセスはファイル権限によってのみ制限されます。
ベストアンサー1
ここで説明されている問題は、かなり前に私が解決しましたが、アップロードが機能しなかった主な理由が何だったのかはよく覚えていません。アップロードが機能するためには、修正する必要のある点が複数ありました。同様の問題を抱えている他の人に役立つかもしれないチェックリストを作成しました。できるだけ役立つように編集します。以前チャットで言ったように、私は組み込みシステムで作業していたので、非組み込みシステムではいくつかのポイントが省略される可能性があります。
php.ini を確認してください
upload_tmp_dir
。これは、アップロード中に PHP が一時ファイルを保存するディレクトリです。open_basedir
php.ini を確認してください。定義されている場合、指定されたパスとそのサブディレクトリへの PHP の読み取り/書き込み権限が制限されます。upload_tmp_dir
このパス内にあることを確認してください。php.ini を確認してください
post_max_size
。20 MB のファイルをアップロードする場合は、 のように少し大きい値を試してくださいpost_max_size = 21M
。これは、アップロード中に使用される可能性のある POST メッセージの最大サイズを定義します。php.ini を確認してください
upload_max_filesize
。これはアップロードできる最大のファイルを指定します。php.ini を確認してください
memory_limit
。これはスクリプトが消費できるメモリの最大量です。アップロード サイズより小さくすることはできないことは明らかです (正直に言うと、よくわかりません。PHP は一時ファイルをコピーするときにバッファリングしている可能性があります)。ウェブサーバー上のPHPが使用するphp.iniファイルが正しいか確認してください。最善の解決策は、ここで説明するディレクティブを使用してスクリプトを実行することです。http://php.net/manual/en/function.php-ini-loaded-file.php(
php_ini_loaded_file
関数)PHP がどのユーザーとして実行されているかを確認します (方法については、こちらを参照してください)。PHP がどのユーザーとして実行されているかを確認するにはどうすればよいですか?)。私はさまざまなディストリビューションやサーバーで作業してきました。 の場合もあります
apache
が、 の場合もありますroot
。とにかく、このユーザーに、アップロード先の一時ディレクトリとディレクトリの読み取りおよび書き込み権限があることを確認してください。サブディレクトリにアップロードする場合は、パス内のすべてのディレクトリを確認してください (たとえば、と の/dir1/dir2/
両方をチェックします) 。dir1
dir2
組み込みプラットフォームでは、ルート ファイルシステムへの書き込みを制限する必要がある場合があります。これは、ルート ファイルシステムがフラッシュ カードに保存されるためです。これにより、このカードの寿命が延びます。スクリプトを使用してファイルの書き込みを有効/無効にする場合は、アップロードする前に書き込みが有効になっていることを確認してください。
PHP >5.4のセッションベースのアップロード監視で深刻な問題が発生しました(ここで説明されているように)http://phpmaster.com/tracking-upload-progress-with-php-and-javascript/) 。最初は簡単なものを試してください (次のように:http://www.dzone.com/snippets/very-simple-php-file-upload)。それがうまくいけば、より洗練されたメカニズムを試すことができます。
php.ini に変更を加えた場合は、設定が再読み込みされるようにサーバーを再起動することを忘れないでください。