При загрузке изображения в Codeigniter отображается ошибка. Путь загрузки не соответствует действительности. - PullRequest
3 голосов
/ 28 мая 2011
$config['upload_path'] = site_path().'photos/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '2048';
$this->load->library('upload', $config);    
if ( ! $this->upload->do_upload())
{ 
    $this->data['alert'] = $this->upload->display_errors();                     
    $this->load->view('profile/photo', $this->data);
}   
else
{
    $upload_data = $this->upload->data();

    $filename = $upload_data['file_name'];
    $width = $upload_data['image_width'];
    $height = $upload_data['image_height'];
    $config1 = array();
    $this->load->library('image_lib');
    $config1['source_image'] = site_path().'photos/'.$filename;


    $this->remove_existing_file($this->session->userdata('user_id'));
    $this->Profile_model->savephoto('Edit', $filename );
    redirect('/profile/photo');
}

Я получаю эту ошибку:

Неверный путь загрузки.

Ответы [ 10 ]

8 голосов
/ 28 мая 2011

Существует только несколько причин возникновения этой ошибки:

  1. Каталог site_path().'photos/' не существует, попробуйте запустить is_dir(), чтобы убедиться в этом.
  2. каталог существует, но недоступен для записи.Убедитесь, что вы установили соответствующие разрешения для каталога.Попробуйте выполнить is_writable(), чтобы убедиться.
  3. Каталог, который вы хотите использовать, существует, но вы не правильно представили его в библиотеке загрузки.Попробуйте использовать абсолютный путь с конечной косой чертой, аналогично примеру в руководстве пользователя .

Кроме этого, я не могу придумать никакого объяснения.Вот код CI, который проверяет путь (часть класса Upload):

public function validate_upload_path()
{
    if ($this->upload_path == '')
    {
        $this->set_error('upload_no_filepath');
        return FALSE;
    }

    if (function_exists('realpath') AND @realpath($this->upload_path) !== FALSE)
    {
        $this->upload_path = str_replace("\\", "/", realpath($this->upload_path));
    }

    // This is most likely the trigger for your error
    if ( ! @is_dir($this->upload_path))
    {
        $this->set_error('upload_no_filepath');
        return FALSE;
    }

    if ( ! is_really_writable($this->upload_path))
    {
        $this->set_error('upload_not_writable');
        return FALSE;
    }

    $this->upload_path = preg_replace("/(.+?)\/*$/", "\\1/",  $this->upload_path);
    return TRUE;
}

Обновление:

В соответствии с вашими комментариями, попробуйте это вместо этого, и давайте посмотрим, что происходит, прежде чем перейти кследующий шаг отладки:

$config['upload_path'] = './community/photos/';
3 голосов
/ 29 октября 2015
$config['upload_path'] = './photos/';
$config['allowed_types'] = 'gif|jpg|jpeg|png';
$config['max_size'] = '1000';
$config['max_width'] = '1920';
$config['max_height'] = '1280';                     

$this->upload->initialize($config);

напишите этот код в блоке вашего контроллера

эта проблема встречается часто, я знаю, что вы написали этот код в блоке __construct (), но правильный метод - использовать этот код в конкретном контроллере, где вызывается код загрузки.

1 голос
/ 28 июля 2016

Это должно помочь

Если вам нужно автоматически создавать каталоги вроде: ./assets/2016-07-27/ при загрузке файлов, вам придется расширить библиотеку загрузки, чтобы автоматически создавать каталоги, если они не существуют.

Код:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * File Uploading Class Extension
 *
 * @package     CodeIgniter
 * @subpackage  Libraries
 * @category    Uploads
 * @author      Harrison Emmanuel (Eharry.me)
 * @link        https://www.eharry.me/blog/post/my-codeigniter-upload-extension/
 */
class MY_Upload extends CI_Upload {

