TinyMCE создает папки при загрузке изображений - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю над системой блогов с несколькими пользователями. Я реализую tinymce как редактор по умолчанию для создания содержимого. Все работает нормально, но мне нужно изменить загрузку изображений с помощью tinymce, мне нужно, чтобы каждый пользователь при сохранении созданного содержимого, если решит добавить изображения к содержимому, загрузит их в отдельную папку, созданную, если она не существует, внутри каталог загрузки по умолчанию, настроенный в скрипте загрузки php. У меня есть следующий код, но он не работает должным образом, когда я публикую контент, он не создаст новый каталог для изображений, а только сохранит контент в базе данных. Конфигурация TinyMCE:

<script>
$(document).ready(function(){

  tinymce.init({
    selector: '#post-content',
    height: 380,
    plugins: 'save print preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists textcolor wordcount imagetools contextmenu colorpicker textpattern help',
    toolbar: 'save | formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat | image',
    images_upload_url: 'ImageHandler.php',
    automatic_uploads: false,
    save_onsavecallback: function(){
        var action = 'savePost';
        var dataTitle = $('#clientName').val();
        var data = tinymce.get('post-content').getContent();
        $.ajax({
          type: 'POST',
          url: 'PostHandler.php',
          data: {action: action, client_name: dataTitle, post_content: data},
          cache: false,
          success: function(response){
            alert(response);
          }
        });
    }
  });

});

</script> 

ImageHandler.php (Сценарий - это тот, кто размещен в документации по tinymce, я прокомментировал только часть CORS, потому что это вызовет у меня некоторые проблемы.)

<?php

  $accepted_origins = array("http://localhost", "http://192.168.1.1", "http://example.com");

  $imageFolder = "../../img/portfolio/";

  reset ($_FILES);
  $temp = current($_FILES);
  if (is_uploaded_file($temp['tmp_name'])){

    // if (isset($_SERVER['HTTP_ORIGIN'])) {
    //   // same-origin requests won't set an origin. If the origin is set, it must be valid.
    //   if (in_array($_SERVER['HTTP_ORIGIN'], $accepted_origins)) {
    //     header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
    //   } else {
    //     header("HTTP/1.1 403 Origin Denied");
    //     return;
    //   }
    // }

    if (preg_match("/([^\w\s\d\-_~,;:\[\]\(\).])|([\.]{2,})/", $temp['name'])) {
        header("HTTP/1.1 400 Invalid file name.");
        return;
    }

    // Verify extension
    if (!in_array(strtolower(pathinfo($temp['name'], PATHINFO_EXTENSION)), array("gif", "jpg", "png"))) {
        header("HTTP/1.1 400 Invalid extension.");
        return;
    }

    if(!file_exists($_POST['client_name'])){
      $clientFolder = mkdir($imageFolder.$_POST['client_name'], 0777);
    }
    // Accept upload if there was no origin, or if it is an accepted origin
    //$filetowrite = $imageFolder . $temp['name'];
    $filetowrite = $clientFolder . $temp['name'];

    move_uploaded_file($temp['tmp_name'], $filetowrite);

    // Respond to the successful upload with JSON.
    // Use a location key to specify the path to the saved image resource.
    // { location : '/your/uploaded/image/file'}


    echo json_encode(array('location' => $filetowrite));

  } else {
    // Notify editor that the upload failed
    header("HTTP/1.1 500 Server Error");
  }

?>

PostHandler.php (Этот файл будет управлять сохранением содержимого пользователей)

<?php

require_once dirname(__DIR__, 1).'/Config.php';

if(isset($_POST['action']) && $_POST['action'] === 'savePost'){

  $clientName = $_POST['client_name'];
  $postContent = $_POST['post_content'];

  $stmt = $db->prepare("INSERT INTO portfolio (post_content, client_name) VALUES (?, ?)");
  if($stmt->execute(array($postContent, $clientName))){
    echo 'ok';
  } else {
    echo $db->errorCode();
  }

}

?>

1 Ответ

0 голосов
/ 05 сентября 2018
file_exists($_POST['client_name'])

Вы должны указать полный путь.

...