Php 文件存在,但收到打开流失败的警告:没有这样的文件或目录
一件奇怪的事情发生了,因为这个代码只工作了15分钟,现在发出警告 (!)警告:复制(myzipx/x/x.pdf):无法打开流:第21行的C:\wamp64\www\zip\u ex\x\zip\u img.php中没有此类文件或目录Php 文件存在,但收到打开流失败的警告:没有这样的文件或目录,php,copy,zip,Php,Copy,Zip,一件奇怪的事情发生了,因为这个代码只工作了15分钟,现在发出警告 (!)警告:复制(myzipx/x/x.pdf):无法打开流:第21行的C:\wamp64\www\zip\u ex\x\zip\u img.php中没有此类文件或目录 但该文件存在,并回显正确的文件名。我不明白是什么问题。。感谢您的帮助 您需要从zip存档中提取 <?php $arch_filename = "myzipx.zip"; $dest_dir = "./dest"; if (!is_dir($dest_dir)
但该文件存在,并回显正确的文件名。我不明白是什么问题。。感谢您的帮助 您需要从zip存档中提取
<?php
$arch_filename = "myzipx.zip";
$dest_dir = "./dest";
if (!is_dir($dest_dir)) {
if (!mkdir($dest_dir, 0755, true))
die("failed to make directory $dest_dir\n");
}
$zip = new ZipArchive;
if (!$zip->open($arch_filename))
die("failed to open $arch_filename");
for ($i = 0; $i < $zip->numFiles; ++$i) {
$path = $zip->getNameIndex($i);
$ext = pathinfo($path, PATHINFO_EXTENSION);
if (!preg_match('/(?:pdf)/i', $ext))
continue;
$dest_basename = pathinfo($path, PATHINFO_BASENAME);
echo $path, PHP_EOL;
copy("$path", "$dest_dir/{$dest_basename}");
}
$zip->close();
?>
for($i=0;$i<$zip->numFiles;++$i){
$path=$zip->getNameIndex($i);
$ext=pathinfo($path,pathinfo_扩展名);
if(预匹配('/pdf/i',$ext)){
$dest\u basename=pathinfo($path,pathinfo\u basename);
echo$path,PHP_EOL;
文件内容($dest/$dest\u basename),$zip->getFromIndex($i))
}
}
您尝试使用copy()
是正确的。
与ZipArchive::extractTo()
(它还提取并创建目标中的子文件夹)不同,方法copy()
只需将指定的文件从存档复制/提取到目标
这个例子应该适用于:
$archive=“testarchive.zip”;
$dest_dir=“/dest”;
如果(!is_dir($dest_dir)){
如果(!mkdir($dest_dir,0755,true))死亡(“未能生成目录$dest_dir\n”);
}
$zip=新的ZipArchive;
如果(!$zip->open($archive))死亡(“未能打开$archive”);
对于($i=0;$i<$zip->numFiles;$i++){
$file\u name=$zip->getNameIndex($i);
$file\u info=pathinfo($file\u name);
$file\u ext=pathinfo($file\u name,pathinfo\u扩展名);
if(preg_match('/pdf/i',$file_ext)){
复制(“zip://”。$archive。”#“$file_name,$dest_dir.//”。$file_info['basename']);
}
}
$zip->close();
测试结构:
for ($i = 0; $i < $zip->numFiles; ++$i) {
$path = $zip->getNameIndex($i);
$ext = pathinfo($path, PATHINFO_EXTENSION);
if (preg_match('/pdf/i', $ext)) {
$dest_basename = pathinfo($path, PATHINFO_BASENAME);
echo $path, PHP_EOL;
file_put_contents("$dest/$dest_basename", $zip->getFromIndex($i))
}
}
然后将文件夹testarchive
压缩为testarchive.zip
运行上述代码后:
xxxxx@xxxxxx:~/Documents$ tree testarchive
testarchive
└── test
└── blubb
└── test.pdf
$path
是ZIP存档中的文件名,而不是计算机上的文件名。我的ZIP文件夹也有子文件夹。。我只想提取文件,而不是使用子文件夹PATHINFO\u BASENAME
只获取文件名,而不使用文件夹。情况有所不同。它以x1.pdf(文件夹不是文件)的形式给出输出,然后在解压的zip文件夹中包含包含文件的子文件夹。它应该将x1.pdf
解压到$dest_dir/x1.pdf
中。否,它将x1.pdf解压为包含整个zip文件夹以及包含文件的子文件夹的文件夹
xxxxx@xxxxxx:~/Documents$ tree dest
dest
└── test.pdf