Папка назначения загрузки не доступна для записи.(Codeigniter) - PullRequest
1 голос
/ 24 апреля 2011

У меня есть два сценария загрузки, которые выполняют очень похожие функции только с разными каталогами.

function town_upload() {


        //Do not create a thumbnail
        $create_thumb = false;

        //Create the path for the upload
        $path = './public/uploads/towns/' . $this->uri->segment(3);

        $config['upload_path'] = $path;
        $config['allowed_types'] = 'jpg';
        $config['max_size'] = '2048';
        $config['max_width'] = '1024';
        $config['max_height'] = '768';
        $config['remove_spaces'] = TRUE;
        $config['overwrite'] = $this->image_upload_overwrite;

        if ($this->input->post('image_type') == 'main_image') {
            $config['file_name'] = 'main.jpg';
            $create_thumb = true;
        } 

        $this->load->library('upload', $config);

        if (!$this->upload->do_upload()) {

            $this->session->set_flashdata('upload_error', array('error' => $this->upload->display_errors()));

        } else {

            //sucess so now we create the thumbnail
            $this->session->set_flashdata('upload_success', $this->upload->data());

Пример: если бы у меня был город с идентификатором 6, каталог загрузки был бы public / uploads / towns/ 6.Это прекрасно работает, так как каталог создается при создании города.У меня почти такая же функция для отелей, за исключением пути public / uploads / hotels / [ID].Я установил разрешения на 777, просто чтобы удалить это из уравнения на данный момент.

Я не могу понять это, так как они очень похожи.Вот код загрузки отеля:

 function hotel_upload() {

        //Create the path for the upload
        $path = './public/uploads/hotels/' . $this->uri->segment(3);

        chmod($path, 0777);

        $config['upload_path'] = $path;
        $config['allowed_types'] = 'jpg';
        $config['max_size'] = '2048'; //kilobytes (2048 = 2mb)
        $config['max_width'] = '1024';
        $config['max_height'] = '768';
        $config['remove_spaces'] = TRUE;
        $config['overwrite'] = TRUE;

        if ($this->input->post('image_type') == 'main_image') {
            $config['file_name'] = 'main.jpg';
        }

        $this->load->library('upload', $config);

        if (!$this->upload->do_upload()) {

            $this->session->set_flashdata('upload_error', array('error' => $this->upload->display_errors() . ' <br/>Path: ' . $path . '<br/>Image Type: ' . $this->input->post('image_type')));

        } else {

            //sucess so now we create the thumbnail
            $this->session->set_flashdata('upload_success', $this->upload->data());

Функция отеля выдаёт мне сообщение об ошибке «Папка назначения загрузки не доступна для записи».

Вот страницы HTML-форм:

ГОРОД:

<?php echo form_open_multipart('admin/town_upload/' . $this->uri->segment(3));?>

            <input type="file" name="userfile" size="20" />

            <br /><br />

            <p>
                <input type="radio" name="image_type" checked="checked" class="radio" value="main_image" /> <label>Main Image</label>
                <input type="radio" name="image_type" class="radio" value="other_image" /> <label>Other Image</label>
            </p>

            <input type="submit" class="submit short" value="upload" />

        <?php echo form_close(); ?> 

ОТЕЛЬ:

<?php echo form_open_multipart('admin/hotel_upload/' . $this->uri->segment(3));?>

            <input type="file" name="userfile" size="20" />

            <br /><br />

            <p>
                <input type="radio" name="image_type" checked="checked" class="radio" value="main_image" /> <label>Main Image (shown when visitors search the website)</label>
                <input type="radio" name="image_type" class="radio" value="other_image" /> <label>Standard Image</label>
            </p>

            <input type="submit" class="submit short" value="upload" />

        <?php echo form_close(); ?> 

Заранее спасибо!Работаю над этим часами ..: (

Ответы [ 3 ]

2 голосов
/ 08 мая 2011

Я просто столкнулся с той же проблемой и нашел возможную причину такого поведения. В моем случае я создал каталог загрузки некоторое время назад. Я обновил php, который вставил новый файл php.ini с safe_mod = On.. И теперь, когда я заново создал каталог после его удаления, новые параметры php выдвинули это сообщение об ошибке.

Возможно ли, что вы создали дерево каталогов города перед обновлением PHP, а потом дерево каталогов отеля?

2 голосов
/ 24 апреля 2011

Ваш код не проверяет, работает ли chmod. Например, по умолчанию apache любит запускаться как собственный пользователь или никто, а не вы как пользователь. Таким образом, chmod в вашем файле может найти пользователя, который в данный момент работает, так как не владеет файлом, поэтому chmod завершается ошибкой.

Первое, что я хотел бы проверить, было бы то, что пользователь PHP считает, что он работает как, и владелец файла.

Существует функция is_writable, вы можете проверить, что каталог доступен для записи.

0 голосов
/ 01 марта 2013

Хорошо, только что вернулся к этому. Я думаю, что разрешения где-то испортились, я уничтожил и заново создал папку, и она, похоже, работала.

...