PHP ziparchive无法打开PPSX扩展名(失败,代码:9)

时间:2018-09-17 16:44:24

标签: php powerpoint slideshow openxml ziparchive

处理来自PPTX扩展名的文本可以完美地工作,但是如果PP S X位于相同的URL(相同的服务器和权限)上,则代码将引发代码:9错误(ER_NOENT)。有人可以帮助确定为什么PPTX和PPSX都是相同的openXML标准,但为什么区别对待?如何从PPSX文件中提取文本?

作为参考,MIME类型为:application / vnd.openxmlformats-officedocument.presentationml.slideshow

<?php   

if(isset($_POST['processFile']) && isset($_FILES["file"]["tmp_name"]))
{
    $fileText = ppsx_to_text($_FILES["file"]["tmp_name"]);
}

function ppsx_to_text( $path_to_file )
{
    $zip_handle = new ZipArchive();
    $response   = '';

    if (true === $zip_handle->open($path_to_file)) // <-- fails to open / recognize PPSX as zip***
    {
        $slide_number = 1; //loop through slide files
        $doc = new DOMDocument();

        while (($xml_index = $zip_handle->locateName('ppt/slides/slide' . $slide_number . '.xml')) !== false) 
        {
            $xml_data   = $zip_handle->getFromIndex($xml_index);

            $doc->loadXML($xml_data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            $response  .= strip_tags($doc->saveXML());

            $slide_number++;
        }
        $zip_handle->close();
    }
    return $response;
}

?>

<form id="content_form" class="the_form" action="" method="post" enctype="multipart/form-data">
   <label for="file">Choose file to upload</label>
   <input type="file" id="file" name="file">
   <button type="submit" value="processFile" name="processFile">Process</button>
   <div><?php echo $fileText;?></div>
</form>

1 个答案:

答案 0 :(得分:1)

如果您有权访问服务器(假设它是Windows),请查看以下设置:

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Configuring_server_MIME_types

您的问题可能与如何根据请求配置和提供mime类型有关。如果是Linux,请查找这些平台特定的设置。如果您无法控制服务器,那么唯一的选择就是访问本地副本或内存副本。