Проблема с редактированием файла в PHP с использованием file_put_contents (Laravel)

#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, чтобы предоставить разрешения для этих файлов