php 创建 zip 文件(来自 post 附件 wordpress)

Posted

技术标签:

【中文标题】php 创建 zip 文件(来自 post 附件 wordpress)【英文标题】:Php create zip file (from post attachments wordpress) 【发布时间】:2012-03-28 11:19:46 【问题描述】:

我正在尝试从 wordpress 中的帖子附件创建一个 zip 文件。

我已经尝试了以下两种方法 - 但它没有任何结果(没有错误消息,没有创建文件) - 我做错了什么(再次......)

我不认为那些是 wordpress 中的帖子附件的事实与它有任何关系 - 因为这些方法对于普通文件也失败了。为什么? --> 看看答案。

$files_to_zip = array();// create files array
    //run a query
    $post_id = get_the_id();
    $args = array(
        'post_type' => 'attachment',
        'numberposts' => null,
        'post_status' => null,
        'post_parent' => $post_id
    );

    $attachments = get_posts($args);
    if ($attachments) 
foreach ($attachments as $attachment) 
        $files_to_zip [] = wp_get_attachment_url( $attachment->ID ); // populate files array
        
    
    print_r($files_to_zip);
    $zip = new ZipArchive;
    $zip->open('file.zip', ZipArchive::CREATE);
    foreach ($files_to_zip as $file) 
      $zip->addFile($file);
    
    $zip->close();

还有这个方法:

$files_to_zip = array(); // create array
//run a query
$post_id = get_the_id();
$args = array(
    'post_type' => 'attachment',
    'numberposts' => null,
    'post_status' => null,
    'post_parent' => $post_id
);
$zip = new ZipArchive;
$zip->open('file.zip', ZipArchive::CREATE);
$attachments = get_posts($args);
if ($attachments) 
    foreach ($attachments as $attachment) 
     $zip->addFile(wp_get_attachment_url( $attachment->ID ));
    


print_r($files_to_zip);// debug - return file names OK

$zip->close();

这两种方法都没有返回任何内容.. 任何见解将不胜感激。

EDIT I - 数组 $files_to_zip 的示例 print_r

print_r($files_to_zip);

Array ( 
[0] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-62316IMAG0659.jpg 
[2] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-85520_IGP0255.jpg
[3] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-85520_IZTP0635.jpg
[4] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-85520_ITG035t5.jpg
[5] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-85520_IRTT7375.jpg )

..通过使用 get_attached_file() 它将产生 real 路径(在某些时候我怀疑也许 php 无法通过 HTTP 创建 zip - 这就是简短的答案。请参阅下面的长篇.)

【问题讨论】:

没有称为 create_zip() 的原生 PHP 函数 - 请显示此函数的代码。另外,请显示var_dump($files_to_zip)的结果 查看我对示例数组的编辑。 【参考方案1】:

好的 - 我会在这里回答我自己的问题..

我已经证实了我自己的怀疑 - PHP 在通过 HTTP 传递时无法创建 ZIP - 所以我们需要一个 PATH 而不是 URL ...

因此,例如在 Wordpress 的情况下,需要使用 get_attached_file() 来生成真实路径..

Array ( 
[0] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-62316IMAG0659.jpg 
[2] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-85520_IGP0255.jpg
[3] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-85520_IZTP0635.jpg
[4] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-85520_ITG035t5.jpg
[5] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-85520_IRTT7375.jpg )

(感谢@DaveRandom 对看到 var_dump 数组的评论——我实际上已经看过很多次了,但直到有人特别要求查看它之前我并没有太在意。)

然后它让我想起了很久以前我在 gdlib 中遇到的另一个问题——关于 PHP 流函数、创建文件和 HTTP。 例如像 gdlib 这样的图像库,或者 pdf 动态创建它们都在 HTTP 上失败。

【讨论】:

以上是关于php 创建 zip 文件(来自 post 附件 wordpress)的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 发送带附件的电子邮件不显示邮件内容

通过邮件 mime php 来自附件的文件名

php curl get 下载远程zip文件保存在本地例子

来自表单的 WP 邮件附件,没有在文件管理器上上传文件

使用 ruby​​zip 在嵌套模型中下载回形针附件

从 php 网站解码附件 url