0
0
0
s2smodern

Estaba hace poco terminando una plantilla de un sitio web hecho en Prestashop, y también debía subir unos videos en el CMS.  En sí el misterio era ubicar en qué módulo hacer eso, si en el módulo Bloque CMS  o en Personalizar bloque de información CMS, de todos modos a la larga para esta pequeña "tutoría" es irrelevante puesto que el problema que se presenta es general. 

Era simplemente en el File Manager del editor crear  - o no - una carpeta donde ubicar los archivos de video y seleccionar o arrastrarlos para iniciar la carga. Pero esto fue lo que pasó.

Probando normalmente los permisos creé una carpeta llamada videos y subir luego alguna imagen. Nada del otro mundo, lo hizo bien. Ahora era simplemente subir el video que necesitaba. 

Archivo de video subido.

Como podrán ver en la imagen se supone que el video ha quedado cargado y al darle clic en Regresar a la lista de archivos vería el archivo cargado y listo para editar su nombre, tener una vista previa o borrarlo o seleccionarlo para insertarlo en el contenido.

No hay archivo de video.

 

Pero ¡Oh sorpresa! no aparece el archivo, pero yo lo subí, entonces ¿qué pasó? ¿permisos de carpeta? pero si la carpeta donde pienso alojar esos archivos la creé desde el File Manager así que no creo que sea eso, ¿qué otra cosa? ¿tamaño del archivo? el servidor está configurado para subir archivos de hasta 20MB, ¿qué más puede ser?

Sencillo: un pequeño error en el código de Prestashop. Dentro de la carpeta que se configuró como la de administración en el momento de instalarlo se encuentra una carpeta llamada filemanager  y en ella un archivo llamado upload.php el cual es como su nombre lo dice el que se encarga de subir los archivos al servidor. ¿Cuál es el problema en este archivo?. Para la versión que trabajé, la 1.6.0.9 se encuentra desde la línea 59 hasta la 62:

        if (in_array(fix_strtolower($info['extension']), $ext_img) && @getimagesize($tempFile) != false)
          $is_img = true;
        else
          $is_img = false;

Esta línea valida que sea una imagen o un archivo y como pueden ver, no dice nada sobre video. La solución, comentar el código anterior y agregar el siguiente:

        if (in_array(fix_strtolower($info['extension']), $ext_img) && @getimagesize($tempFile) !== false) {
            $is_img = true;
        } elseif (in_array(fix_strtolower($info['extension']), $ext_file)) {
            $is_img = false;
            $is_file = true;
        } elseif (in_array(fix_strtolower($info['extension']), $ext_video)) {
            $is_img = false;
            $is_video = true;
        } else {
            $is_img = false;
            $is_file = false;
        }

 

Y justo debajo de ese nuevo código originalmente se encontraría el siguiente:

        if ($is_img) {
            move_uploaded_file($tempFile, $targetFile);
            chmod($targetFile, 0755);
            ...

Acá simplemente abrá que añadir un nuevo if y dejar el anterior como un elseif:

        if ($is_file || $is_video) {
            move_uploaded_file($tempFile, $targetFile);
            chmod($targetFile, 0755);
            $memory_error = false;
        } elseif ($is_img) {
            ...

De este modo se permite cargar el archivo de video. Espero que esto haya ayudado.

 

¿Quién está en línea?

Tenemos 134 usuarios no conectados y no hay usuarios conectados conectados