codeigniter — загрузка файла PHP — файлы не читаются из / tmp / в производстве, но они находятся в localhost

Я застрял на том, что, вероятно, проблема с правами доступа к файлам. Я потратил 10 часов прямо на это, и я почти сдался, потому что я буквально понятия не имею, как это исправить. Мой скрипт отлично работает и на localhost.

У меня есть следующий код как часть сценария загрузки файла в контроллере в моем приложении CodeIgniter:

$this->load->library('image_lib');

$config['upload_path'] = '/tmp/';
$this->load->library('upload', $config);
$this->upload->do_upload("selected_file");

// Variables used later when resizing an image
$originalPostImageFileUploadPath        = $this->upload->data()['full_path'];
$originalPostImageFileUploadFilePath    = $this->upload->data()['file_path'];
$originalPostImageFileRawName           = $this->upload->data()['raw_name'];
$originalPostImageFileExt               = $this->upload->data()['file_ext'];
$originalPostImageFileUniqId            = uniqid();print_r($this->upload->data());
echo file_get_contents($originalPostImageFileUploadPath);

Вот вывод, который я получаю, когда загружаю файл:

Array
(
[file_name] => fosters.jpg
[file_type] => image/jpeg
[file_path] => /tmp/
[full_path] => /tmp/fosters.jpg
[raw_name] => fosters
[orig_name] =>
[client_name] => fosters.jpg
[file_ext] => .jpg
[file_size] => 49408
[is_image] => 1
[image_width] =>
[image_height] =>
[image_type] =>
[image_size_str] =>
)
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  file_get_contents(/private/tmp/fosters.jpg): failed to open stream: No such file or directory</p>
<p>Filename: ajax/product.php</p>
<p>Line Number: 45</p>

Как видите, скрипт правильно загружает файл, но file_get_contents () завершается ошибкой, потому что не может найти файл.

Что я пробовал:

Создание сценария со следующим кодом, чтобы увидеть, имеет ли www-данные достаточные разрешения:

echo (is_writable('/tmp/') ? "yes" : "no");
echo (is_readable('/tmp/') ? "yes" : "no");

Оба вышеприведенных выхода возвращают «да» (true)

Изменение chmod в каталоге / tmp /:
chmod 777 /private/tmp/ (так плохо, как это)

изменения upload_max_filesize в 128M (файл не близко к этому размеру)

Я даже попытался выполнить следующую команду, чтобы увидеть, загружается ли файл в каталог / tmp /. Кажется, что это так, но он удаляется в одно мгновение (менее чем за 0,1 секунды).

watch --interval=0.1 ls

Что еще я могу попробовать? whoami возвращается www-dataтак что я прав, говоря что-то вроде chown wwww-data /tmp/ должен решить проблему? Помогите

0

Решение

Обычно загружаемые файлы POST через PHP отправляются во временную папку / папку / файл и удаляются, если вы не используете рекомендуемые функции, которые включают в себя: move_uploaded_file() например мой массив POSTed имеет:

name
size
type
tmp_name

Я использую что-то вроде этого:

$fileName=$_FILES["resume"]["name"];
$fileSize=$_FILES["resume"]["size"];
$fileType=$_FILES["resume"]["type"];
$fileTmpName=$_FILES["resume"]["tmp_name"];
$targetFile="/srv/www/uploads/".$fileName;  // Where-ever you want your file to be, you can delete manually later on in the script

/* various checking of size and type etc */

if(!is_uploaded_file($fileTmpName)) {
echo "Couldn't upload file";
die(0);
}
if(!move_uploaded_file($fileTmpName,$targetFile)) {
echo "Couldn't move file";
die(0);
}

/* now target file exists and stays put */
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]