visualizar una subir multiples mostrar modificar imagen guardar eliminar ejemplo desde descargar con archivos php pdf upload doc file-type

multiples - subir, mostrar, modificar y eliminar una imagen en mysql desde php



Subir DOC o PDF utilizando PHP (7)

Puedo subir imágenes bien, pero cuando cambio los tipos de imagen / jpg, imagen / gif a aplicación / msword y aplicación / pdf, no funciona. Aquí está mi código. El mismo código exacto funciona para las imágenes, pero para cargar documentos y pdf, genera un "Archivo no válido". ¿Que está pasando aqui? Mi archivo solo tiene aproximadamente 30kb y está muy por debajo del límite de tamaño de archivo aquí.

$allowedExts = array("pdf", "doc", "docx"); $extension = end(explode(".", $_FILES["file"]["name"])); if ( ( ($_FILES["file"]["type"] == "application/msword") || ($_FILES["file"]["type"] == "text/pdf") ) && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts)) { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); } else { echo "Invalid file." }


Agregue los tipos de mimo correctos a su código, al menos estos:

.jpeg -> image/jpeg .gif -> image/gif .png -> image/png

Una lista de tipos mime se puede encontrar here .

Además, simplifique la lógica del código e informe un número de error para ayudar a que el soporte de primer nivel encuentre los problemas:

$allowedExts = array( "pdf", "doc", "docx" ); $allowedMimeTypes = array( ''application/msword'', ''text/pdf'', ''image/gif'', ''image/jpeg'', ''image/png'' ); $extension = end(explode(".", $_FILES["file"]["name"])); if ( 20000 < $_FILES["file"]["size"] ) { die( ''Please provide a smaller file [E/1].'' ); } if ( ! ( in_array($extension, $allowedExts ) ) ) { die(''Please provide another file type [E/2].''); } if ( in_array( $_FILES["file"]["type"], $allowedMimeTypes ) ) { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); } else { die(''Please provide another file type [E/3].''); }


No use el parámetro [''type''] para validar las subidas. Ese campo es proporcionado por el usuario y puede ser falsificado de manera trivial, lo que permite cargar CUALQUIER tipo de archivo. Lo mismo ocurre con el parámetro [''name''] , que es el nombre del archivo provisto por el usuario. También es trivial forjar, por lo que el usuario envía nastyvirus.exe y lo llama cutekittens.jpg .

El método adecuado para validar las cargas es usar la determinación del tipo mime del lado del servidor, por ejemplo, a través de la información de fileinfo , además de tener una correcta verificación de carga correcta, que no:

if ($_FILES[''file''][''error''] !== UPLOAD_ERR_OK) { die("Upload failed with error " . $_FILES[''file''][''error'']); } $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $_FILES[''file''][''tmp_name'']); $ok = false; switch ($mime) { case ''image/jpeg'': case ''application/pdf'' case etc.... $ok = true; default: die("Unknown/not permitted file type"); } move_uploaded_file(...);

También está utilizando el nombre de archivo proporcionado por el usuario como parte del destino final de los archivos move_uploaded_files. también es trivial incrustar los datos de ruta en ese nombre de archivo, que luego utilizas a ciegas. Eso significa que un usuario remoto malintencionado puede hacer garabatos en CUALQUIER archivo en su servidor para el cual conoce la ruta, además de plantar nuevos archivos.


Para application / msword y application / vnd.ms-excel, cuando eliminé la restricción de tamaño:

($_FILES["file"]["size"] < 20000)

... funcionó bien.


Puedes usar

$_FILES[''filename''][''error''];

Si ocurre algún tipo de error, devuelve ''error''; de lo contrario, 1,2,3,4 o 1 si se hace

1: si el tamaño del archivo está por encima del límite ... Puede encontrar otras opciones buscando en Google



<?php //create table /* -- -- Database: `mydb` -- -- -------------------------------------------------------- -- -- Table structure for table `tbl_user_data` -- CREATE TABLE `tbl_user_data` ( `attachment_id` int(11) NOT NULL, `attachment` varchar(200) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Indexes for dumped tables -- -- -- Indexes for table `tbl_user_data` -- ALTER TABLE `tbl_user_data` ADD PRIMARY KEY (`attachment_id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tbl_user_data` -- ALTER TABLE `tbl_user_data` MODIFY `attachment_id` int(11) NOT NULL AUTO_INCREMENT; */ $servername = "localhost"; $username = "root"; $password = ""; // Create connection $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } if(isset($_POST[''submit''])){ $fileName=$_FILES["resume"]["name"]; $fileSize=$_FILES["resume"]["size"]/1024; $fileType=$_FILES["resume"]["type"]; $fileTmpName=$_FILES["resume"]["tmp_name"]; $statusMsg = ''''; $random=rand(1111,9999); $newFileName=$random.$fileName; //file upload path $targetDir = "resumeUpload/"; $fileName = basename($_FILES["resume"]["name"]); $targetFilePath = $targetDir . $newFileName; $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION); if(!empty($_FILES["resume"]["name"])) { //allow certain file formats //$allowTypes = array(''jpg'',''png'',''jpeg'',''gif'',''pdf'',''docx'',''doc''); $allowTypes = array(''pdf'',''docx'',''doc''); if(in_array($fileType, $allowTypes)){ //upload file to server if(move_uploaded_file($_FILES["resume"]["tmp_name"], $targetFilePath)){ $statusMsg = "The file ".$fileName. " has been uploaded."; }else{ $statusMsg = "Sorry, there was an error uploading your file."; } }else{ $statusMsg = ''Sorry, only DOC,DOCX, & PDF files are allowed to upload.''; } }else{ $statusMsg = ''Please select a file to upload.''; } //display status message echo $statusMsg; $sql="INSERT INTO `tbl_user_data` (`attachment_id`, `attachment`) VALUES (''NULL'', ''$newFileName'')"; if (mysqli_query($conn, $sql)) { $last_id = mysqli_insert_id($conn); echo "upload success"; } else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); } } ?> <form id="frm_upload" action="" method="post" enctype="multipart/form-data"> Upload Resume:<input type="file" name="resume" id="resume"> <button type="submit" name="submit">Apply Now</button> </form> //output sample[![check here for sample output][1]][1]


$folder = "Resume/"; $temp = explode(".", $_FILES["uploaded"]["name"]); $newfilename = round(microtime(true)).''.''. end($temp); $db_path ="$folder".$newfilename ; //remove the . $listtype = array( ''.doc''=>''application/msword'', ''.docx''=>''application/vnd.openxmlformats-officedocument.wordprocessingml.document'', ''.rtf''=>''application/rtf'', ''.pdf''=>''application/pdf''); if ( is_uploaded_file( $_FILES[''uploaded''][''tmp_name''] ) ) { if($key = array_search($_FILES[''uploaded''][''type''],$listtype)) {if (move_uploaded_file($_FILES[''uploaded''] [''tmp_name''],"$folder".$newfilename)) { include(''connection.php''); $sql ="INSERT INTO tb_upload (filePath) VALUES (''$db_path'')"; } } else { echo "File Type Should Be .Docx or .Pdf or .Rtf Or .Doc"; }