私はCodeIgniter 2.0.2で簡単なファイルアップローダを作成しています。以下のコードを貼り付けます。 より下の特定の条件このアップロード中にブラウザがハングし、ブラウザのステータスバーに「localhostを待っています」と表示されます(FFとChromeの同じ動作)。 ファイルがWindowsの一時フォルダ(完全なファイル)にアップロードされていることを確認しましたが、その後にプロセスが停止します。 バグの条件はファイルサイズであるようです。しかし、私のphp.iniにはファイルをアップロードするためのすべての設定が用意されていますが、700kファイルでもハングアップします。 このバグは、Ubuntuボックスではなく、Windows 7 Apacheで実行した場合にのみ発生します。 php.iniのいくつかのパスが正しく設定されていない可能性があります。 エラーがスローされないため、Apacheログファイルはあまり役に立ちませんでした。 私はChromeデベロッパーパネルを使ってデバッグしようとしましたが、何も役に立たなかった。 現在、XDebugを動作させようとしていますが、エラーがスローされず、プロセスが完了しないため、私の期待は低いです。 このバグをトレースする方法の提案はありますか? 表示したい特定のphp.ini設定がある場合は、私に知らせてください。大きなダンプをしたくないです。アップロード中にブラウザハングをデバッグする方法
コントローラー:
function do_upload_sql(){
// create directory
if (! is_dir(BACKUP_DIR)) {
mkdir(BACKUP_DIR, 0777);
}
// or if it exists and has restricted file permissions, change them
elseif(fileperms(BACKUP_DIR)!=0777){
chmod(BACKUP_DIR, 0777);
}
$config['upload_path'] = BACKUP_DIR;
$config['allowed_types'] = 'backup'; // an SQL backup file type
$config['overwrite'] = TRUE;
$this->load->library('upload', $config);
if (! $this->upload->do_upload()) // this is the native CI function, probably where the problem is. I can provide some of that code if anyone wants.
{
$data['action'] = 'c_backup_restore/do_upload_sql';
$tab_error = array('error' => $this->upload->display_errors());
$data['error'] = $tab_error['error'];
$this->load->view('common/header');
$this->load->view('v_upload_sql', $data);
}
else
{
echo "success"; // yes it's getting here, but i get no file!
$data = array('upload_data' => $this->upload->data());
$file_upload = $data["upload_data"];
$this->restore_backup($file_upload); // go do something useful with the file
}
}
ビュー:あなたのエラーはWindows上でのみ発生する場合は
<p>Select the backup file</p>
<div class="not_success"><?php echo $error;?></div>
<?php echo form_open_multipart($action);?>
<input type="file" name="userfile" size="30" />
<input type="submit" value="Upload" />
</form>
おそらく '$ this-> restore_backup($ file_upload)'がハングするのでしょうか?この行をコメントして何が起こるかを見てください。 –
xdebugは記録のためだけにスクリプトが実行されるときにプロファイリングデータを書き込むので、スクリプト自体が終了しなくても見ることができます。 – Mahn
私はxdebugプロファイリングがあり、結果をwinCacheGrindにロードしました。今度はプロファイリングを解釈する... –