#php #laravel #image #file #croppie
#php #laravel #изображение #файл #обрезка
Вопрос:
Добрый день всем, я столкнулся со странной проблемой, на которую я не могу указать пальцем, и я надеюсь, что кто-нибудь может помочь мне выяснить, что вызывает эту проблему. Чтобы обеспечить некоторый контекст, я разрешаю пользователю сохранять массив изображений на продукте, а после их сохранения использовать пакет laravel-stapler, который настроен следующим образом:
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->hasAttachedFile('image', [
'styles' => [
'thumbnail' => '500x500#',
'large' => '800x800#'
],
'url' => '/media/image/:id/:style/:filename',
'default_url' => '/img/category-placeholder-greyscale.jpg',
'convert_options' => [
'jpeg_quality' => 60
]
]);
}
Изображения сохраняются в трех папках:
../путь к изображению / оригинал / имя файла
../путь к изображению / миниатюра / имя файла
../путь к изображению / большой / имя файла
После сохранения этих изображений я использую croppie.js чтобы поворачивать и редактировать их. После того, как пользователь редактирует и обрезает их, и они отправляют его, изображение отправляется как base64 на контроллер, а контроллер сокращается ниже только до соответствующих частей:
$imageData = $request->get('imagebase64');
list(, $imageData) = explode(';', $imageData);
list(, $imageData) = explode(',', $imageData);
$imageData = base64_decode($imageData);
// $image is loaded up through dependency injection
$path = public_path('/path' . '/large/' . $image->image_file_name);
$path2 = public_path('/path' . '/original/' . $image->image_file_name);
file_put_contents($path, $imageData);
file_put_contents($path2, $imageData);
Это отлично работает на моем локальном компьютере, изображение сохраняется в обеих папках, и я получаю новое обрезанное и отредактированное изображение, но на моем сервере это не работает, первый file_put_contents не работает и не сохраняет новое изображение в папке /large, но второй file_put_contents работает и сохраняетновое изображение в папке /original .
Я не уверен, почему это происходит, и был бы признателен за любую помощь, которую вы можете мне оказать. Я также не думаю, что это связано с разрешениями, потому что я дал папке для изображений правильное разрешение, но я не могу быть уверен. Код не аварийно завершает работу, он просто выполняется без сохранения первого изображения
Комментарии:
1. Вы проверяли привилегии в каталогах, которые терпят неудачу
2. Есть сообщение об ошибке? Выполните несколько глупых тестов — задайте другой путь, замените file_put, задайте больше file_put и проверьте, какой из них не удался…
3. @RiggsFolly Да, я сделал, границы выглядят хорошо. я не очень хорошо разбираюсь в Linux, но может ли это иметь какое-то отношение к демонам?
4. @blackblue вообще ничего, он просто молча терпит неудачу, я попытался удалить file_put, который сохраняется в папке /original, другой по-прежнему не удался, я также попытался использовать chmod($path, 777), просто чтобы посмотреть, что произойдет, и это действительно сработало, но затем сразу после сбоя, так что, похоже, этоимеет какое-то отношение к разрешениям, но не может понять, что именно
5. Не обязательно — я не могу вспомнить подробности — сначала возникла какая-то проблема, затем без проблем — было что-то о … времени — допустим, переменная не была готова 🙂 ошибка была где-то еще выше, и весь код был проанализирован как действительный
Ответ №1:
возможно, вам придется отредактировать файл .htaccess, чтобы предоставить разрешения для этих файлов