PHP文件\u获取\u内容无法在windows上读取zip

PHP文件\u获取\u内容无法在windows上读取zip,php,permissions,Php,Permissions,我到处寻找解决这个问题的办法,但我找不到 我正在做如下的事情: $data = file_get_contents('zip://../files/' . $this->_file->getHash() . '.zip#' . $stat['name']); 具体错误是: failed to open stream: operation failed 它在我使用的Linux机器上工作,但我正试图让项目在Windows机器上运行。我知道zip文件的路径是正确的,并且是可读的,因为在

我到处寻找解决这个问题的办法,但我找不到

我正在做如下的事情:

$data = file_get_contents('zip://../files/' . $this->_file->getHash() . '.zip#' . $stat['name']);
具体错误是:

failed to open stream: operation failed
它在我使用的Linux机器上工作,但我正试图让项目在Windows机器上运行。我知道zip文件的路径是正确的,并且是可读的,因为在上面代码段所在的代码中,我使用ZipArchive类读取它,如下所示:

$this->_za = new ZipArchive();
$res = $this->_za->open('../files/' . $file->getHash() . '.zip');
这很好用

为什么文件无法从zip中读取内容?我必须对文件目录做些什么吗?我不太擅长Windows上的文件夹和权限

编辑:为了确保我的代码没有问题,我设置了一个非常简单的测试脚本,在完全相同的目录中有一个zip文件:

<?php

$za = new ZipArchive();
$res = $za->open('myZip.zip');

for($i=0; $i<$za->numFiles; $i++)
{
    $stat = $za->statIndex($i);
    $data = file_get_contents('zip://myZip.zip#' . $stat['name']);

    echo $stat['name'];
    echo $data;
}

不确定您将文件存储在何处,但PHP上的此错误可能与您的问题有关

不确定您将文件存储在何处,但PHP上的此错误可能与您的问题有关

在Linux上,zip包装器需要使用PHP编译,以便使用似乎适合您的
zip://


在Windows上,您需要在
php.ini
内部启用
php\u zip.dll
才能使用它,并且可能需要安装一个PECL扩展(不确定)。

在Linux上,zip包装需要用php编译,才能使用
zip://
,这似乎适合您


在Windows上,您需要在
php.ini
内部启用
php\u zip.dll
才能使用它,并且可能需要安装一个PECL扩展(不确定)。

修复相当简单。而不是:

$data = file_get_contents('zip://myZip.zip#' . $stat['name']);
如果我这样做:

$data = file_get_contents('zip://' . realpath('myZip.zip') . '#' . $stat['name']);

它可以工作。

修复相当简单。而不是:

$data = file_get_contents('zip://myZip.zip#' . $stat['name']);
如果我这样做:

$data = file_get_contents('zip://' . realpath('myZip.zip') . '#' . $stat['name']);

它是有效的。

我使用的是PHP5.5,我的理解是它是用php编译的,但我会尝试一下dll。根据这一点,zlib是在Windows上内置的:检查phpinfo()的输出显示zip已启用并注册为流。事实并非如此。我使用的是PHP5.5,我的理解是,它是用php编译的,但我会尝试一下dll。根据这一点,zlib是在Windows上内置的:检查phpinfo()的输出会显示zip已启用并注册为流。所以不是这样。