2012-03-14 8 views
3

PHPは、入力ファイルhtml要素を構築するためにPHPアプリケーション内でZend_Formを使用しています。この要素の 'destination'を設定することができ、receive()を呼び出すと、ファイルは指定された場所に保存されます。PHPはZend_Formを使用してバイト配列としてファイルを受け取ります

ファイルをディスクにまったく保存できないようにしたいが、ファイルをバイト配列として取得し、それ以外の何かを行う。

これは可能ですか? Zend_Form()で可能でない場合は、他の方法で行うことができますか?

EDIT:ディスクに書き込めない理由は、アプリケーションがAzure上で動作し、どこにでも書き込み権限がありません。一時フォルダにもありません。私たちはZendから '与えられた宛先は書き込み可能ではありません'という例外を受け取ります。

+0

は、少なくとも一時ディレクトリにオプションを保存していますか? –

+0

いいえ、そうではありません。ディスク上のどの場所にも保存することはできません。 –

答えて

1

すべてのPHPアップロードは、Zendを使用するかどうかにかかわらずファイルシステムに書き込まれます(upload_tmp_dirおよびPOST method uploadsを参照)。

別の場所がphp.iniupload_tmp_dirディレクティブで指定しない限り、ファイルは、デフォルトでは、サーバのデフォルトの一時 ディレクトリに保存されます。代わりに、アップロードを処理し、直接あなたがfile_get_contents()または類似の機能を使用して文字列にファイルを読んで聞かせ$_FILES配列を使用してアクセスしようとするreceiveを使用しての

。ただし、フォームを作成して一般的に処理するには、引き続きZend_Formを使用することができます。

アップロードされたファイルが保存されているメモリにファイルシステムをマップするために、共有メモリupload_tmp_dirを設定できます。誰かが非常に大きなファイルをアップロードしようとすると、性能やサービスコストに影響を与える可能性のあるメモリに記憶されるように注意してください。

最終的にZend_File_Transfer_Adapter_Http::receive()は、move_uploaded_file()を呼び出して、一時的な場所から永続的な場所にファイルを移動します。さらに、アップロードが有効でフィルタリングされていることを確認し、受信できたとマークして、再度移動できないようにします(失敗するため)。

2

実行可能と思われるのは、php://memoryプロトコルを使用してファイルを保存することだけです。

実装する理由は決してありませんでしたが、ファイルの保存場所をphp://memoryに設定すると簡単です。マニュアルページPHP I/O Wrappersへのリンクです。

関連する問題