我的服务器有以下问题,有很多变量在起作用。所以这就是发生的事情。当我在 fedora 的桌面上使用 zend 开发一个小型 web 应用程序时,一切都运行良好。然后我将应用程序传输到 Dreamhost 上的服务器,一切正常。
所以问题出现在需要中国服务器的客户端上,因为他们位于强大的防火墙后面,他们希望更快地传输文件。他们有巨大的文件,大约 3.4 GB。所以他们给了我windows 2003机器虚拟机,他们不能把它换成linux,那就是一切都在螺旋式下降的时候。
基本上,我的应用程序在 documentroot 之外有一个文件夹,所有文件都将通过 ftp 上传。我的应用程序读取文件,只允许登录用户下载文件。
这是我的插件 - 控制器
<?php
class Mapache_Controller_Plugin_AssetGrabber
extends Zend_Controller_Plugin_Abstract
{
public function dispatchLoopStartup (Zend_Controller_Request_Abstract $request)
{
if ($request->getControllerName() != 'assets')
return;
$auth = Zend_Auth::getInstance();
if (!$auth->hasIdentity())
throw new Exception('Not authenticated!');
//$file = APPLICATION_PATH . '/../assets/' . $request->getActionName();
$file = APPLICATION_PATH . '/..' . $_SERVER['REQUEST_URI'];
$file = str_replace("_", " ", $file);
// echo $file;
if (file_exists($file)) {
header("Content-type: ".$this->new_mime_content_type($file));
header('Content-disposition: attachment;');
//header('Content-type: '.$this->new_mime_content_type($file));
//readfile('$file');
echo file_get_contents($file);
}
}
function new_mime_content_type($filename){
$result = new finfo();
if (is_resource($result) === true){
return $result->file($filename, FILEINFO_MIME_TYPE);
}
return false;
}
}
我为它在 Windows 上工作所做的唯一更改是添加 $file="d:/"。$_SERVER['REQUEST_URI'];,所以它知道在服务器的 D: 驱动器上查找。
所以基本上我有另一个 php 文件,它执行 scandir 并列出所有文件和目录并创建指向 URL/assets/folder/file 的链接,即使有大文件,它也可以在我的测试服务器上正常工作。但是当我尝试从 Windows 服务器下载 200 mb 的 zip 文件时,我得到一个 228 或 229 字节的损坏的 zip 文件,就像标题一样。
服务器安装了 zend 的 xammp,我快疯了。
迁移回我的 Dreamhost 服务器需要几天时间,我在服务器上安装了一个 rsync 客户端并开始复制文件,但在最后 4 个中它只有 400mb 的副本,所以我的 30 Gb 数据需要几天时间。
当我使用 rdesktop 登录服务器并尝试下载文件时,我仍然得到 228 字节的文件,而不是 200mb 甚至 3.4Gb。它有 Windows 2003。
我是否必须在 apache 服务器上配置一些东西,在 httpd.conf 或 php.ini 上配置一些东西?