Tengo un script para subir imagenes a un directorio y guardar sus datos en mysql, esto funciona bien. El problema es que la cantidad de imágenes está definida con un número fijo y con un input para cada archivo. Yo necesito subir muchas imagenes con un solo input y sin limites de cantidades.
Necesito agregar parte de mi código a uno ya escrito (el SWFupload) pero no sé como hacerlo.
Este es el upload.php del SWFupload
Código PHP:
<?php
// Code for Session Cookie workaround
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
} else if (isset($_GET["PHPSESSID"])) {
session_id($_GET["PHPSESSID"]);
}
session_start();
// Check post_max_size (http://us3.php.net/manual/en/features.file-upload.php#73762)
$POST_MAX_SIZE = ini_get('post_max_size');
$unit = strtoupper(substr($POST_MAX_SIZE, -1));
$multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));
if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
header("HTTP/1.1 500 Internal Server Error"); // This will trigger an uploadError event in SWFUpload
echo "POST exceeded maximum allowed size.";
exit(0);
}
// Settings
$save_path = getcwd() . "/uploads/"; // The path were we will save the file (getcwd() may not be reliable and should be tested in your environment)
$upload_name = "Filedata";
$max_file_size_in_bytes = 2147483647; // 2GB in bytes
$extension_whitelist = array("jpg", "gif", "png"); // Allowed file extensions
$valid_chars_regex = '.A-Z0-9_ !@#$%^&()+={}\[\]\',~`-'; // Characters allowed in the file name (in a Regular Expression format)
// Other variables
$MAX_FILENAME_LENGTH = 260;
$file_name = "";
$file_extension = "";
$uploadErrors = array(
0=>"There is no error, the file uploaded with success",
1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini",
2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
3=>"The uploaded file was only partially uploaded",
4=>"No file was uploaded",
6=>"Missing a temporary folder"
);
// Validate the upload
if (!isset($_FILES[$upload_name])) {
HandleError("No upload found in \$_FILES for " . $upload_name);
exit(0);
} else if (isset($_FILES[$upload_name]["error"]) && $_FILES[$upload_name]["error"] != 0) {
HandleError($uploadErrors[$_FILES[$upload_name]["error"]]);
exit(0);
} else if (!isset($_FILES[$upload_name]["tmp_name"]) || !@is_uploaded_file($_FILES[$upload_name]["tmp_name"])) {
HandleError("Upload failed is_uploaded_file test.");
exit(0);
} else if (!isset($_FILES[$upload_name]['name'])) {
HandleError("File has no name.");
exit(0);
}
// Validate the file size (Warning: the largest files supported by this code is 2GB)
$file_size = @filesize($_FILES[$upload_name]["tmp_name"]);
if (!$file_size || $file_size > $max_file_size_in_bytes) {
HandleError("File exceeds the maximum allowed size");
exit(0);
}
if ($file_size <= 0) {
HandleError("File size outside allowed lower bound");
exit(0);
}
// Validate file name (for our purposes we'll just remove invalid characters)
$file_name = preg_replace('/[^'.$valid_chars_regex.']|\.+$/i', "", basename($_FILES[$upload_name]['name']));
if (strlen($file_name) == 0 || strlen($file_name) > $MAX_FILENAME_LENGTH) {
HandleError("Invalid file name");
exit(0);
}
// Validate that we won't over-write an existing file
if (file_exists($save_path . $file_name)) {
HandleError("File with this name already exists");
exit(0);
}
// Validate file extension
$path_info = pathinfo($_FILES[$upload_name]['name']);
$file_extension = $path_info["extension"];
$is_valid_extension = false;
foreach ($extension_whitelist as $extension) {
if (strcasecmp($file_extension, $extension) == 0) {
$is_valid_extension = true;
break;
}
}
if (!$is_valid_extension) {
HandleError("Invalid file extension");
exit(0);
}
// Validate file contents (extension and mime-type can't be trusted)
/*
Validating the file contents is OS and web server configuration dependant. Also, it may not be reliable.
See the comments on this page: http://us2.php.net/fileinfo
Also see http://72.14.253.104/search?q=cache:3YGZfcnKDrYJ:www.scanit.be/uploads/php-file-upload.pdf+php+file+command&hl=en&ct=clnk&cd=8&gl=us&client=firefox-a
which describes how a PHP script can be embedded within a GIF image file.
Therefore, no sample code will be provided here. Research the issue, decide how much security is
needed, and implement a solution that meets the needs.
*/
// Process the file
/*
At this point we are ready to process the valid file. This sample code shows how to save the file. Other tasks
could be done such as creating an entry in a database or generating a thumbnail.
Depending on your server OS and needs you may need to set the Security Permissions on the file after it has
been saved.
*/
if (!@move_uploaded_file($_FILES[$upload_name]["tmp_name"], $save_path.$file_name)) {
HandleError("File could not be saved.");
exit(0);
}
exit(0);
/* Handles the error output. This error message will be sent to the uploadSuccess event handler. The event handler
will have to check for any error messages and react as needed. */
function HandleError($message) {
echo $message;
}
?>
Código HTML:
<html> <body> <form method="post" action="upload.php" enctype="multipart/form-data"> <input type="file" name="Filedata" id="Filedata" /> <input type="submit" value="Upload" /> </form> </body> </html>
Este código es el que me gustaría agregar a "upload.php" para poder usar todo junto.
Código PHP:
<?php
$link=Conectarse();
foreach($_POST as $nombre_campo => $valor){
$asignacion = "\$" . $nombre_campo . "='" . $valor . "';";
eval($asignacion);
}
function thumbjpeg($imagen,$nombre) {
// Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande".
$dir_thumb = "imagenes_ch/";
// Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg",
// el thumbnail se llamaría "tn_imagen1.jpg"
$prefijo_thumb = "tn_";
// Aquí tendremos el nombre de la imagen.
$nombre1=basename($imagen);
// Aquí la ruta especificada para buscar la imagen.
$camino=dirname($imagen)."/";
// Intentamos crear el directorio de thumbnails, si no existiera previamente.
if (!file_exists($camino.$dir_thumb))
@mkdir ($camino.$dir_thumb, 0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb);
// Aquí comprovamos que la imagen que queremos crear no exista previamente
$img = @imagecreatefromjpeg($imagen) or die("No se encuentra la imagen $camino$nombre<br>\n");
// miramos el tamaño de la imagen original...
$datos = getimagesize($camino.$nombre1) or die("Problemas con $camino$nombre1<br>\n");
// intentamos escalar la imagen original a la medida que nos interesa
$anchura = 450;
$altura=($anchura*$datos[1])/$datos[0];
// esta será la nueva imagen reescalada
$thumb = imagecreatetruecolor($anchura,$altura);
//echo $camino.$dir_thumb.$prefijo_thumb.$nombre;
// con esta función la reescalamos
imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
// voilà la salvamos con el nombre y en el lugar que nos interesa.
imagejpeg($thumb,$dir_thumb.$nombre);
}
$fruits=$_POST['texto'];
$a=-1;
foreach ($fruits as $key => $value ){
$a++;
$texto_[$a]=$value;
}
for ($j=0;$j<=10;$j++){
if (is_uploaded_file($HTTP_POST_FILES['imagen']['tmp_name'][$j])) {
$imagen = $HTTP_POST_FILES['imagen']['name'][$j];
$destch ='../../imagenes_galeria';
if($imagen!="" && copy($HTTP_POST_FILES['imagen']['tmp_name'][$j], $destch."/".$imagen))
{
$sql="insert into galeria_fotos(id_galeria,foto,texto) values ('0','$imagen','$texto_[$j]')";
mysql_query($sql,$link);
}
}
}
$fecha = date("Y-m-d");
$sql="insert into galeria (titulo,descripcion,fecha) values ('$nombre','$descripcion','$fecha')";
mysql_query($sql,$link);
echo mysql_error();
$ultimo_id = mysql_insert_id();
$sql="update galeria_fotos set id_galeria='$ultimo_id' where id_galeria='0'";
mysql_query($sql,$link);?>
Muchas gracias!