0

HTML フォームからファイル名を送信して、ファイルを zip に追加しようとしています。HTMLコードは

<form action="act.php" method="POST">
<input type="checkbox" name="send1" value="filename1.extension">
<input type="checkbox" name="send1" value="filename2.extension">
</form>

PHP

私は2つの方法で試しました
方法1:

$zipfilename="abcd.zip";
$zip= new ZipArchive();
$zip->open($zipfilename, ZipArchive::CREATE);
foreach($_POST['send1'] as $filename)
{
$zip->addFile($filename);
}
$zip->close();

方法 2:

$zipfilename="abcd.zip";
$filestozip=array();
foreach($_POST['send1'] as $filename)
{
$filestozip[]=$filename;
}

$zip= new ZipArchive();
$zip->open($zipfilename, ZipArchive::CREATE);

foreach($filestozip as $filename2)
{
$zip->addFile($filename2);}
}

$zip->close();

しかし、Zip ファイルは作成されません。$filetozip の静的コードで Zip 構文を確認しようとしました

$filestozip[0]="filename1.extension";
$filestozip[0]="filename1.extension";

出来た。しかし、データが動的に別の HTML ページからのものである場合、それは機能しません。私のコードのエラーは何ですか?

4

2 に答える 2

0

ZipArchive::addFile($file) を使用しています。これは、これらのファイルがサーバーのどこかに存在するか、サポートされているプロトコルが使用されている場合は別のサーバーのどこかに存在することを期待しています。

それらのファイルはスクリプトからアクセス可能/読み取り可能ですか? 使用しているフルパスですか、それとも相対パスですか?

file_get_contents($filename); を使用する場合 期待されるデータを出力しますか?

addFile() を使用する前に、常に file_exists を確認する必要があります。

于 2012-05-20T13:13:20.857 に答える
0

問題が見つかりました。私の論理に問題はありません。

$zip->addFile($filename);

前に述べたように、$filename 変数のデータは HTML から受信され、スペースは意図的に %20 に置き換えられます。このような置換の理由は、データを使用してファイルへのリンクを有効にするためです。ただし、スペースが %20 に置き換えられた場合、zipArchive::addFile() は zip ファイルを追加せず、最終的に Zip の作成に失敗します。

于 2012-05-21T02:33:29.263 に答える