Я использовал CI 2.2, чтобы сделать простую форму с вложением / загрузкой файла. Все работает нормально, кроме браузера iphone Safari. Когда люди прикрепляют изображение из сафари на iphone, имя файла превращается в image.jpg. Это вызывает проблему, когда вложения от другого человека продолжают показывать одно и то же изображение.
Я использовал шифрование имени файла, предоставленное CI, но все же не повезло.
Вот модель:
функция для получения значения из поля:
function check_field()
{
$ship_date = $this->input->post('date');
$image_data = $this->upload->data();
$field_data = [
'ship_date' => $ship_date,
'ship_boxes' => $this->input->post('boxes'),
'ship_attach' => $image_data['file_name'],
'image_path' => $image_data['file_path'],
'ship_req_fund' => $this->input->post('option'),
'ship_amount_req' => $this->input->post('amount'),
'ship_emp_id' => $this->session->userdata('id')
];
$this->db->insert('shipment', $field_data);
}
функция прикрепления
function attachment()
{
$config['upload_path'] = 'uploads/';
$config['allowed_types'] = 'gif|jpg|png|zip|rar|pdf';
$config['max_size'] = '3000';
$config['max_width'] = '2000';
$config['max_height'] = '2000';
$config['encrypt_name'] = true;
$this->upload->initialize($config);
}
отправка сообщения на электронную почту:
function send_message()
{
$config = [
'protocol' => 'mail',
'smtp_host' => 'ssl://smtp.googlemail.com',
'smtp_port' => 465,
'smtp_user' => '*******@gmail.com',
'smtp_pass' => '*******',
'mailtype' => 'html',
'charset' => 'iso-8859-1',
'wordwrap' => TRUE
];
$image_data = $this->upload->data();
$image_link = $image_data['client_name'];
$message = '<h3>Below is the shipment data you have submitted.</h3>';
$message .= '<p><b>Shipment date</b>: ' . $this->input->post('date') . '</p>';
$message .= '<p><b>Number of boxes</b>: ' . $this->input->post('boxes') . '</p>';
if($this->upload->data())
{
$message .= '<p></b>Attachment</b>: <a href="' . base_url() . 'uploads/' . $image_link . '">Click Here</a></p>';
}
else
{
$message .= '<p></b>Attachment</b>: No attachment</p>';
}
if($this->input->post('option') == 1)
{
$message .= '<p><b>Request fund</b>: Yes</p>';
$message .= '<p><b>Amount of funds requested</b>: $' . $this->input->post('amount') . '</p>';
}
else
{
$message .= '<p><b>Request fund</b>: No</p>';
}
$this->email->initialize($config);
$this->email->set_newline("\r\n");
$this->email->from('*****@gmail.com', '*****');
$this->email->to($this->session->userdata('email'));
$this->email->subject('Shipment detail');
$this->email->message($message);
$this->email->send();
}
}
Кто-нибудь сталкивался с такой же проблемой в прошлом, или я поставил ее неправильно? если это действительно вызвано браузером, любой метод для разрешения загрузки файла в сафари на iphone?
Спасибо,
Создайте UUID для имени. Использование уникального имени клиента не является хорошей практикой.
Я использую эту функцию для той же проблемы, что и у вас —
<?php
get_filename($filename)
{
$fparts= explode(".",$filename);
$extension = $fparts[count($fparts)-1];
unset($fparts[count($fparts)-1]);
$filenamewoextension=implode(".", $fparts);
counter=0;
while(file_exists($filename))
{
$filename = $filenamewoextension . $counter . $extension;
}
return $filename;
}