    /**
     * Validate Upload Path
     *
     * Verifies that it is a valid upload path with proper permissions.
     *
     * @return  bool
     */
    public function validate_upload_path()
    {
        if ($this->upload_path === '')
        {
            $this->set_error('upload_no_filepath', 'error');
            return FALSE;
        }

        if (realpath($this->upload_path) !== FALSE)
        {
            $this->upload_path = str_replace('\\', '/', realpath($this->upload_path));
        }

        if ( ! is_dir($this->upload_path))
        {
            // EDIT: make directory and try again
            if ( ! mkdir ($this->upload_path, 0777, TRUE))
            {
                $this->set_error('upload_no_filepath', 'error');
                return FALSE;
            }
        }

        if ( ! is_really_writable($this->upload_path))
        {
            // EDIT: change directory mode
            if ( ! chmod($this->upload_path, 0777))
            {
                $this->set_error('upload_not_writable', 'error');
                return FALSE;
            }
        }

        $this->upload_path = preg_replace('/(.+?)\/*$/', '\\1/',  $this->upload_path);
        return TRUE;
    }
}


Как использовать:

Просто создайте application/libraries/MY_Upload.php и вставьте в него указанный выше код.Вот и все!


Дополнительная информация:


ПРИМЕЧАНИЕ:

Это расширение совместимо с версиями CodeIgniter 3.x и 2.x.

0 голосов
/ 06 декабря 2017

Попробуйте этот код в вашем контроллере

$config['upload_path'] = 'images'; //name of the uploading folder
$config['allowed_types'] = 'jpeg|png|jpg'; 
$config['file_name'] = 'name_for_file'; 

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

if (!$this->upload->do_upload())
 {
  echo $this->upload->display_errors();
  exit;
 }
else
 {
  $upload_data = $this->upload->data();
 } 
0 голосов
/ 15 июня 2015

Я использую wamp на Windows

$config['upload_path'] = base_url().'./resources/uploads/';

, вообще не работает.

var_dump(is_dir($config['upload_path'])); //return false
var_dump(is_writable($config['upload_path']));  //return false

, но когда я изменяю его на

$config['upload_path'] = './resources/uploads/';   //works fine

, это работаетхорошо.Так что я думаю, что в Windows это не проблема с разрешениями. Это вызвано методом base_url (). Как ни странно, что это так.

0 голосов
/ 04 июня 2015

Я знаю, что на это уже ответили.Даже у меня были трудности с загрузкой файлов.Но в моем случае проблема заключалась в том, что у меня было приложение CodeIgniter в папке вне / var / www и страница индекса в папке www (в основном в качестве меры безопасности).

Папка для загрузки должна находиться впапка / var / www, содержащая файл index.php.Это то, что я должен был сделать.Следующее, что нужно дать 777 разрешений для папки загрузки.

0 голосов
/ 27 июля 2012

Я думаю, что проблему можно решить с помощью

$config['upload_path'] ='./photos/';

вместо

$config['upload_path'] = site_path().'photos/';
0 голосов
/ 04 февраля 2012

Проверьте файл .htaccess, чтобы не блокировать папку приложения Проверка загрузки CHMOD 777 Используйте var_dump (is_dir ('/ photos /')); чтобы увидеть ваш каталог существует! Наконец попробуйте это:

    $config['upload_path'] = 'photos/';
    $config['allowed_types'] = 'gif|jpg|jpeg|png';
    $config['max_size'] = '1000';
    $config['max_width'] = '1920';
    $config['max_height'] = '1280';                     

    $this->upload->initialize($config);
0 голосов
/ 27 ноября 2011

Привет на сервере вы можете подключиться с помощью filezilla и щелкнуть правой кнопкой мыши на папке и изменить атрибуты файла

0 голосов
/ 29 мая 2011

Если вы находитесь в Windows, попробуйте написать в «c: \» и посмотреть, работает ли это.

Также, каков вывод site_path (), например, echo site_path ();?

На xammp я обнаружил, что мне нужно написать c: \ xammp \ htdocs \ myproject \ photos \ вместо того, чтобы просто использовать '\ photos \';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...