Все опубликованные файлы будут входить в переменную $ _FILES, для использования библиотеки загрузки codeigniter нам нужно указать имя поля, которое мы используем для загрузки (по умолчанию это будет 'userfile'), поэтому мы получаем все опубликованные файлы и создаем другой массив файлов, который создает наше собственное имя для каждого файла и присваивает это имя функции doignup библиотеки библиотеки codeigniter.
if(!empty( Все опубликованные файлы будут входить в переменную $ _FILES, для использования библиотеки загрузки codeigniter нам нужно указать имя поля, которое мы используем для загрузки (по умолчанию это будет 'userfile'), поэтому мы получаем все опубликованные файлы и создаем другой массив файлов, который создает наше собственное имя для каждого файла и присваивает это имя функции doignup библиотеки библиотеки codeigniter.
[110]FILES)){
$j = 1;
foreach( Все опубликованные файлы будут входить в переменную $ _FILES, для использования библиотеки загрузки codeigniter нам нужно указать имя поля, которое мы используем для загрузки (по умолчанию это будет 'userfile'), поэтому мы получаем все опубликованные файлы и создаем другой массив файлов, который создает наше собственное имя для каждого файла и присваивает это имя функции doignup библиотеки библиотеки codeigniter.
[110]FILES as $filekey=>$fileattachments){
foreach($fileattachments as $key=>$val){
if(is_array($val)){
$i = 1;
foreach($val as $v){
$field_name = "multiple_".$filekey."_".$i;
Все опубликованные файлы будут входить в переменную $ _FILES, для использования библиотеки загрузки codeigniter нам нужно указать имя поля, которое мы используем для загрузки (по умолчанию это будет 'userfile'), поэтому мы получаем все опубликованные файлы и создаем другой массив файлов, который создает наше собственное имя для каждого файла и присваивает это имя функции doignup библиотеки библиотеки codeigniter.
[110]FILES[$field_name][$key] = $v;
$i++;
}
}else{
$field_name = "single_".$filekey."_".$j;
Все опубликованные файлы будут входить в переменную $ _FILES, для использования библиотеки загрузки codeigniter нам нужно указать имя поля, которое мы используем для загрузки (по умолчанию это будет 'userfile'), поэтому мы получаем все опубликованные файлы и создаем другой массив файлов, который создает наше собственное имя для каждого файла и присваивает это имя функции doignup библиотеки библиотеки codeigniter.
[110]FILES[$field_name] = $fileattachments;
$j++;
break;
}
}
// Unset the useless one
unset( Все опубликованные файлы будут входить в переменную $ _FILES, для использования библиотеки загрузки codeigniter нам нужно указать имя поля, которое мы используем для загрузки (по умолчанию это будет 'userfile'), поэтому мы получаем все опубликованные файлы и создаем другой массив файлов, который создает наше собственное имя для каждого файла и присваивает это имя функции doignup библиотеки библиотеки codeigniter.
[110]FILES[$filekey]);
}
foreach( Все опубликованные файлы будут входить в переменную $ _FILES, для использования библиотеки загрузки codeigniter нам нужно указать имя поля, которое мы используем для загрузки (по умолчанию это будет 'userfile'), поэтому мы получаем все опубликованные файлы и создаем другой массив файлов, который создает наше собственное имя для каждого файла и присваивает это имя функции doignup библиотеки библиотеки codeigniter.
[110]FILES as $field_name => $file){
if(isset($file['error']) && $file['error']==0){
$config['upload_path'] = [upload_path];
$config['allowed_types'] = [allowed_types];
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
$this->upload->initialize($config);
if ( ! $this->upload->do_upload($field_name)){
$error = array('error' => $this->upload->display_errors());
echo "Error Message : ". $error['error'];
}else{
$data = $this->upload->data();
echo "Uploaded FileName : ".$data['file_name'];
// Code for insert into database
}
}
}
}
Вы можете прослушивать несколько файловых дескрипторов без использования нескольких потоков, используя системный вызов select (2)
. Вы можете использовать pthread_cond_timedwait
для ожидания переменной условия с тайм-аутом, так что вы не ждете больше определенного количества времени.
Я думаю, что очень необычно хотеть одновременно ждать любой из них. переменная условия или какой-либо дескриптор файла - если вы абсолютно уверены в том, что хотите сделать, вам придется использовать несколько потоков, причем один поток будет вызывать либо pthread_cond_wait
/ ] pthread_cond_timedwait
, а другой поток, вызывающий select
или какую-либо другую функцию ввода-вывода.
Нет необходимости в отдельных потоках, ожидающих accept (2)
и stdin
- используйте здесь poll / select
. Вместо условной переменной создайте канал между потоками (потоки у вас уже есть, если мы говорим о CV), дождитесь его в том же опросе
и напишите в него, когда произойдет событие.
Определенно кажется, что эти три различных варианта обмена сообщениями являются взаимоисключающими для одного потока; как один поток может читать из stdin, пока он ожидает условия потока?
Если вы действительно не хотите создавать три потока, единственный вариант, который я могу понять, - это как-то изменить или параметризовать библиотеки потока, потока и сокета для получения ссылки на объект синхронизации.