Valums file uploader を使用して、進行状況バーのあるWebページを介したファイルのアップロードに取り組んでいます。ほとんどすべてが正常に動作しますが、アップロード中にファイルが保存されるデフォルトのtmpディレクトリを変更することはできません。
_/upload
_はサイズが制限されたRAMディスクにマウントされるため、デフォルトのシステム_/tmp
_ディレクトリではなく、_/tmp
_ディレクトリに保存する必要があります4µMBとユーザーは約10MBのファイルをアップロードします。
多くのWebページを検索しましたが、解決策はありませんでした。 _php.ini
_に一時ディレクトリを設定しました:
_upload_tmp_dir =/upload
_
_/upload
_ dirにアクセス許可を設定しました。Apacheはファイルの所有者であるため、ディレクトリはPHPによって確実に書き込み可能です。
ファイルアップローダーのターゲットパスを_/upload
_に設定しました。アップロード後にもこのディレクトリにファイルを保存するためです。最終結果は小さなファイルが正常にアップロードされることですが、4MBを超えるファイルはアップロードに失敗します。この動作の唯一の理由は、アップロード中にファイルが_/tmp
_に保存されることです。確かに、sys_get_temp_dir()
で確認し、結果は_/tmp
_- so PHP php.iniディレクティブを無視するか、他の方法がありますアップロード中にファイルが保存される場所を設定します。
ああ、最後の情報:_open_basedir
_は設定されていないため、PHPディスクへのアクセスはファイルのアクセス許可によってのみ制限されます。
ここで説明した問題はかなり前に解決されましたが、アップロードが機能しなかった主な理由は何であるかを本当に覚えていません。アップロードが機能するように修正が必要なことが複数ありました。私は、同様の問題を抱えている他の人を助けるかもしれないチェックリストを作成しました。それを編集して、できるだけ役立つようにします。チャットで前に言ったように、私は組み込みシステムで作業していたので、非組み込みシステムではいくつかの点がスキップされる場合があります。
チェックupload_tmp_dir
php.iniで。これは、PHP=がアップロード中に一時ファイルを保存するディレクトリです。
チェックopen_basedir
php.iniで。定義されている場合、PHP指定されたパスとそのサブディレクトリへの読み取り/書き込み権限。制限upload_tmp_dir
はこのパス内にあります。
チェックpost_max_size
php.iniで。 20 MBのファイルをアップロードする場合は、post_max_size = 21M
。これは、おそらくアップロード中に使用しているPOSTメッセージの最大サイズを定義します。
チェックupload_max_filesize
php.iniで。これは、アップロードできる最大のファイルを指定します。
チェックmemory_limit
php.iniで。これは、スクリプトが消費できるメモリの最大量です。アップロードサイズよりも小さくすることはできないことは明らかです(正直なところ、PHPが一時ファイルのコピー中にバッファリングしていることは確かではありません)。
Webサーバーで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に変更を加えた場合は、サーバーを再起動して構成が再読み込みされるようにしてください。
私はこの問題に長い間苦労しました...私の解決策は、phpスクリプトを含むフォルダー内のphp.iniファイルを変更することでした。ルートでphp.iniを変更しても問題は解決しなかったため、これは重要でした(きめ細かな制御のために各フォルダーにphp.iniがあります)。 php.iniの関連エントリは次のようになりました。..(この問題にはoutput_bufferingはおそらく必要ありません)
output_buffering = On
upload_max_filesize = 20M
post_max_size = 21M
私の問題はselinuxでした...
Go sestatus
現在のモード:強制の場合
次にchcon -R -t httpd_sys_rw_content_t/var/www/html
以下を使用してphpファイルを作成します。
<?php
print Shell_exec( 'whoami' );
?>
または
<?php echo exec('whoami'); ?>
webブラウザで出力を試してください。 出力がユーザーの例ではない場合:www-data次のステップに進みます
ルートとして開く:
/ etc/Apache2/envvars
これらの行を探します:
export Apache_RUN_USER =ユーザー名
export Apache_RUN_GROUP = group-name
例:
apache_RUN_USER = www-dataをエクスポートします
apache_RUN_GROUP = www-dataをエクスポートします
ここで:
username =使用しているフォルダーにアクセスできるユーザー名group =読み取り+書き込み+実行アクセス権を付与したグループ
次のように変更します。
export Apache_RUN_USER = "username"
export Apache_RUN_GROUP = "group"
ユーザーにまだアクセス権がない場合:
Sudo chmod 775 -R「r/w/xアクセスを許可するフォルダーのディレクトリ」