2015-01-16 2 views
0

Я пытаюсь экспортировать список контактов с указанным набором полей из Codeigniter. PHP выходит рано, и я не могу понять, почему. Он экспортирует 4 092 контакта, а затем выходит, но количество экспортируемого массива составляет 140 699. PHP не дает мне никаких ошибок, и на моем тестовом сервере функция экспорта работает нормально. Вот код:PHP выходит из-за экспорта csv

function admin_export() 
{ 
    set_time_limit(0); 

    if(!$this->ion_auth->in_group(array('admin')) && !$this->input->is_cli_request()) 
     die(); 


    $contacts = $this->contacts_model->get_contacts(); 
    $export_fields = unserialize($this->contacts_model->get_contact_export_fields()); 

    if(!file_exists($this->config->item('tmp_path'))) 
      mkdir($this->config->item('tmp_path')); 

    if($export_fields == false) 
    { 
     echo json_encode(false); 
    } 
    else 
    { 
     $fh = fopen($this->config->item('tmp_path').'export.csv', 'w'); 

     fputcsv($fh, $export_fields, ','); 

     foreach($contacts as $i => $contact) 
     { 
      $id = $contact['id']; 

      foreach($contact as $k => $v) 
      { 
       if(!in_array($k, $export_fields)) 
       { 
        unset($contacts[$i][$k]); 
       } 
      } 

      if(in_array('role', $export_fields)) 
      { 
       $contacts[$i]['role'] = ''; 

       $roles = $this->contacts_model->get_contact_roles($id); 
       foreach($roles as $role) 
       { 
        $contacts[$i]['role'] .= $role['role'].';'; 
       } 

       $contacts[$i]['role'] = rtrim($contacts[$i]['role'], ';'); 
      } 

      if(in_array('role_id', $export_fields)) 
      { 
       $contacts[$i]['role_id'] = ''; 

       $role_ids = $this->contacts_model->get_contact_roles($id); 
       foreach($role_ids as $role_id) 
       { 
        $contacts[$i]['role_id'] .= $role_id['id'].';'; 
       } 

       $contacts[$i]['role_id'] = rtrim($contacts[$i]['role_id'], ';'); 
      } 

      fputcsv($fh, $contacts[$i], ','); 
     } 
     fclose($fh); 

     echo json_encode(true); 
    } 
} 
+1

Как насчет времени выполнения? – ITroubs

+0

Я думал set_time_limit (0); дал php бесконечное время выполнения – user2325753

+0

см. здесь: http://stackoverflow.com/questions/11999678/php-timeout-set-time-limit0-dont-work – ITroubs

ответ

1

А как насчет памяти? Возможно, что он максимизирует выделенную память и останавливается.