2015-04-16 5 views
0

Есть так много подобных проблем, но ни один из них не был точно таким же.Laravel/php upload не работает

Вот код, я использую в пределах Фасад

public function create($input, $index = false, $params = false) 
{ 
    $file = Input::file($input); 

    if ($file === null) 
    { 
     return false; 
    } 

    if ($index !== false) 
    { 
     $file = $file[$index]; 
    } 
    else 
    { 
     $file = reset($file); 
    } 

    if ($file === null) 
    { 
     return false; 
    } 

    $image    = new ImageModel; 
    $image->mime  = $file->getClientMimeType(); 
    $image->extension = $file->guessClientExtension(); 
    $image->filename = $file->getClientOriginalName(); 

    if ($params !== false) 
    { 
     //there are parameters to add 
    } 
    $image->save(); 
    $image->hash = md5($image->id); 

    $path = str_split($image->hash); 
    $path = array_slice($path, 0, 5); 

    $system_path = implode(DIRECTORY_SEPARATOR, $path); 

    $fileName = substr($image->hash, 5); 
    $path[] = $fileName; 

    $image->path = implode('/', $path); 
    $destination_path = implode(DIRECTORY_SEPARATOR, [public_path(), 'images', $system_path, null]); 

    if (self::_makePath($destination_path)) 
    { 
     $file_path = implode('.', [$destination_path.$fileName, $image->extension]); 
     $image->save(); 
     dd([ 
      $file->getRealPath(), 
      file_exists($file->getRealPath()), 
      file_exists($destination_path), 
      $file_path, 
      is_writable($destination_path), 
      move_uploaded_file($file->getRealPath(), $file_path) 
     ]); 
     move_uploaded_file($file->getRealPath(), $file_path); 
     //$file->move($destination_path, $fileName); 

     $this->image = $image; 

     return $this->image; 
    } 

    return false; 
} 

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

Эта функция отлично работает с использованием $file->move довольно недавно в пристройке (laravel 4.2, а не последней версии усадьбы, также скорректированной до степени, но ни одно из значений php/nginx не было изменено), однако без каких-либо корректировок в течение некоторого времени он прекратил работать. Я попытался изменить функцию на альтернативные способы загрузки, но ничего. Все это говорит о том, что файл нельзя загрузить по неизвестной причине.

Использование кода выше У меня есть некоторые тесты там, если файл может быть загружен/перемещен, и все это проверяется, даже move_uploaded_file возвращает true, однако файл не перемещается.

+0

Не глядя слишком внимательно на код, вы проверили разрешения целевого каталога? – lukasgeiter

+0

Да, я использовал 'is_writable' для проверки с помощью дампа. –

ответ

0

Выяснил проблему, хотя ее ошибка с моей стороны - это то, что трудно отследить.

В основном загрузка выполнялась дважды, она работала, но поскольку последнее изображение было вторым, казалось, что это не так. Используя laravel, это трудно увидеть, если вы не видите 2 строки, добавленные в базу данных, но если вы не храните их в базе данных, эта опция не используется.

Код, выполняющийся дважды, был вызовом фасада, поэтому приведенный выше код не отображает его.

Смежные вопросы