Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

246
Views
La carga del archivo php ajax no funciona: error de carga parcial del archivo

He escrito un código para cargar un archivo junto con otras entradas de formulario usando html, ajax y php. Estoy enviando el formulario usando ajax. Todo funciona en un servidor, pero cuando moví el código a un nuevo servidor, sigo recibiendo ERROR DE CARGA DE ARCHIVO PARCIAL.

El código de muestra se proporciona a continuación.

HTML:

 <form id="gal-form" class="form-gallery" enctype="multipart/form-data"> <input type="hidden" id="gal_id" name="id" value=""> <div class="up-types"> <div class="input-group mb-3 display-none check-links"> <span class="input-group-text">Links to</span> <input type="text" value="ebooks" disabled=""> <input type="text" name="links[]" class="form-control" data-type="ebooks" id="links_to_3" value=""> </div> <div class="input-group mb-3 display-none check-links"> <span class="input-group-text">Links to</span> <input type="text" value="handbooks" disabled=""> <input type="text" name="links[]" class="form-control" data-type="handbooks" id="links_to_4" value=""> </div> <div class="input-group mb-3 display-none check-links"> <span class="input-group-text">Links to</span> <input type="text" value="manuals" disabled=""> <input type="text" name="links[]" class="form-control" data-type="manuals" id="links_to_5" value=""> </div> </div> <div class="form-group"> <label for="gal_title">Title</label> <input type="text" class="form-control" id="gal_title" name="title" placeholder="Add a title here.."> </div> <div class="form-group"> <label for="gal_title">Category</label> <input id="gallery_tags" class="form-control" name="tags[]" type="text" value="" placeholder="Add a category here.."> </div> <div class="form-group"> <label>File upload <span class="text-danger">*Only PDF, MP4, WEBM, OGG, JPG, JPEG, &amp; PNG files are allowed. Please try to upload images/videos of a specific aspect ratio</span></label> <input type="file" name="gal" id="gal-file" class="file-upload-default"> <div class="input-group col-xs-12"> <input type="text" class="form-control file-upload-info" disabled="" placeholder="Upload File"> <span class="input-group-append"> <button class="file-upload-browse btn btn-primary" type="button">Browse</button> </span> </div> </div> <div class="form-group"> <label for="event_text">Description</label> <textarea class="form-control" id="media_desc" name="desc" rows="4" aria-hidden="true"></textarea> </div> <button type="submit" id="gal-button" class="btn btn-primary mr-2">Submit</button> </form>

Tengo que configurar algunos parámetros desde javascript, entonces,

 $("#gal-form").on('submit', function(e) { e.preventDefault(); var desc = "Some description here"; if ($('#gal_title').val() == '') { $('#display-msg').html('<span style="color:red">Please enter title name...</span>'); return false; } else if ($('#gal-file').get(0).files.length === 0 && !desc) { $('#display-msg').html('<span style="color:red">Please enter a description or choose a file to upload...</span>'); return false; } var formData = new FormData(this); var values = $("input[name='links[]']:enabled").map(function() { let id = this.id.split("_").pop(); let link = $(this).data("type"); if (this.value) { link += "/" + this.value; } return { id: id, link: link }; }).get(); formData.append('links_to', JSON.stringify(values)); formData.set('desc',desc); $.ajax({ type: 'POST', url: 'url', data: formData, dataType: 'json', contentType: false, cache: false, processData: false, success: function(obj) { if (obj.success) { window.location.reload(); } else { alertItem(obj.error); } }, error: function(request, status, error) { alertItem(request.responseText); } }); });

Y en PHP,

 $uploadStatus = 1; $data = array(); if(!empty($_FILES["gal"]["name"])){ $file_name = pathinfo(basename($_FILES["gal"]["name"]),PATHINFO_FILENAME); $fileType = pathinfo(basename($_FILES["gal"]["name"]), PATHINFO_EXTENSION); $fileName = $this->generateSlug($file_name).'_'.time().'.'.$fileType; $targetFilePath = $fileName; $allowTypes = array('pdf', 'mp4', 'webm', 'ogg', 'jpg', 'png', 'jpeg'); if(in_array(strtolower($fileType), $allowTypes)){ if(move_uploaded_file($_FILES["gal"]["tmp_name"], $targetFilePath)){ $data['file'] = $fileName; }else{ $uploadStatus = 0; return array('error'=>$_FILES["error"])); } }else{ $uploadStatus = 0; return array('error'=>'Sorry, only PDF, MP4, WEBM, OGG, JPG, JPEG, & PNG files are allowed to upload.'); } } if($uploadStatus == 1){ //Add to database }

La carga funcionará si envía el formulario directamente desde PHP. Revisé y comparé las configuraciones de apache y php para verificar si falta algo. A continuación se muestran las configuraciones de servidor de apache y php. La carga funciona tanto en el Servidor1 como en el Servidor2.

Servidor 1:

 Apache/2.4.6 (RHEL 7.9) PHP 7.3.29

Servidor 2:

 Apache/2.4.37 (RHEL 8.4) PHP 7.4.19

Servidor 3 (Nuevo Servidor):

 Apache/2.4.46 (RHEL 7.9) PHP 7.4.12

Traté de cerrar la conexión configurando el header("Connection: close"); , aumentado max_upload_size , post_max_size pero sin uso.

¿Cuál podría ser una posible razón para esto?

La carga útil de muestra también se proporciona a continuación:

 ------WebKitFormBoundaryj7GC6KVa5gPA46RP Content-Disposition: form-data; name="id" ------WebKitFormBoundaryj7GC6KVa5gPA46RP Content-Disposition: form-data; name="category[]" 1 ------WebKitFormBoundaryj7GC6KVa5gPA46RP Content-Disposition: form-data; name="links[]" ------WebKitFormBoundaryj7GC6KVa5gPA46RP Content-Disposition: form-data; name="title" Test ------WebKitFormBoundaryj7GC6KVa5gPA46RP Content-Disposition: form-data; name="tags[]" Cat ------WebKitFormBoundaryj7GC6KVa5gPA46RP Content-Disposition: form-data; name="gal"; filename="not.png" Content-Type: image/png ------WebKitFormBoundaryj7GC6KVa5gPA46RP Content-Disposition: form-data; name="desc" <p>Test description</p> ------WebKitFormBoundaryj7GC6KVa5gPA46RP Content-Disposition: form-data; name="links_to" [{"id":"1","link":"photo"}] ------WebKitFormBoundaryj7GC6KVa5gPA46RP--
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Recientemente descubrí que el problema se debe a las reglas de Mod Security en el servidor. He deshabilitado Mod Security configurando SecRuleEngine Off en modesecurity.conf , aunque no es una buena solución. Actualice si alguien sabe cómo hacer esto sin apagar este módulo.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!