2016-09-19 27 views
-1

私は1日か2日間頭を叩いています。 http://php.net/manual/en/ziparchive.extractto.phpはかなり簡単です。私が抱えていた問題は、変数を受け入れるようにしようとしています。PHP ZipArchiveを変数と一緒に使うには

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

変数を受け入れることです。

$zip->open($myFile); 

メッセージボードやPHPサイトのすべての例で気付いています。 zipファイルの名前はハードコードされています。使用されている変数の例を見てきましたが、動作させることができません。

$path = 'zipfile.zip' 

$zip = new ZipArchive; 
if ($zip->open($path) === true) { 
    for($i = 0; $i < $zip->numFiles; $i++) { 
    $filename = $zip->getNameIndex($i); 
    $fileinfo = pathinfo($filename); 
    copy("zip://".$path."#".$filename,  "/your/new/destination/".$fileinfo['basename']); 
    }     
    $zip->close();     
} 

?> 

上記はPHPサイトの例です。私のコードは似ていて、

$r = "update/".$fileName; 
    echo $r; 
$z = new ZipArchive; 
    if($z->open('$r') === true){ 

    $z->extractTo('update/tmp'); 

    $z->close(); 
    return 'ok<br>'; 
    } else { 
    return 'Failed'; 
    } 

すべての標準のものです。しかし、ファイル名と場所をハードコードするだけで動作します。変数を扱う人はいますか?

UPDATE:

を働いWHAT全体の名前が変数として下塗りしたことができないようです。しかし、もしあなたがその名前の一部になっていれば、それは許されます。

$r = "myfile"; 
    $z = new ZipArchive; 
if($z->open("update/".$r.".zip") === true){ 
     //extractTo($path); 
    $z->close(); 
    print "ok"; 
    }else{ 
    print "Failed"; 
    } 
+1

'$ z-> open( '$ r')'を '$ z-> open($ r)'に変更します。一重引用符で囲まれた変数を表示すると、文字通り変数の内容の代わりに文字列 '$ r'が得られます。また、ファイルを扱うときは絶対パスで作業する必要があります。あるスクリプトが別のフォルダにある別のスクリプトに含まれている場合、相対パスはインクルードファイルからの相対パスであり、インクルードファイルではありません。 –

+0

私は引用符をつけて試してみましたが、どちらもうまくいきませんでした。しかし、ファイルの場所にハードコードがあれば、すべて正常に動作します。しかし、それはzipアーカイブの中に100以上のファイルがあるので、たくさんのハードコーディングを意味します。 – user1794918

+0

だから...どんなエラーメッセージ?ログファイルをチェックしましたか?エラー報告とエラー表示をオンにしましたか? –

答えて

0

zipファイルの完全なファイルパスを以下のように変数として指定することもできます。それは動作します

<?php 
    $fileName = "zipfile.zip"; 
    $r = "ziptest/".$fileName;    //$r = "ziptest/zipfile.zip"; This also accepted. 
    echo $r; 
$z = new ZipArchive; 
    if($z->open($r) === true){ 

    $z->extractTo('destination/'); 

    $z->close(); 
    print "ok"; 
    } else { 
    print "Failed"; 
    } 
?> 
関連する問題