2016-06-01 14 views
0

getFromNameメソッドを使用してZipArchiveでファイルコンテンツを読み込もうとしています。私のファイル名は二重のドット(..)です。PHP ZipArchive getFromNameは相対パスでファイルを読み取ることができません

$zip = new ZipArchive(); 

$zip->open('book.zip'); 

$content = $zip->getFromName('book/html/../README.md'); 

var_dump($content); 

私のzipファイルの構造はこれです:

Archive: book.zip 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     0 2016-06-01 11:09 book/ 
     0 2016-06-01 11:02 book/html/ 
    1855 2016-06-01 11:02 book/html/composer.json 
    2354 2016-06-01 11:09 book/README.md 
---------      ------- 
    4209      4 files 

私のPHPスクリプトは私のzipファイルと同じディレクトリにあるここに私のコードです。 私はこのように、Linuxのコマンドを使用してzip形式したフォルダ内のファイル一覧表示しようとすると:それは完璧に動作

ls -l book/html/../README.md 

を。私はZipArchiveがこの相対パスを正しく読むことができない理由を理解していません。

:私は、私は絶対パスでファイルを読み取ることができることを知っている:book/README.mdが、私は本当に、ファイルパスが別の場所から動的にロードされるため..との相対パスを使用する必要があると私は持っていませんそれらを制御する。

答えて

0

".."変更ディレクトリを含む相対ファイルパスを読み取ろうとしているのと同じ問題で1日ほど過ごしました。ファイルが抽出されない場合、ZipArchiveはこれらのパスを処理できません。私がZipを解凍することなく思いついた最善の解決策は、以下の関数を使って、あなたが望むファイルのフルパスを得ることでした:http://php.net/manual/en/function.realpath.php#84012。完全なファイルパスを取得した後、ZipArchive :: getFromName()はあなたが探しているファイルを見つけることができます。

関連する問題