サーバーには次の問題があります。多くの変数が関係しています。これが起こったことです。Fedora のデスクトップで zend を使用して小さな Web アプリケーションを開発したとき、すべてが完璧に機能していました。次に、アプリをdreamhostのサーバーに転送すると、すべて正常に機能しました。
そのため、中国にサーバーが必要なクライアントに問題が生じます。彼らは強力なファイアウォールの背後にあり、ファイルをより高速に転送したかったからです。約 3.4 GB の巨大なファイルがありました。彼らは私に Windows 2003 マシンの仮想マシンをくれましたが、それを Linux に変更することはできませんでした。
基本的に、私のアプリにはドキュメントルートの外にフォルダーがあり、そこにすべてのファイルが 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: ドライブを参照することがわかっています。
したがって、基本的には、scandir を実行し、すべてのファイルとディレクトリをリストし、URL/assets/folder/file へのリンクを作成する別の php ファイルがあります。大きなファイルでもテスト サーバーで正常に動作します。しかし、Windows サーバーから 200 MB の zip ファイルをダウンロードしようとすると、ヘッダーと同様に 228 または 229 バイトの破損した zip ファイルが取得されます。
サーバーには zend がインストールされた xammp があります。
ドリームホスト サーバーへの移行には数日かかります。サーバーに rsync クライアントをインストールし、ファイルのコピーを開始しましたが、最後の 4 つは 400 MB しかコピーされないため、30 Gb のデータには数日かかります。
rdesktop を使用してサーバーにログオンし、ファイルをダウンロードしようとすると、200MB または 3.4Gb ではなく、228 バイトのファイルが表示されます。Windows 2003 があり
ます。Apache サーバー、httpd.conf、または php.ini で何かを構成する必要がありますか?