変更を加えないで、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. Commons-vfsファイルシステムをモックアップ
- 2. Apache Commons VFSを使用してファイルに追加する
- 3. Apache Commons VFSスレッドの安全性とリソース管理
- 4. Commons vfs findFiles想像上のファイル
- 5. Commons VFS and Java.net.URL - "sftp://"プロトコルのサポートを追加する
- 6. Apache VFSへのカスタムファイルシステムのサポート
- 7. Apache Commons SCXMLステートマシンフレームワーク
- 8. Apache commons csv
- 9. apache commons lang StrTokenizer
- 10. Apache commons logging configuration
- 11. CSVの相違によるエラーの解析(Java with Apache Commons CSV)
- 12. Apache Commons IO in .Net
- 13. はApache CommonsのFTP
- 14. Apache Commons FileuploadとTomcat.util.http.fileupload
- 15. は、Apache CommonsのCSV
- 16. JavaのApache Commons VFSにAmazon S3ファイルシステムを設定しようとしています
- 17. 外挿OutOfRangeException Apache Commons数学
- 18. Apache CommonsのJSPでのログイン
- 19. Apache Commons FTPの問題
- 20. のApache Commonsの六角エンコーディングエラー
- 21. Apache Commons EmailとUTF-8
- 22. Apache Commons Logging - New Line Charachters
- 23. Apache Commons Net APIの使用
- 24. apache commons ftpクライアントファイルアップロードの問題
- 25. java.lang.NoClassDefFoundError:org/apache/commons/discovery/tools/DiscoverSingleton
- 26. apache commons ftpクライアントタイムアウトの問題
- 27. Apacheコモンズで特別なフォルダを使用するVFS
- 28. Android - Apache Commons libraries&Exchange WebサービスマネージドAPI
- 29. Apache Commons GlassfishサーバーのFileUpload問題
- 30. Socket.io with apache proxy
私がQuercusの関数を置き換えることができるかどうかはわかりませんが、試してみます。非常に詳細な答え、ありがとう! – Bogdacutu
@mdmaは、Javaコードの正確な上記スニペットですか?それはjavaのために無効な 'function'を使用していくつかの斑点を持っています。 –
正確 - それが何を意味しているかわかりませんが、完全ではなく、むしろデザインの概要です。 – mdma