Prestashop页面上的自定义上传文件

时间:2015-06-16 20:54:25

标签: php file-upload prestashop

我创建了一个单独的页面(following this guide),以便他可以上传pdf文件(他们的产品证书)。根据所选产品,客户搜索的另一页。

在文件上传页面上,逻辑如下:

表格形式: 选择产品(从选择器中),然后选择要上载的证书(pdf)。

提交存储在表格(由我创建)中的按钮,产品ID和证书名称及属性(很快就可以进行搜索。)

在数据库中,数据保存正确,但在ftp文件夹中不保存文件。

在这里,我将在/ themes / theme /certificados.tpl

中向您展示我的代码

形式:

<form method="post" action="subirconnect.php" enctype="multipart/form-data">
    <select id="producto" name="producto">
        <option value="default" selected>Producto</option>
        ...
    </select>

    <select id="attr" name="attr">  
        <option value="default" selected>Diametro</option>
        ...
    </select>

    <input type="file" name="adjunto[]" multiple="multiple">

    <input type="submit" value="Subir" name="enviar_certificados" class="btn btn-primary">
</form>

验证表格:

$TamanioMaximo=5000000;  // 1000000 ~~~ 1mb 
$CarpetaAlojamiento='../../certificados'; // path public_html/certificados
$NombreArchivoFinal="";
$MensajeCertificados="";

if(!empty($_POST['enviar_certificados'])) {

  $name_producto = $_POST['producto'];
  $name_combinacion = $_POST['attr']; 
  $name_certificados = $_FILES['adjunto']['name'];

  $cntFiles = count($name_certificados);

  for ($i=0; $i< $cntFiles; $i++) { //for multiples files

    if($_FILES['adjunto']['size'][$i]>$TamanioMaximo) {
      $MensajeCertificados= 'El archivo debe pesar menos de 5mb';

    } else {

      if (!is_dir($CarpetaAlojamiento)) {
        mkdir($CarpetaAlojamiento);
        chmod($CarpetaAlojamiento, 0777);
      }

      $NombreArchivoFinal=$CarpetaAlojamiento."/".$_FILES['adjunto']['name'][$i];

      if(substr($_FILES['adjunto']['type'][$i],12,3) != 'pdf') {
        $MensajeCertificados= 'Solo se permiten archivos .PDF';

      } else if (is_uploaded_file($_FILES['adjunto']['tmp_name'][$i])) {
        move_uploaded_file($_FILES['adjunto']['tmp_name'][$i], $NombreArchivoFinal);    

        $name_certificados = $_FILES['adjunto']['name'][$i];

        /* upload data to db - works fine*/
        SubirCertificados($cntFiles, $name_producto, $name_combinacion, $name_certificados);

        $MensajeCertificados = '¡Certificado Subido!';

      } else {
        $MensajeCertificados=  'Problemas en el envío '.$_FILES['adjunto']['name'][$i];
      }
    }   
  }
}

文件夹'certificados'已创建并具有必要的权限(777)

你可能会失踪? move_uploaded_file无法在prestashop中运行? 这个相同的代码在我的localhost(WAMP)

上工作正常

1 个答案:

答案 0 :(得分:1)

不要使用静态路径而是在prestashop-root / upload / certificados中创建文件夹

$CarpetaAlojamiento = _PS_UPLOAD_DIR_.'certificados';