我正在从服务器收集大量文件并使用PHP生成ziparchive。一切顺利,直到我下载zip存档并尝试打开文件。读者抛出异常“不支持文件类型纯文本文档(text / plain)”。文件名称正确(c102.pdf)。我认为该文件的mime类型搞砸了一些如何,但我不太确定。
php version 5.4.37
我应该注意到我在本地使用ubuntu 14.04并且我的阅读器是默认的文档查看器,但是,它确实在上传之前正确读取了文件。
跟进 - 这可能是权限问题吗? “downloads”目录设置为777,而在其中创建的新zip文件为644.就好像“空白”文件放在zip存档中一样(zip的总大小为1.6k,至少应该是几百)。
另一个跟进 - 以下的帖子讨论了chmod问题 PHP: generated zip has chmod 644和how to set permission 777 to a zip file?。 chmod()方法对我不起作用 - chmod()无法在服务器上执行(我修改了下面的代码)。我们将看到有哪些技术支持。
在这种情况下回答.....
与客户支持人员交谈后 - 之所以没有这样做是因为我在共享主机帐户上。 chmod()函数受到限制,否则应该起作用。
我的传奇继续...... 我现在在EC2实例上有一个LAMP堆栈,就在我认为我是老板的时候 - 我仍然处于相同的绑定状态。我的程序在正确的目录中生成一个zip文件 - 包含所有相应的文件名 - 但文件为空。我仍然认为这是一个所有权/权限问题。所以,一些跟进问题......
Web服务器上的文件夹归“Ubuntu”所有,但新创建的文件归“www-data”所有。那么,谁是“www-data”?是Apache还是PHP? PHP也是Apache吗?为什么我不能chmod()创建后的文件,所以他们不是644? zip的文件状态是否为644我无法写入的原因?我可以强制在目录中新创建的文件具有不同的所有权或特定的权限集吗?
if (isset($_GET['getzip'])) {
$issuedsetid = $_GET['getzip'];
$time = mktime();
$sql = "SELECT * FROM issuedsets WHERE id=$issuedsetid";
if ($result = $mysqli->query($sql)) {
while($row = $result->fetch_assoc()) {
$packid = $row['packid'];
$sheets = $row['sheets'];
$sheets = explode(",",$sheets);
}
}
$sql = "SELECT * FROM pname WHERE id=$packid";
if ($result = $mysqli->query($sql)) {
while($row = $result->fetch_assoc()) {
$packname = $row['name'];
}
}
// create the zip file
$path = "/home/marekfalkowski/public_html/index/downloads/".$packname."_" . $time . ".zip";
$zip = new ZipArchive();
// Open a new zip file
$zip->open($path, ZipArchive::CREATE);
if (chmod($path,0777)){
echo "chmod succesful";
} else {
echo "not succesful";
}
foreach($sheets as $sheet){
// the saved file name as it exists on the server...
$file = $sheet.".pdf";
// the new name of the file...
$sql = "SELECT * FROM files WHERE id=$sheet";
if ($result = $mysqli->query($sql)) {
while($row = $result->fetch_assoc()) {
$filename = $row['number']."-".$row['name'].".pdf";
}
}
// add the files
if (file_exists("/home/marekfalkowski/public_html/index/uploads/".$file)) {
$zip->addFile("/home/marekfalkowski/public_html/index/uploads/".$files, $filename);
} else {
echo "not there";
}
}
$zip->close();
}
答案 0 :(得分:0)
尝试更改此内容......
Socialite
对此你这个白痴!!!!
$zip->addFile("/home/marekfalkowski/public_html/index/uploads/".$files, $filename);
这是多么浪费时间。它现在有效。