Фактическое изображение не сохраняется в каталоге

  1. ввод имени пользователя создаст каталог, если ввод имени пользователя john, он создаст john

  2. изображение будет загружено в webroot\img\users\john\uploaded1.jpg

В таблице пользователей было поле назначения.

Он вставит в базу данных правильный путь назначения D:\xampp\htdocs\sample\webroot\img\users\john\uploaded1.jpg

но uploaded1.jpg не добавляется, и предупреждение ниже не может перемещать файл

Предупреждение (2): move_uploaded_file(D:\xampp\htdocs\sample\webroot\img\users\james\uploaded1.jpg): не удалось открыть поток: нет такого файла или каталога [APP/Controller\UsersController.php, строка 584 ] Предупреждение (2): move_uploaded_file() [https://secure.php.net/function.move-uploaded-file'>function.move-uploaded-file]: невозможно переместить 'D:\xampp-for-cakephp3 \tmp\php3FD6.tmp» на «D:\xampp\htdocs\sample\webroot\img\james\uploaded1.jpg» [APP/Controller\UsersController.php, строка 584]

<?php

public function register()
{       
      $user = $this->Users->newEntity();

      $value = $this->request->getData('username');  // holds the username input

      if($this->request->is('post')) {

            $image_name        = $this->request->data['profile_pic']['name'];
            $image_tmp         = $this->request->data['profile_pic']['tmp_name'];


            $destination       = WWW_ROOT.'img'.DS.'users'.DS.$value.DS.$image_name;

            //debug($destination);exit;

              move_uploaded_file($image_tmp, $destination);
              $this->request->data['profile_pic'] = $image_name;
              $this->request->data['destination'] = $destination;


             $user= $this->Users->patchEntity($user,$this->request->getData());
             if($this->Users->save($user)) {

                 $dir = new Folder();

                 $path_data = $dir->create(WWW_ROOT.'img'.DS.'users'.DS.$value,true,0777); 

                 $this->Flash->success(__('User profile successfuly  updated.'));

                return $this->redirect(['action' => 'login']);
          } else {
            $this->Flash->error(__('The user could not be saved. Please, try again.'));
        }
        }

        $this->set(compact('user'));
        $this->set('_serialize', ['user']);
    } 
?>

person Jervyn Paller    schedule 17.02.2018    source источник
comment
Вы спасли самозванца, а не настоящего? Извините, я должен был спросить.   -  person ArtisticPhoenix    schedule 17.02.2018
comment
что ты имеешь в виду тмп?   -  person Jervyn Paller    schedule 17.02.2018
comment
Это была шутка, извините, в любом случае, существует ли эта папка и доступна ли она для записи img\james Я не использую Cake, но это может быть очень легко проблема с правами доступа к файлу, или, по крайней мере, это моя мысль. Это в значительной степени говорит о том, что прямо здесь failed to open stream: No such file or directory ака убедитесь, что вы не использовали root для его создания, я действительно сделал что-то подобное сегодня на сайте WordPress ... лол   -  person ArtisticPhoenix    schedule 17.02.2018


Ответы (1)


Эта ошибка связана с тем, что папка не существует, поэтому, чтобы преодолеть эту ошибку, вы должны сначала создать папку, используя ВВОД ПОЛЬЗОВАТЕЛЯ.

Рассмотрим ваш пример, пользовательский ввод - Джон

$value = $this->request->getData('username');    //User input
$image_name = $this->request->data['profile_pic']['name'];
$image_tmp = $this->request->data['profile_pic']['tmp_name'];


$user_input_folder = WWW_ROOT.'img'.DS.'users'.DS.$value.DS;
$destination = $user_input_folder.$image_name;

if (!file_exists($user_input_folder)) {   //Checks file or folder exist or not


    if(mkdir($filePath, 0777, true)){
         $oldMask = umask(0);
         chmod($filePath, 0777);
         umask($oldMask);

         //Then do your file upload
         echo $destination;
         var_dump(move_uploaded_file($image_tmp, $destination));die;
     } else {
           pr("User input contains at least one illegal character, so can't create folder.");die;
     }
}
person bikash.bilz    schedule 17.02.2018
comment
я пытаюсь скопировать ваш программный код, но это не для меня, где я должен поместить ваш код ниже этого if($this-›request-›is('post')) {ваш код.....} или ниже этого if($this-›Users-›save($user)) { ваш код..... } - person Jervyn Paller; 17.02.2018
comment
на самом деле мой код создаст каталог, но фактическое изображение не будет загружено в эту папку... но оно будет сохранено в базе данных, в которой есть поле назначения - person Jervyn Paller; 17.02.2018
comment
if($this-›request-›is('post')) { your code..... } используйте это и дайте мне знать о возврате move_uploaded_file, я обновил код, чтобы вы можете увидеть возврат. - person bikash.bilz; 17.02.2018
comment
он напечатает точный каталог с точным изображением.. но не вставляет в базу данных - person Jervyn Paller; 17.02.2018
comment
я пытаюсь раскомментировать var_dump и умираю; но не могу этого сделать - person Jervyn Paller; 17.02.2018
comment
он напечатает точный каталог с точным изображением: - var_dump() не даст точного изображения, он вернет вам true или false, вам нужно отладить - person bikash.bilz; 17.02.2018
comment
обновленная ошибка gist.github.com/anonymous/567ab21b46e23a49aa9c3a43f729f55e - person Jervyn Paller; 18.02.2018
comment
Я понятия не имею о структуре вашей таблицы (столбец), но ошибки возникают из-за $this-›request-›getData(), он содержит массив файлов, и вам нужно использовать только ИМЯ ФАЙЛА ПОЛЬЗОВАТЕЛЯ вместо массива файлов. - person bikash.bilz; 18.02.2018
comment
Я только что добавил $this-›request-›data['destination'] = $destination;/// для сохранения в поле назначения перед файлом move_uploaded и выключения на FALSE, но это способ исправить это gist.github.com/anonymous/f9f773d40f373845ec1ee16696206687 - person Jervyn Paller; 19.02.2018