Foros del Web » Programando para Internet » PHP »

Script de PHP guarda pero reemplaza imagen en destino

Estas en el tema de Script de PHP guarda pero reemplaza imagen en destino en el foro de PHP en Foros del Web. Hola a todos, bueno, tengo el siguiente problema, el script de php que pueden ver más abajo, debe realizar las siguientes funciones: 1º Guardar una ...
  #1 (permalink)  
Antiguo 30/05/2014, 14:38
Avatar de AngelMarine  
Fecha de Ingreso: enero-2014
Ubicación: Madrid
Mensajes: 79
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta Script de PHP guarda pero reemplaza imagen en destino

Hola a todos, bueno, tengo el siguiente problema, el script de php que pueden ver más abajo, debe realizar las siguientes funciones:

1º Guardar una imagen seleccionada en una carpeta llamada upload_header. Funciona.

2º Guardar el nombre en base de datos con su respectiva extensión (jpg, png, gif, etc...). Funciona.

Pero, siempre las guarda con el mismo nombre y aparte las reemplaza en la carpeta de destino, (lógico, al tener siempre el mismo nombre). Es decir, ahora subo una foto y la guarda en la carpeta y en la BD con el nombre header_1225455.jpg y luego subo otra diferente y la guarda con el mismo nombre (header_1225455.jpg).

PD: Hay otro problema, en la base de datos se guarda correctamente, nombre + extensión pero en la carpeta se guarda como (nombre + extensión) + extensión.

Ej. header_1225455, este es el nombre como debería aparecer, sin la extensión (ej. .jpg). Pero aparece así: header_1225455.jpg, aclaro, en este ultimo nombre no esta reconociendo .jpg como extensión porque hace parte del nombre. En realidad lo que reconocería al llamar el archivo sería: header_1225455.jpg.jpg

Agradezco vuestra ayuda.

Este es el código PHP:

<?php
session_start();
error_reporting (E_ALL ^ E_NOTICE);

if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

if($_SESSION['logged'] == 'yes')
{


if (!isset($_SESSION['random_key']) || strlen($_SESSION['random_key'])==0){
$_SESSION['random_key'] = strtotime(date('Y-m-d H:i:s'));
$_SESSION['user_file_ext']= "";
}

$upload_dir = "upload_header";
$upload_path = $upload_dir."/";
$large_image_prefix = "header_";
$large_image_name = $large_image_prefix.$_SESSION['random_key'];
$max_file = "2";
$max_width = "1280";
$max_height= "720";
$id_user = $_SESSION['user'];

$allowed_image_types = array('image/pjpeg'=>"jpg",'image/jpeg'=>"jpg",'image/jpg'=>"jpg",'image/png'=>"png",'image/x-png'=>"png",'image/gif'=>"gif");
$allowed_image_ext = array_unique($allowed_image_types);
$image_ext = "";
foreach ($allowed_image_ext as $mime_type => $ext) {
$image_ext.= strtoupper($ext)." ";
}

function resizeHeader($image,$width,$height,$scale) {
list($imagewidth, $imageheight, $imageType) = getimagesize($image);
$imageType = image_type_to_mime_type($imageType);
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeigh t);
switch($imageType) {
case "image/gif":
$source=imagecreatefromgif($image);
break;
case "image/pjpeg":
case "image/jpeg":
case "image/jpg":
$source=imagecreatefromjpeg($image);
break;
case "image/png":
case "image/x-png":
$source=imagecreatefrompng($image);
break;
}
imagecopyresampled($newImage,$source,0,0,0,0,$newI mageWidth,$newImageHeight,$width,$height);

switch($imageType) {
case "image/gif":
imagegif($newImage,$image);
break;
case "image/pjpeg":
case "image/jpeg":
case "image/jpg":
imagejpeg($newImage,$image,90);
break;
case "image/png":
case "image/x-png":
imagepng($newImage,$image);
break;
}

chmod($image, 0777);
return $image;
}

function getHeight($image) {
$size = getimagesize($image);
$height = $size[1];
return $height;
}

function getWidth($image) {
$size = getimagesize($image);
$width = $size[0];
return $width;
}

$large_image_location = $upload_path.$large_image_name.$_SESSION['user_file_ext'];

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

