変更を加えないで、PHPファイル関数がApache Commons VFSを使ってファイルにアクセスするようにQuercusを設定するにはどうすればよいですか?Apache Commons VFS with Quercus
3
A
答えて
2
これはかなりの開発です!ここに答えに収まる以上のもの。 (fopenを/関数fread/fwriteの/ fcloseの標準ファイル関数を置き換えるVFS I/Oを使用してPHPの関数ではなく、通常のI/O
- :概要では、ここに克服するには、2つの主要な障害があります)を上記の関数で置き換えます。
Quercusモジュールの実装はかなり簡単です。関数をPHPで利用できるように定義しています。モジュールの主な作業は、VFSへのインタフェースを提供することです。
class VFSModule extends AbstractQuercusModule
{
FileSystemManager fsManager = VFS.getManager();
public Object vfs_fopen(String filename, String mode) {
FileObject file = fsManager.resolveFile(filename);
if (mode.equals("r"))
return file.getContent().getInputStream();
else if (mode.equals("w"))
return file.getContent().getOutputStream();
throw new IllegalArgumentException("unsupported mode; "+mode);
}
function String vfs_fread(Object stream, int length) {
InputStream in = (InputStream)stream;
byte[] buffer = new byte[length];
int read = in.read(buffer);
// todo - handle smaller than length reads
return buffer;
}
function void vfs_fwrite(Object stream, int length, byte[] data) {
OutputStream out = (OutputStream)stream;
out.write(data);
}
}
(IOExceptionを取り扱いは混乱を避けるために取り残されている。)
モジュールがコード化されると、健全性テストとして、このモジュールからカスタムVFS関数を呼び出すいくつかのPHPスクリプトを書きます。
PHPからjava(およびvfs)を直接呼び出すことができるので、PHPで同等のVFS呼び出しをコーディングすることでモジュールなしでこれを行うことができます。
$mgr = org.apache.commons.vfs2.VFS.getManager();
function vfs_open($filename, $mode) {
if ($mode=="r") {
return $mgr->resolveFile($filename)->content->getInputStream();
}
else if ($mode=="w") {
return $mgr->resolveFile($filename)->content->getOutputStream();
}
// todo - handle other mode combinations
}
function vfs_read($resource, $length) {
$buf = str_repeat(" ", 1024);
$lenRead = $resource->read($buf, 0, 1024);
if ($lenRead<0) return "";
return substr($buf, 0, $lenRead);
}
次の部分は、これらの関数を標準のphpファイル関数にマッピングしています。これは、redefine buit-in php functionsに記載されているように、いくつかの方法で行うことができます。
関連する問題
- 1. java.lang.NoClassDefFoundError:org/apache/commons/vfs/FileSelector
- 2. Commons-vfsファイルシステムをモックアップ
- 3. Apache Commons VFSスレッドの安全性とリソース管理
- 4. Apache Commons VFSを使用してファイルに追加する
- 5. Commons vfs findFiles想像上のファイル
- 6. SFTPからのコピーがApache Commons VFSで中断されました。
- 7. Commons VFS and Java.net.URL - "sftp://"プロトコルのサポートを追加する
- 8. Apache Commons SCXMLステートマシンフレームワーク
- 9. apache commons lang StrTokenizer
- 10. Apache commons csv
- 11. Apache commons logging configuration
- 12. apache commons LinearObjectiveFunctionアルゴリズム
- 13. Apache VFSへのカスタムファイルシステムのサポート
- 14. CSVの相違によるエラーの解析(Java with Apache Commons CSV)
- 15. java.lang.NoClassDefFoundError:org/apache/commons/lang3/ObjectUtils
- 16. Apache Commons FileuploadとTomcat.util.http.fileupload
- 17. はApache CommonsのFTP
- 18. は、Apache CommonsのCSV
- 19. ガベージコレクションとApache Commonsタプルペア
- 20. Apache commons csv string intern
- 21. Apache Commons IO in .Net
- 22. Apache Commons Lang3とApache Commons Textの違いは何ですか?
- 23. Apache Commons Crypto - IllegalBlockSizeExceptionの取得
- 24. 内部zipファイル内のファイルを見つけるCommons VFS
- 25. ivy eclipse NoClassDefFoundError:org/apache/commons/lang3/StringUtils
- 26. JavaのApache Commons VFSにAmazon S3ファイルシステムを設定しようとしています
- 27. Apache VFSを使用したNTLM認証
- 28. UCanAccessアップグレードApache Commons Langバージョン
- 29. java.lang.NoClassDefFoundError:org/apache/commons/discovery/tools/DiscoverSingleton
- 30. 外挿OutOfRangeException Apache Commons数学
私がQuercusの関数を置き換えることができるかどうかはわかりませんが、試してみます。非常に詳細な答え、ありがとう! – Bogdacutu
@mdmaは、Javaコードの正確な上記スニペットですか?それはjavaのために無効な 'function'を使用していくつかの斑点を持っています。 –
正確 - それが何を意味しているかわかりませんが、完全ではなく、むしろデザインの概要です。 – mdma