これは、CodeIgniter で問題が発生している場所です。私の関数 get_applicable_menu_xml() は、複雑なクエリを実行して結果セットを取得する deal_sorting_counts_deal() を呼び出します。そのセットの num_rows() が返され、後でドロップダウン セレクターを出力する際に使用する XML 文字列を生成するときに使用されます。
何らかの理由でこれが失敗し、ロードが停止しない空白の画面が表示されているように見えます。
しかし、 //print $this->db->last_query(); という行のコメントを外すとさらに奇妙になります。num_rows() を返す直前から、コードは機能します。
そして、はい、すべての種類の「ヘッダー情報を変更できません - ヘッダーは既に送信されています...」というメッセージと使用されている SQL を取得するのは正常ですが、それによりページが読み込まれ、数値がすべて返されます。その場合、ページは読み込まれず、サーバーが応答していないかのように接続に失敗したように見えます。
私の質問:何が原因でそれが起こる可能性がありますか? これをデバッグするのに何日も費やしました。
同様に、これはローカルの WAMP サーバーや、DEV/QA サイトの Rackspace Linux サーバーでは発生しないことに注意してください。これは、ライブ サイトがホストされている Rackspace Linux サーバーでのみ発生します。私は周りを見回しましたが、その独特の動作を説明する可能性のある異なる特定の設定を見つけることができません. しかし、私は Linux サーバーの専門家ではありません。私はただの有能なユーザーです。
ページが十分にロードされていないため、Firebug は役に立ちません。
この奇妙な行動の背後にある理由を説明できる人はいますか? ありがとう、アル・ピエロウェイ
//from my database.php file (but i've played with all these)
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
//the meat of the problem these functions are in
//my models/general_model.php file
function get_applicable_menu_xml($city_sef,$btype_sef,$search_id,$days,$time,$offset,$perpage,$sort_type,$emp_lat,$emp_long,$radius=30,$merchant_list)
{
$xml = "<menu>";
$parent_cats = $this->db->query("SELECT * FROM `business_type` WHERE `btype_parent` = 0");
foreach($parent_cats->result_array() as $parent_cat)
{
$cat_count = $this->deals_sorting_counts_deal($city_sef,$parent_cat['btype_sef'],$search_id,$days,$time,$offset,$perpage,$sort_type,$emp_lat,$emp_long,$radius,$merchant_list);
$sub_cats = $this->db->query("SELECT * FROM `business_type` WHERE `btype_parent` = ".$parent_cat['btype_id']);
if($sub_cats->num_rows()>0) {
$xml .= "<category id='".$parent_cat['btype_id']."' name='".htmlentities($parent_cat['btype_name'], ENT_QUOTES)."' btype-sef='".$parent_cat['btype_sef']."' count='".$cat_count."'>";
foreach($sub_cats->result_array() as $sub_cat)
{
$sub_cat_count = $this->deals_sorting_counts_deal($city_sef,$sub_cat['btype_sef'],$search_id,$days,$time,$offset,$perpage,$sort_type,$emp_lat,$emp_long,$radius,$merchant_list);
$xml .= "<subcategory id='".$sub_cat['btype_id']."' name='".htmlentities($sub_cat['btype_name'], ENT_QUOTES)."' btype-sef='".$sub_cat['btype_sef']."' count='".$sub_cat_count."'></subcategory>";
}
$xml .= "</category>";
}
}
$xml .= "</menu>";
return '<?xml version="1.0" encoding="UTF-8"?>'.$xml;
}
function deals_sorting_counts_deal($city_sef,$btype_sef,$search_id,$days,$time,$offset,$perpage,$sort_type,$emp_lat,$emp_long,$radius=30,$merchant_list)
{
$sql11 = 'SET OPTION SQL_BIG_SELECTS = 1';
$this->db->query($sql11);/**/
$today = substr(date('l',mktime(0,0,0)),0,3);
if ($today=='Mon') { $day_to = 1; }
elseif($today=='Tue') { $day_to = 2; }
elseif($today=='Wed') { $day_to = 3; }
elseif($today=='Thu') { $day_to = 4; }
elseif($today=='Fri') { $day_to = 5; }
elseif($today=='Sat') { $day_to = 6; }
elseif($today=='Sun') { $day_to = 7; }
$string_IN ='';
if($btype_sef!='all') {
$string_IN .= $btype_sef.",";
$next_id = 0;
$this->db->select('btype_id');
$this->db->from('business_type');
$this->db->where('btype_sef',$btype_sef);
$result_id = $this->db->get();
if($result_id->num_rows()>0)
{
$row_id = $result_id->row();
$next_id = $row_id->btype_id;
$this->db->select('btype_sef');
$this->db->from('business_type');
$this->db->where('btype_parent',$next_id);
$result_str = $this->db->get();
if($result_str->num_rows()>0)
{
foreach($result_str->result_array() as $result_s)
{
$btype_sef_shild = $result_s['btype_sef'];
$string_IN .= $btype_sef_shild.",";
}
}
}
$string_IN = substr($string_IN,0,-1);
$IN_ARRAY = explode(',',$string_IN);
}
if($this->session->userdata('emp_lat')!='' and $this->session->userdata('emp_long')!='') {
$fLat = $emp_lat;
$fLon = $emp_long;
}
else {
$fLat = $emp_lat;
$fLon = $emp_long;
}
$this->session->set_userdata('emp_long',$emp_long);
$com_id = $this->session->userdata('comp_id');
$this->db->select('vendor.longitude,vendor.latitude,deals.is_time,deals.deal_img,deals.deal_avilable_custom,vendor.vendor_desc,deals.status_id as check3 ,deal_company.deal_id as deal_id,deal_company.comp_id as cmp, vendor.vendor_image,vendor.vendor_id,vendor.vendor_city_id,vendor.vendor_business_type_id,vendor.vendor_state_id,vendor.vendor_business_name,deals.start_date_time,deals.end_date_time,deals.deal_id,dtype_id,deal_name,deal_detail,deals.terms,deals.status_id,deal_sef,hero_emp_id,hero_comp_id,business_type.btype_name,deal_availabe.available_id');
$this->db->from('deals');
$this->db->join('vendor','vendor.vendor_id=deals.vendor_id');
$this->db->join('business_type','vendor.vendor_business_parent_type_id=business_type.btype_id OR vendor.vendor_business_child_type_id=business_type.btype_id OR vendor.vendor_business_parent_type_id1=business_type.btype_id OR vendor.vendor_business_child_type_id1=business_type.btype_id OR vendor.corporate_parent_category_id=business_type.btype_id OR vendor.corporate_child_category_id=business_type.btype_id' );
$this->db->join('deal_availabe','deal_availabe.deal_id=deals.deal_id');
$this->db->join('deal_company','deal_company.deal_id=deals.deal_id');
$this->db->where('deal_company.comp_id',$com_id);
$this->db->where('vendor.status_id',1);
if ($search_id!='')
{
$term = $this->db->escape_like_str(strip_tags($search_id));
$this->db->where("(deals.deal_name LIKE '%{$term}%' OR vendor.vendor_business_name LIKE '%{$term}%')");
}
if($btype_sef!='all')
{
if($string_IN=='')
{
$this->db->where('business_type.btype_sef',$btype_sef);
}
else
{
$this->db->where_in('business_type.btype_sef', $IN_ARRAY);
}
}
if($days!='all')
{
$this->session->set_userdata('day_check',$days);
$this->db->where('deal_availabe.available_id',$days);
}
else
{
$this->session->set_userdata('day_check','');
}
if($time!='all')
{
$this->db->where('deal_timeofday.tod_id',$time);
}
if($city_sef!='' && $city_sef!='all')
{
$names = array(0, $city_sef);
}
else
{
$names = array(0, 1);
}
$this->db->where('deals.status_id',1);
$date_starting = time();
$this->db->where('end_date_time >=', $date_starting);
$this->db->where('start_date_time <=', $date_starting);
$this->db->group_by('deals.deal_id');
$this->db->order_by('deals.is_feature','asc');
$this->db->limit($perpage,$offset);
$result = $this->db->get() or die("huh");
//print $this->db->last_query();
return $result->num_rows();
}