if (isset($large_image_name)) {

$userfile_name = $_FILES['image']['name'];
$userfile_tmp = $_FILES['image']['tmp_name'];
$userfile_size = $_FILES['image']['size'];
$userfile_type = $_FILES['image']['type'];
$filename = basename($_FILES['image']['name']);
$file_ext = strtolower(substr($filename, strrpos($filename, '.') + 1));


if((!empty($_FILES["image"])) && ($_FILES['image']['error'] == 0)) {

foreach ($allowed_image_types as $mime_type => $ext) {

if($file_ext==$ext && $userfile_type==$mime_type){
$error = "";
break;
}else{
$error = "Only <strong>".$image_ext."</strong> images accepted for upload<br />";
}
}

if ($userfile_size > ($max_file*1048576)) {
$error.= "Images must be under ".$max_file."MB in size";
}

}else{
$error= "Select an image for upload";
}

if (strlen($error)==0){

if (isset($_FILES['image']['name'])){

$large_image_location = $large_image_location.".".$file_ext;

$_SESSION['user_file_ext']=".".$file_ext;

move_uploaded_file($userfile_tmp, $large_image_location);
chmod($large_image_location, 0777);


$reqlen = strlen ($large_image_name);
if ($reqlen > 0) {
require("connect_db.php");
$meter = @mysql_query('INSERT INTO headers (name_header, id_user) values ("'.mysql_real_escape_string($large_image_name."." .$file_ext).'", "'.mysql_real_escape_string($id_user).'")');
$meter2 = mysql_query("UPDATE users SET header='".addslashes("$large_image_name".".$file_e xt")."' WHERE users.user='$id_user'");
}

$width = getWidth($large_image_location);
$height = getHeight($large_image_location);

if ($height > $max_height){
$scale = $max_height/$height;
$uploaded = resizeHeader($large_image_location,$width,$height, $scale);
}else{
$scale = 1;
$uploaded = resizeHeader($large_image_location,$width,$height, $scale);
}

}

header("location:".$_SERVER["PHP_SELF"]);
exit();
}
}
}
?>
  #2 (permalink)  
Antiguo 30/05/2014, 14:46
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Script de PHP guarda pero reemplaza imagen en destino

Quizas....este aca la falla:

Código PHP:
Ver original
  1. if (isset($large_image_name)) {
  2.  
  3.    $userfile_name = $_FILES['image']['name']; // aqui
  4.  
  5. //...
  6.  
  7. move_uploaded_file($userfile_tmp, $large_image_location);

En que momento luego o antes de moverla la "renombras" ?
__________________
Salu2!
  #3 (permalink)  
Antiguo 31/05/2014, 09:02
Avatar de AngelMarine  
Fecha de Ingreso: enero-2014
Ubicación: Madrid
Mensajes: 79
Antigüedad: 10 años, 10 meses
Puntos: 0
Exclamación Respuesta: Script de PHP guarda pero reemplaza imagen en destino

Cita:
Iniciado por Italico76 Ver Mensaje
Quizas....este aca la falla:

Código PHP:
Ver original
  1. if (isset($large_image_name)) {
  2.  
  3.    $userfile_name = $_FILES['image']['name']; // aqui
  4.  
  5. //...
  6.  
  7. move_uploaded_file($userfile_tmp, $large_image_location);

En que momento luego o antes de moverla la "renombras" ?
Se renombra antes.
  #4 (permalink)  
Antiguo 31/05/2014, 09:15
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Script de PHP guarda pero reemplaza imagen en destino

Cita:
Pero, siempre las guarda con el mismo nombre
Cierto y ya vi porque y pues por eso no puedes renombrar ya que ese nombre ya existe en el directorio cuando intentas subir la segunda imagen para esa session de ese mismo usuario

Yo veo todas "CONSTANTES" (cte), o "invariables" como te guste decirle

Código PHP:
Ver original
  1. $upload_path = $upload_dir."/"; // cte
  2.  
  3. $large_image_prefix = "header_"; // cte
  4. $large_image_name = $large_image_prefix.$_SESSION['random_key']; //cte
  5.  
  6. $large_image_location = $upload_path. $large_image_name. $_SESSION['user_file_ext']; //cte
  7.  
  8. $large_image_location = $large_image_location.".".$file_ext; // cte
  9.  
  10.  
  11. move_uploaded_file($userfile_tmp, $large_image_location); //cte

O sea... no hay nada que dependa del nombre original del archivo... solo de prefijos... y de un numero que generas UNA SOLA VEZ POR SESSION

Se me ocurre concatenarle tambien $_FILES['image']['tmp_name'] al nombre nuevo del archivo ya que sabes no se repite y para mas seguridad una carpeta para cada usuario
__________________
Salu2!

Última edición por Italico76; 31/05/2014 a las 16:07

Etiquetas: php+base+de+datos, php+bd+mysql, php+css
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:53.