1

私はワードプレスサイトを持っていて、私が働いている会社のためにHRプラグインを作成しています。1つの機能により、管理者は複数のドキュメントを含むzipファイルをダウンロードできます。正常に動作する次のコードをテストしましたが、選択したディレクトリにZIPアーカイブを作成したいと思います。

function direct_download()
{
    if ($_REQUEST['action'] == 'download')
    {
        $App = new DHR_Application();
        $file_name=str_replace(" ","_",$App->Fname)."_".str_replace(" ","_",$App->Lname)."_".$App->ID;
        $txt_name=$file_name.".txt";
        $txt_path="../user-upload/temp/".$file_name.".txt";
        $arc_name=$file_name.".zip";


        $txt=$App->Fname." ".$App->Lname."\r\n".$App->ID;
        $file=fopen($txt_path,"w+");
        fwrite($file,$txt);

        $zip = new ZipArchive();

        if ($zip->open($arc_name, ZIPARCHIVE::CREATE )!==TRUE)
        {
            exit("cannot open <$arc_name>\n");
        }
        $nameAtt1 = pathinfo($App->Att1,PATHINFO_BASENAME);
        $zip->addFile($App->Att1,$nameAtt1);
        if (($App->Att2 != '') && ($App->Att2 != null))
        {
            $nameAtt2 = pathinfo($App->Att2,PATHINFO_BASENAME);
            $zip->addFile($App->Att2,$nameAtt2);
        }

        $zip->addFile($txt_name,$txt_path);
        $zip->close();
        fclose($file);

        header("Content-type: application/zip");
        header("Content-Disposition: attachment; filename=$arc_name");
        header("Pragma: no-cache");
        header("Expire: 0");
        readfile("$arc_name");
        exit();
    }
}

通常、ZIPアーカイブは/wp-admin/ディレクトリに作成されます。WordPressのバックエンドを実行するため、このディレクトリで一時ファイルを作成および削除したくありません。

ファイルのパスを$arc_nameコードブレークに含めると。$ zip-> filenameの値を確認すると、値が「C:/wamp/www/company/user-upload/temp/Tony_Beroni_000001.zip」から「C:\ wamp \ www \ company\user-」に変更されます。 upload \\ temp\Tony_Beroni_000001.zip"。WAMPとネイティブApacheサーバー(しゃれは意図されていません)の違いが原因で、これが問題になる可能性があると思います。

特定のディレクトリにPHPを使用してZIPアーカイブを作成する方法を知っている人はいますか?

編集:$zip->addFile($txt_name,$txt_path);私はそれが逆にあるべきであるためのパラメータを持っていることに気づきました$zip->addFile($txt_path, $txt_name);

4

2 に答える 2

2

クロスプラットフォーム開発(つまり、WindowsとLinux)を行っている場合。次のようなPHPDIRECTORY_SEPARATOR定数を使用して、常にパスを指定する必要があります。

$full_file_path = DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'to'. DIRECTORY_SEPARATOR . 'file' . DIRECTORY_SEPARATOR . $file_name;

実行中のWebサーバーにそのパスへの書き込み権限がある限り、パスを好きなように定義できます。

于 2012-07-26T15:55:53.883 に答える
0

$ arc_nameは、zipパスをzipopenの最初のパラメーターとして定義する場所です。

于 2012-07-26T16:01:10.757 に答える