Foros del Web » Programando para Internet » PHP »

Error al subir un archivo jpg al servidor

Estas en el tema de Error al subir un archivo jpg al servidor en el foro de PHP en Foros del Web. Saludos. Tengo una duda acerca de un error que me esta generando un codigo: <?php $tipoimagen = $_FILES['foto']['type']; $tamano = $_FILES['foto']['size']; if ($tipoimagen!="image/jpeg" || $tamano ...
  #1 (permalink)  
Antiguo 13/05/2011, 20:52
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Pregunta Error al subir un archivo jpg al servidor

Saludos.
Tengo una duda acerca de un error que me esta generando un codigo:

<?php

$tipoimagen = $_FILES['foto']['type'];
$tamano = $_FILES['foto']['size'];
if ($tipoimagen!="image/jpeg" || $tamano < 4120) {
echo "El tipo de la imagen no es el indicado, o se sobrepasa de los 4mb.";
}else{
if (move_uploaded_file(FILES['foto']['fotos'])){
echo "La imagen se subio .";
}else{
echo "Error al intentar subir la imagen, intentelo de nuevo.";
}
}
?>

Y mi formulario:

<form action="envio.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="4120">
<input name="foto" type="file"><br>
<input type="submit" value="Subir"><br>
</form>

Una vez que intentlo subirlo me marca este error:

Parse error: syntax error, unexpected '[' in /opt/lampp/htdocs/xampp/probando/envio/envio.php on line 9

Me marca un error en la linea nueve con error de sintaxis, "[" .
Se que es una pregunta estupida, mas le agradeceria a quien me ayude

Última edición por Fsg; 13/05/2011 a las 20:59
  #2 (permalink)  
Antiguo 13/05/2011, 21:34
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 3 meses
Puntos: 306
Respuesta: Error al subir un archivo jpg al servidor

Y cual es la linea 9 exactamente?

¿Esto no es al revés?
Código PHP:
Ver original
  1. $tamano < 4120

No tendría que ser
Código PHP:
Ver original
  1. $tamano > 4120
Saludos
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--
  #3 (permalink)  
Antiguo 13/05/2011, 21:43
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Gracias por el enseñarme ese error, pero el error que comentaba era este :

Parse error: syntax error, unexpected '[' in /opt/lampp/htdocs/xampp/probando/envio/envio.php on line 9

La linea 9 no la puse,disculpa, es esta :

if (move_uploaded_file(FILES['foto']['fotos'])){
  #4 (permalink)  
Antiguo 13/05/2011, 23:33
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Actualizo, ya arregle el problema, el problema consistia en que no modifique en la linea 9 la funcion debidamente, en lugar de:

move_uploaded_file(FILES['foto']['fotos'])){

el files como es una funcion debe de ir con el simbolo $ , quedaria asi:

move_uploaded_file($_FILES['foto']['fotos'])){

y ya se arreglo :P.
Ahora el problema reside en que me da un error de el cual no sube el archivo, por q no corresponde al formato jpg, y pesa mas de 4mb; el problema es que si subo la imagen, y es una imagen de 45 kb, jpg, pero aun asi me da el error correspondiente.

Vi en varios tutoriales (incluyendo en el wiki de forosdelweb) que ponen jpg en formato, y otros ponen "image/jpeg" y otros simplemente ponen jpg o en su defecto jpeg.

Cita:
if ($tipoimagen!="image/jpeg" || $tamano > 4120) : Me refiero a esta linea


Alguien sabe cual es el adecuado para que pueda subir el archivo?
  #5 (permalink)  
Antiguo 14/05/2011, 01:26
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 13 años, 5 meses
Puntos: 48
Respuesta: Error al subir un archivo jpg al servidor

Bueno pues aqui te dejo un codigo que hice con el que cuido eso de ver que tipo de archivo es, espero te sirva n_n

Código PHP:
<?php
$target 
basename$_FILES['uploaded']['name']) ;
$ok=1;
$ext pathinfo($target);
$EXT1 strtolower($ext['extension']);
if(
$EXT1 != "jpg" && $EXT1 != "png" && $EXT1 != "jpeg") {
    
$ok 0; } else { $ok 1; }
  
if (
$ok==0)
{
    die(
"Error!!! Tu imagen no ha subido, verifica la extension y el tipo de archivo.");
}
?>
  #6 (permalink)  
Antiguo 14/05/2011, 03:47
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error al subir un archivo jpg al servidor

De hecho el error es porque solo le estas enviando un solo parametro a move_uploaded_file, cuando son dos, el primero el nombre del archivo a subir y el segundo el url final donde guardar el archivo...

Ahora, siempre, SIEMPRE que subas algún archivo es recomendable primero verificar si se subio con is_uploaded_file...
Código PHP:
Ver original
  1. if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
  2.       //aquí todo el código de validación etc
  3. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 14/05/2011, 10:05
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Cita:
Iniciado por s00rk Ver Mensaje
Bueno pues aqui te dejo un codigo que hice con el que cuido eso de ver que tipo de archivo es, espero te sirva n_n

Código PHP:
<?php
$target 
basename$_FILES['uploaded']['name']) ;
$ok=1;
$ext pathinfo($target);
$EXT1 strtolower($ext['extension']);
if(
$EXT1 != "jpg" && $EXT1 != "png" && $EXT1 != "jpeg") {
    
$ok 0; } else { $ok 1; }
  
if (
$ok==0)
{
    die(
"Error!!! Tu imagen no ha subido, verifica la extension y el tipo de archivo.");
}
?>
Saludos, probe con tu codigo, pero aun asi me da error, y vi que en el , en la siguiente linea :

Cita:
$EXT1 = strtolower($ext['extension']);
dentro de $ext tienes la palabra extension, eso a que se debe?
Ya intente modificar la palabra con la extension de jpg o jpeg y nada

Cita:
Iniciado por Nemutagk Ver Mensaje
De hecho el error es porque solo le estas enviando un solo parametro a move_uploaded_file, cuando son dos, el primero el nombre del archivo a subir y el segundo el url final donde guardar el archivo...

Ahora, siempre, SIEMPRE que subas algún archivo es recomendable primero verificar si se subio con is_uploaded_file...
Código PHP:
Ver original
  1. if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
  2.       //aquí todo el código de validación etc
  3. }

De hecho si le estoy enviando el parametro de el lugar a donde quiero que llegue (o amenos que tenga error en eso)

Cita:
if ($tipoimagen!="jpeg" || $tipoimagen!="jpg" || $tamano > 4120) {
echo "El tipo de archivo o el tamaño no es correcto.";
}else{
//Verifico que pueda mover el archivo y cambiarle el nombre. El archivo se guardará donde esta la pagina
if (move_uploaded_file($_FILES['foto']['fotos'])){
echo "El archivo subió!!.";
}else{
echo "Error al subir el archivo. Inténtelo nuevamente.";
}
}
No se si el parametro lo puse mal.
Me mencionas que necesariamente se tiene que verificar si se subio, pero si te das cuenta el error que me da no tiene nada que ver con eso, ya que se obtiene el tipo del formato del archivo, lo guarda en una variable y lo compara, todavia no lo sube al servidor.
  #8 (permalink)  
Antiguo 14/05/2011, 10:25
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error al subir un archivo jpg al servidor

Cita:
De hecho si le estoy enviando el parametro de el lugar a donde quiero que llegue (o amenos que tenga error en eso)
no, no lo estas haciendo, estas pasando el archivo original a mover, pero no le estas diciendo donde moverse, son DOS parámetros, tu solo pasas el primero.

Ahora, apenas de di cuenta de algo, por lo que se ve, no tienes ni idea de como funciona $_FILES ni move_uploaded_file, hay que leer mas el manual, ahora, estas haciendo $_FILES['foto']['fotos'] lo cual esta MAL ya que es $_FILES['foto']['name'], y para mover el archivo es move_uploaded_file($_FILES['foto']['tmp_name'],'url/final/del/archivo/'.$_FILES['foto']['name'])
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #9 (permalink)  
Antiguo 14/05/2011, 11:00
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 13 años, 5 meses
Puntos: 48
Respuesta: Error al subir un archivo jpg al servidor

Cita:
Iniciado por Fsg Ver Mensaje
Saludos, probe con tu codigo, pero aun asi me da error, y vi que en el , en la siguiente linea :



dentro de $ext tienes la palabra extension, eso a que se debe?
Ya intente modificar la palabra con la extension de jpg o jpeg y nada
Bueno si vemos un poco veremos que en $ext contengo esto
$ext = pathinfo($target);
donde $target es donde se encuentra los datos de mi archivo osea su nombre y eso ok.

Bueno ahora si vemos un poco de documentacion sobre pathinfo
http://php.net/manual/es/function.pathinfo.php
Veremos que cuenta con la funcion extension y eso nos ayuda a obtener pues la extension del archivo

Ejemplo
Código PHP:
<?php
$partes_ruta 
pathinfo('/www/htdocs/inc/lib.inc.php');

echo 
$partes_ruta['dirname'], "\n";
echo 
$partes_ruta['basename'], "\n";
echo 
$partes_ruta['extension'], "\n";
echo 
$partes_ruta['filename'], "\n"// desde PHP 5.2.0
?>
Espero me explique, por cierto que error te da ?
y am recuerda cambiar ahi el target por el tuyo osea el archivo que vas a subir ya que nomas puse mi codigo pero no lo edite con el dato tuyo jeje
  #10 (permalink)  
Antiguo 14/05/2011, 11:05
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Cita:
Iniciado por Nemutagk Ver Mensaje
no, no lo estas haciendo, estas pasando el archivo original a mover, pero no le estas diciendo donde moverse, son DOS parámetros, tu solo pasas el primero.

Ahora, apenas de di cuenta de algo, por lo que se ve, no tienes ni idea de como funciona [URL="http://php.net/manual/en/reserved.variables.files.php"]$_FILES[/URL] ni [URL="http://php.net/manual/en/function.move-uploaded-file.php"]move_uploaded_file[/URL], hay que leer mas el manual, ahora, estas haciendo $_FILES['foto']['fotos'] lo cual esta MAL ya que es $_FILES['foto']['name'], y para mover el archivo es move_uploaded_file($_FILES['foto']['tmp_name'],'url/final/del/archivo/'.$_FILES['foto']['name'])


Entonces quedaria asi?

Cita:
if (move_uploaded_file($_FILES['foto']['tmp_name'],'../fotos'.$_FILES['foto']['name']){
echo "El archivo subió!!.";
}else{
echo "Error al subir el archivo. Inténtelo nuevamente.";
}
}
Disculpa, y gracias por responder, tienes razon, apenas le estoy dando lectura, como mencione, me guie de la wiki de foros del web:

http://www.forosdelweb.com/wiki/Manual_de_PHP:_Subiendo_archivos_al_servidor_con_P HP

Última edición por Fsg; 14/05/2011 a las 11:23
  #11 (permalink)  
Antiguo 14/05/2011, 12:51
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error al subir un archivo jpg al servidor

Cita:
Iniciado por s00rk Ver Mensaje
Bueno si vemos un poco veremos que en $ext contengo esto
$ext = pathinfo($target);
donde $target es donde se encuentra los datos de mi archivo osea su nombre y eso ok.

Bueno ahora si vemos un poco de documentacion sobre pathinfo
http://php.net/manual/es/function.pathinfo.php
Veremos que cuenta con la funcion extension y eso nos ayuda a obtener pues la extension del archivo

Ejemplo
Código PHP:
<?php
$partes_ruta 
pathinfo('/www/htdocs/inc/lib.inc.php');

echo 
$partes_ruta['dirname'], "\n";
echo 
$partes_ruta['basename'], "\n";
echo 
$partes_ruta['extension'], "\n";
echo 
$partes_ruta['filename'], "\n"// desde PHP 5.2.0
?>
Espero me explique, por cierto que error te da ?
y am recuerda cambiar ahi el target por el tuyo osea el archivo que vas a subir ya que nomas puse mi codigo pero no lo edite con el dato tuyo jeje
Tu código esta bien, pero para nada es recomendable hacerlo en validaciones para subir archivos ya que facilmente se manipula la extensión, para este tipo de validaciones lo mas seguro (ojo, solo es mas seguro mas no es al 100%) verificar el mime type
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #12 (permalink)  
Antiguo 14/05/2011, 13:47
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Ya quedo arreglado lo de las imagenes y modifique lo de nemugtk (gracias a los 2 por la ayuda), y mi codigo quedo asi:

Cita:
<?php

$nombre = $_FILES['foto']['name'];
$tipoimagen = $_FILES['foto']['type'];
$tamano = $_FILES['foto']['size'];
$target = basename( $_FILES['foto']['name']) ;
$ext = pathinfo($target);
$EXT1 = strtolower($ext['extension']);
$ruta = $_SERVER['DOCUMENT_ROOT'].'/probando/envio/fotos/';

if ($EXT1 != "jpg" && $EXT1 != "jpeg") {
echo "El tipo de archivo o el tamaño no es correcto.".$EXT1;
}else{
//Verifico que pueda mover el archivo y cambiarle el nombre. El archivo se guardará donde esta la pagina
if (move_uploaded_file($_FILES['foto']['tmp_name'],$ruta.$_FILES['foto']['name']))
{
echo "El archivo subió!!.";
}else{
echo "Error al subir el archivo. Inténtelo nuevamente.".$ruta;
}
}
?>
Segui tu consejo nemu , y tenias razon me falta ese dato.
Tengo mucha problematica con el acceso a la carpeta (estoy usando xampp, y ya modifique el permiso a 777).

¿Esta bien la forma en la cual empleo la ruta para poner la imagen?

La ruta esta bien es esta : /opt/lampp/htdocs/probando/envio/fotos/ (estoy usando linux), solo puse $_SERVER['DOCUMENT_ROOT'] y le agregue probando/envio/fotos no se si asi tenga que ponerse la ruta.
  #13 (permalink)  
Antiguo 14/05/2011, 14:38
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 13 años, 5 meses
Puntos: 48
Respuesta: Error al subir un archivo jpg al servidor

Cita:
Iniciado por Nemutagk Ver Mensaje
Tu código esta bien, pero para nada es recomendable hacerlo en validaciones para subir archivos ya que facilmente se manipula la extensión, para este tipo de validaciones lo mas seguro (ojo, solo es mas seguro mas no es al 100%) verificar el mime type
o.O
si podrias explicarme un poco sobre como podrian manipularla?
Esque aun batallo en eso antes usaba algo asi
$_FILE['N1']['type']
para checar pero nose opte por la otra opcion.
  #14 (permalink)  
Antiguo 14/05/2011, 16:09
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error al subir un archivo jpg al servidor

No le veo mucho problema puedo cambiar manualmente la extension, por ejemplo puedo tener imagen.txt y cambiar la extension a imagen.jpg, esto no digo que sea un problema para el servidor, pero si para tus visitantes, un archivo puede tener código malicioso como un virus u otro código, que se ejecuta en cuanto otro visitante intenta visualizar la imagen, es por eso que es mas seguro verificar el mime type para estar mas seguros de que el archivo es realmente lo que dice que es, para tener una referencia sobre los mime types disponibles pueden checar esta lista

Para verificar el mime type en un archivo subido por POST:
Código PHP:
Ver original
  1. if (is_uploaded_file($_FILES['imagen']['tmp_name'])) {
  2.      if ($_FILES['imagen']['type'] == 'image/jpeg' || $_FILES['imagen']['type'] == 'image/gif' || $_FILES['imagen']['type'] == 'image/png') {
  3.            echo 'Imagen con el tipo correcto';
  4.      }
  5. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #15 (permalink)  
Antiguo 14/05/2011, 16:10
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Error al subir un archivo jpg al servidor

una manera muy segura de validar una imagen es la función GetImageSize() al hacer uso de esta función que devuelve el tipo de imagen, el mime y el tamaño, funciona por que si le pides el tamaño y no es imagen da un FALSE :D

ahora modificar la extension es muy sencillo, tu mismo en tu pc agarra una imagen jpg cualquiera y renombrala como virus.exe, facil ¿no? y se puede hacer igual de facil al revés. por eso validar la extensión no es seguro, el mime es más seguro pero tambien modificable, en cambio el tamaño de imagen, si el archivo no es imagen es bastante más complicado he ahi la magia de GetImageSize() :d
  #16 (permalink)  
Antiguo 14/05/2011, 18:28
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Bueno, ya varios me han pasado datos al momento muy importantes y el codigo que llevo hasta ahora es este :

Cita:
<?php

$nombre = $_FILES['foto']['name'];
$tipoimagen = $_FILES['foto']['type'];
$tamano = $_FILES['foto']['size'];
$target = basename( $_FILES['foto']['name']) ;
$ext = pathinfo($target);
$EXT1 = strtolower($ext['extension']);
$temporal = $_FILES['foto']['tmp_name'];
$archivo = $_FILES['foto']['name'];
$path="/fotos/";
$ruta ="";




if ($EXT1 != "jpg" && $EXT1 != "jpeg") {
echo "El tipo de archivo o el tamaño no es correcto.".$EXT1;
}else{
//Verifico que pueda mover el archivo y cambiarle el nombre. El archivo se guardará donde esta la pagina
if (is_uploaded_file($_FILES['foto']['name']))
{
move_uploaded_file($_FILES['foto']['tmp_name'],$_FILES['foto']['name']); //Cambio del nombre temporal al real
copy($_FILES['foto']['name'],$ruta."/fotos/".$_FILES['foto']['name']); //Copiamos a la carpeta subidas
echo "Subido exitosamente";
}else{
echo "Error al subir el archivo. Inténtelo nuevamente.".$tipoimagen;
echo $prueba;
}
}
?>
Pero aun asi no me deja subir nada, en un intento desesperado por saber en donde se guardan temporalmente puse para que me imprimiera la carpeta temporal donde se guarda el fichero ($_FILES['foto'][tmp_name ]), esto con el motivo de saber donde estaba la carpeta temporal,y que lei en un tutorial que puede servir para detectar donde se guarda, cuando subi el archivo a mi host, no aparecio nada, ¿sera acaso que no guarda el archivo temporalmente por que no hay donde?.

Si alguien sabe por favor se lo agradeceria mucho.
Gracias a los que hasta ahora me han ayudado
  #17 (permalink)  
Antiguo 14/05/2011, 21:27
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 3 meses
Puntos: 306
Respuesta: Error al subir un archivo jpg al servidor

¿Le has dado el permiso necesario a la carpeta para poder guardar los archivos?
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--
  #18 (permalink)  
Antiguo 14/05/2011, 21:47
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Para la carpeta donde se supone que se tiene que guardar le puse permiso 777, el problema es que no da error en eso,me da error al momento de subirlo, y se guarde en la carpeta temporal, para despues pasarlo a la carpeta que le puse chmod 777.

Intente averiguar imprimiendo la direccion de la carpeta temporal donde se guarda, pero no me da, creen que se deba a que tenga que modificar algo en el php.ini, o a que se pueda deber?.
  #19 (permalink)  
Antiguo 14/05/2011, 21:58
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error al subir un archivo jpg al servidor

Dices que el error es al subirlo, pero realmente no dices cual es el error exactamente, muestra el error que marca php
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #20 (permalink)  
Antiguo 14/05/2011, 21:59
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 3 meses
Puntos: 306
Respuesta: Error al subir un archivo jpg al servidor

El que uso para subir imagenes y crear una miniimagen es esto:

Código PHP:
Ver original
  1. <?
  2. // ----- script para subir la imagen ---   
  3.     if($_POST){
  4. // Creamos la cadena aletoria -- la modifique para poder utilizar el nombre + aleatorio
  5. $nom=explode(".",$_FILES [ 'file' ][ 'name' ]); //para usar nombre de la imagen
  6.  
  7. $nom2 = $nom[count($nom)-2]; //obtengo solo el nombre sin extension
  8. //$str = "1234567890";
  9. $sub = $id_noticia;
  10. $cad = $nom2."_".$sub;
  11.  
  12. /*for($i=0;$i<3;$i++) {
  13. $cad .= substr($str,rand(0,9),1);
  14. } */
  15. // Fin de la creacion de la cadena aletoria
  16.  
  17. $tamano = $_FILES [ 'file' ][ 'size' ]; // Leemos el tamaño del fichero
  18. $tamaño_max="300000"; // Tamaño maximo permitido
  19. if( $tamano < $tamaño_max){ // Comprobamos el tamaño  
  20. //$destino = '../imagennov' ; // Carpeta donde se guardara
  21. $sep=explode('image/',$_FILES['file']['type']); // Separamos image/
  22. $tipo=$sep[1]; // Optenemos el tipo de imagen que es
  23.  
  24. if($tipo == "pjpeg"){$tipo = "jpeg";}
  25. if($tipo == "x-png"){$tipo = "png";}
  26. if($tipo == "gif" || $tipo == "jpeg"|| $tipo == "png"){ // Si el tipo de imagen a subir es el mismo de los permitidos, seguimos. Puedes agregar mas tipos de imagen
  27. move_uploaded_file ( $_FILES ['file']['tmp_name'],$destino . '/' .$cad.'.'.$tipo);  // Subimos el archivo
  28.  
  29. // creo la mini a tamaño de 175 ancho o menos si es más chica la img original
  30. include('imgchiqui.php');
  31. $imagenm= $destino . '/' .$cad.'.'.$tipo;
  32. // obtengo el ancho para definir si se achica o no
  33. $dim=getimagesize($imagenm);
  34. // $dim[0] ancho - $dim[1] altura
  35.  
  36. if ($dim[0] >= 175){thumb1($imagenm, 175, $tipo);}
  37. else{thumb1($imagenm, $dim[0], $tipo);}
  38.            
  39.  
  40.  
  41. }
  42. else echo "el tipo de archivo no es de los permitidos";// Si no es el tipo permitido lo decimos
  43. }
  44. else echo "El archivo supera el peso permitido.";// Si supera el tamaño de permitido lo decimos
  45. }
  46.  
  47.  
  48.  
  49. ?>


siendo imgchiqui.php:
Código PHP:
Ver original
  1. <?
  2. function thumb1($imagen,$ancho,$tipo) {
  3.      // Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande".
  4.      $dir_thumb = "minis/";
  5.      // Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg",
  6.      // el thumbnail se llamaría "tn_imagen1.jpg"
  7.      $prefijo_thumb = "m_";
  8.  
  9.      // Aquí tendremos el nombre de la imagen.
  10.      $nombre=basename($imagen);
  11.      // Aquí la ruta especificada para buscar la imagen.
  12.      $camino=dirname($imagen)."/";
  13.  
  14.      // Intentamos crear el directorio de thumbnails, si no existiera previamente.
  15.      if (!file_exists($camino.$dir_thumb))
  16.           @mkdir ($camino.$dir_thumb, 0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb);
  17.  
  18.      // Aquí comprobamos que la imagen que queremos crear no exista previamente
  19.      if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
  20.        
  21.         // echo $camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n";
  22.          
  23.          // si es jpeg o jpg
  24.           if($tipo == "jpg" || $tipo == "jpeg"){
  25.          
  26.           $img = @imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
  27.        
  28.           // miramos el tamaño de la imagen original...
  29.           $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
  30.  
  31.           // intentamos escalar la imagen original a la medida que nos interesa
  32.           $ratio = ($datos[0] / $ancho);
  33.           $altura = round($datos[1] / $ratio);
  34.  
  35.           // esta será la nueva imagen reescalada
  36.           $thumb = imagecreatetruecolor($ancho,$altura);
  37.  
  38.           // con esta función la reescalamos
  39.           imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $ancho, $altura, $datos[0], $datos[1]);
  40.  
  41.           // voilà la salvamos con el nombre y en el lugar que nos interesa.
  42.           imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
  43.           }
  44.        
  45.        
  46.         // si del tipo png
  47.         if($tipo == "png"){
  48.           $img = @imagecreatefrompng($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
  49.        
  50.           // miramos el tamaño de la imagen original...
  51.           $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
  52.  
  53.           // intentamos escalar la imagen original a la medida que nos interesa
  54.           $ratio = ($datos[0] / $ancho);
  55.           $altura = round($datos[1] / $ratio);
  56.  
  57.           // esta será la nueva imagen reescalada
  58.           $thumb = imagecreatetruecolor($ancho,$altura);
  59.  
  60.           // con esta función la reescalamos
  61.           imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $ancho, $altura, $datos[0], $datos[1]);
  62.  
  63.           // voilà la salvamos con el nombre y en el lugar que nos interesa.
  64.           imagepng($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
  65.           }
  66.      
  67.         // si del tipo gif
  68.         if($tipo == "gif"){
  69.           $img = @imagecreatefromgif($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
  70.        
  71.           // miramos el tamaño de la imagen original...
  72.           $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
  73.  
  74.           // intentamos escalar la imagen original a la medida que nos interesa
  75.           $ratio = ($datos[0] / $ancho);
  76.           $altura = round($datos[1] / $ratio);
  77.  
  78.           // esta será la nueva imagen reescalada
  79.           $thumb = imagecreatetruecolor($ancho,$altura);
  80.  
  81.           // con esta función la reescalamos
  82.           imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $ancho, $altura, $datos[0], $datos[1]);
  83.  
  84.           // voilà la salvamos con el nombre y en el lugar que nos interesa.
  85.           imagegif($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
  86.           }
  87.          
  88.      
  89.      
  90.      }
  91. }  
  92.  
  93.  
  94.  
  95. ?>


Lo único que debo tener presente es el peso del archivo original, ya que si es muy grande tarda mucho, o directamente se bloquea. por eso siempre se deben subir con el tamaño final a mostrar.
saludos
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--
  #21 (permalink)  
Antiguo 14/05/2011, 23:31
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Cita:
Iniciado por C2am Ver Mensaje
El que uso para subir imagenes y crear una miniimagen es esto:

Código PHP:
Ver original
  1. <?
  2. // ----- script para subir la imagen ---   
  3.     if($_POST){
  4. // Creamos la cadena aletoria -- la modifique para poder utilizar el nombre + aleatorio
  5. $nom=explode(".",$_FILES [ 'file' ][ 'name' ]); //para usar nombre de la imagen
  6.  
  7. $nom2 = $nom[count($nom)-2]; //obtengo solo el nombre sin extension
  8. //$str = "1234567890";
  9. $sub = $id_noticia;
  10. $cad = $nom2."_".$sub;
  11.  
  12. /*for($i=0;$i<3;$i++) {
  13. $cad .= substr($str,rand(0,9),1);
  14. } */
  15. // Fin de la creacion de la cadena aletoria
  16.  
  17. $tamano = $_FILES [ 'file' ][ 'size' ]; // Leemos el tamaño del fichero
  18. $tama&#241;o_max="300000"; // Tamaño maximo permitido
  19. if( $tamano < $tama&#241;o_max){ // Comprobamos el tamaño  
  20. //$destino = '../imagennov' ; // Carpeta donde se guardara
  21. $sep=explode('image/',$_FILES['file']['type']); // Separamos image/
  22. $tipo=$sep[1]; // Optenemos el tipo de imagen que es
  23.  
  24. if($tipo == "pjpeg"){$tipo = "jpeg";}
  25. if($tipo == "x-png"){$tipo = "png";}
  26. if($tipo == "gif" || $tipo == "jpeg"|| $tipo == "png"){ // Si el tipo de imagen a subir es el mismo de los permitidos, seguimos. Puedes agregar mas tipos de imagen
  27. move_uploaded_file ( $_FILES ['file']['tmp_name'],$destino . '/' .$cad.'.'.$tipo);  // Subimos el archivo
  28.  
  29. // creo la mini a tamaño de 175 ancho o menos si es más chica la img original
  30. include('imgchiqui.php');
  31. $imagenm= $destino . '/' .$cad.'.'.$tipo;
  32. // obtengo el ancho para definir si se achica o no
  33. $dim=getimagesize($imagenm);
  34. // $dim[0] ancho - $dim[1] altura
  35.  
  36. if ($dim[0] >= 175){thumb1($imagenm, 175, $tipo);}
  37. else{thumb1($imagenm, $dim[0], $tipo);}
  38.            
  39.  
  40.  
  41. }
  42. else echo "el tipo de archivo no es de los permitidos";// Si no es el tipo permitido lo decimos
  43. }
  44. else echo "El archivo supera el peso permitido.";// Si supera el tamaño de permitido lo decimos
  45. }
  46.  
  47.  
  48.  
  49. ?>


siendo imgchiqui.php:
Código PHP:
Ver original
  1. <?
  2. function thumb1($imagen,$ancho,$tipo) {
  3.      // Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande".
  4.      $dir_thumb = "minis/";
  5.      // Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg",
  6.      // el thumbnail se llamaría "tn_imagen1.jpg"
  7.      $prefijo_thumb = "m_";
  8.  
  9.      // Aquí tendremos el nombre de la imagen.
  10.      $nombre=basename($imagen);
  11.      // Aquí la ruta especificada para buscar la imagen.
  12.      $camino=dirname($imagen)."/";
  13.  
  14.      // Intentamos crear el directorio de thumbnails, si no existiera previamente.
  15.      if (!file_exists($camino.$dir_thumb))
  16.           @mkdir ($camino.$dir_thumb, 0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb);
  17.  
  18.      // Aquí comprobamos que la imagen que queremos crear no exista previamente
  19.      if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
  20.        
  21.         // echo $camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n";
  22.          
  23.          // si es jpeg o jpg
  24.           if($tipo == "jpg" || $tipo == "jpeg"){
  25.          
  26.           $img = @imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
  27.        
  28.           // miramos el tamaño de la imagen original...
  29.           $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
  30.  
  31.           // intentamos escalar la imagen original a la medida que nos interesa
  32.           $ratio = ($datos[0] / $ancho);
  33.           $altura = round($datos[1] / $ratio);
  34.  
  35.           // esta será la nueva imagen reescalada
  36.           $thumb = imagecreatetruecolor($ancho,$altura);
  37.  
  38.           // con esta función la reescalamos
  39.           imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $ancho, $altura, $datos[0], $datos[1]);
  40.  
  41.           // voilà la salvamos con el nombre y en el lugar que nos interesa.
  42.           imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
  43.           }
  44.        
  45.        
  46.         // si del tipo png
  47.         if($tipo == "png"){
  48.           $img = @imagecreatefrompng($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
  49.        
  50.           // miramos el tamaño de la imagen original...
  51.           $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
  52.  
  53.           // intentamos escalar la imagen original a la medida que nos interesa
  54.           $ratio = ($datos[0] / $ancho);
  55.           $altura = round($datos[1] / $ratio);
  56.  
  57.           // esta será la nueva imagen reescalada
  58.           $thumb = imagecreatetruecolor($ancho,$altura);
  59.  
  60.           // con esta función la reescalamos
  61.           imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $ancho, $altura, $datos[0], $datos[1]);
  62.  
  63.           // voilà la salvamos con el nombre y en el lugar que nos interesa.
  64.           imagepng($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
  65.           }
  66.      
  67.         // si del tipo gif
  68.         if($tipo == "gif"){
  69.           $img = @imagecreatefromgif($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
  70.        
  71.           // miramos el tamaño de la imagen original...
  72.           $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
  73.  
  74.           // intentamos escalar la imagen original a la medida que nos interesa
  75.           $ratio = ($datos[0] / $ancho);
  76.           $altura = round($datos[1] / $ratio);
  77.  
  78.           // esta será la nueva imagen reescalada
  79.           $thumb = imagecreatetruecolor($ancho,$altura);
  80.  
  81.           // con esta función la reescalamos
  82.           imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $ancho, $altura, $datos[0], $datos[1]);
  83.  
  84.           // voilà la salvamos con el nombre y en el lugar que nos interesa.
  85.           imagegif($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
  86.           }
  87.          
  88.      
  89.      
  90.      }
  91. }  
  92.  
  93.  
  94.  
  95. ?>


Lo único que debo tener presente es el peso del archivo original, ya que si es muy grande tarda mucho, o directamente se bloquea. por eso siempre se deben subir con el tamaño final a mostrar.
saludos
Gracias y pues mi error era de que no se el por que , no pasaba de esta condicion:

Cita:
if (is_uploaded_file($_FILES['foto']['name']))
Ya arregle la ruta y el error es otro.



Cita:
Iniciado por Nemutagk Ver Mensaje
Dices que el error es al subirlo, pero realmente no dices cual es el error exactamente, muestra el error que marca php
Me sale este error ahora:
Cita:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
  #22 (permalink)  
Antiguo 14/05/2011, 23:52
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error al subir un archivo jpg al servidor

Cita:
Gracias y pues mi error era de que no se el por que , no pasaba de esta condicion:

Cita:
if (is_uploaded_file($_FILES['foto']['name']))
Ya arregle la ruta y el error es otro.
obvio que no pase la condición ya que no es name si no tmp_name

Ahora, el otro error es porque PHP se instalo y configuro usando PHPsuexec, el cual crea por cada usuario una configuración personalizada de php.ini, el problema con esto es que el usuario que el sistema operativo asigna a PHP no es el mismo usuario de apache (o nobody), asignando otro usuario, el problema es que la mayoría de las veces este solo obtiene permisos 755, ahora, aparte de todo esto cuando se configura con PHPsuexec PHP corre en modo CGI evitando así poder usar .htaccess... ahora, otra mas, en esta configuración existe un problema especifico para subir archivos, ya que si se intenta aumentar el peso máximo permitido para subir archivos enviará el error antes mencionado, ahora, recordemos que se esta ejecutando PHP en modo CGI, si intentas subir un archivo muy grande o mayor al máximo permitido CGI tronará (detiene la ejecución de PHP), cuando pasa esto, Apache no sabe que hacer con la página PHP por lo cual la unica opción que le queda es intentar enviar lo que tiene al navegador mostrando el mismo error que tienes, la unica forma de solucionarlo seria cambiar el modo en que corre PHP en Apache de CGI a Modulo, pero esto require reinstalación de ambos (Apache y PHP)

La verdad, me sorprende que tengas una configuración en CGI, esto normalmente se veia en versiones muy viejas de PHP, hoy en dia casi todas las instalaciones se hacen como modulo de Apache
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #23 (permalink)  
Antiguo 15/05/2011, 00:10
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Gracias, ya arregle lo de tmp_name.
Actualmente me hospedo en alojasitios, estuve intentando en xampp , pero igual me da ese error y en alojasitios igual, entonces ese error corresponde al hosting, o se puede usar alguna funcion diferente para este caso?.

Se podra pedir cambios a mi proveedor para que funcione? y que cambios le tengo que pedir?.
  #24 (permalink)  
Antiguo 15/05/2011, 00:20
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error al subir un archivo jpg al servidor

Bueno, lo primero que te recomendaria seria que subieras un archivo con el nombre phpinfo.php y con el siguiente contenido:
Código PHP:
Ver original
  1. echo phpinfo();
Después intenta ejecutarlo (obviamente accediendo desde tu navegador >.<), en el resultado que arroje, busca la linea que diga "Server API" (sin las comillas) y ve si dice CGI, si no dice CGI y dice algo como Apache, Apache + versión o Apache Handler, si dice CGI es el problema que te explique en mi post anterior, ahora si confirmamos que tu PHP esta corriendo como CGI es muy difícil que el hosting te lo cambie, porque esto implicaria cambiar la instalación de PHP y Apache, posiblemente si es un hosting de paga te puedan dar otra solución, si es un hosting gratuito olvidalo, mejor ve buscando otro

Aquí encontrarás mas información
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #25 (permalink)  
Antiguo 15/05/2011, 00:39
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

Ya intente subir el archivo con phpinfo() , y para sorpresa, me vuelve a mostrar el mismo error :S, no imprime nada, mas que el mensaje de 500 INTERNAL SERVER ERROR, intente cambiarle el chmod por que pense que a lo mejor tenia algo que ver, pero tampoco.

Mi proveedor es alojasitios, se maneja por cpanel, hay alguna opcion donde pueda yo ver lo que tu me mencionas?.

De lado izquierdo aparece esta informacion:

cPanel Version 11.28.87
Theme x3
Apache version 2.2.17
PHP version 5.2.16
MySQL version 5.0.92-community
Architecture i686
Operating system linux
  #26 (permalink)  
Antiguo 15/05/2011, 13:14
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Error al subir un archivo jpg al servidor

SOLUCIONADO , LO QUE A MI ME DIO SOLUCION FUE LO SIGUIENTE:

Si bien no encontre la manera de hacerlo funcionar en mi hosting de paga (ya envie un correo al soporte para buscar una solucion), en mi servidor xampp me funciono bien, y aqui dejo la solucion:

Esto es para los que no pueden dar con la ubicacion de el archivo, o si se atoran al igual que yo, tal vez esto les funcione:

Cita:
<?php

$nombre_archivo = $_FILES['foto']['name']; // El nombre del archivo
$tipo_archivo = $_FILES['foto']['type']; //El tipo del archivo
$tamano_archivo = $_FILES['foto']['size']; //El tamaño total del archivo
$tempo_archivo = $_FILES['foto']['tmp_name']; // Aqui se guarda la direccion donde el servidor guarda temporalmente el archivo
$actual = getcwd(); //La direccion actual del la aplicacion, la funcion getcwd() te indica donde exactamente tienes el archivo .php


//Comprueba si es gif,jpeg o jpg y si es menor a 100000 bytes ; puse un tercero, aunque muchos tutoriales no lo hacen, ya que algunos no te lo detectan como jpeg, sino como jpg
if( strpos($tipo_archivo,"gif") || strpos($tipo_archivo,"jpeg") || strpos($tipo_archivo,"jpg") && $tamano_archivo < 100000)
{


//La funcion move_uploaded_file recibe 2 parametros, la carpeta temporal donde el archivo fue guardado despues de subir el formulario, y la direccion actual
//Si se dan cuenta utilice la variable $actual, donde guarda la funcion getcwd() para que me diera donde esta el script, le añadi fotos, ya que es el nombre de la carpeta, y despues le añades el nombre de tu archivo


if(move_uploaded_file($tempo_archivo, $actual."/fotos/".$nombre_archivo)){

echo "Archivo subido correctamente";

}else{

echo "Error al subir archivo";

}

}else{
echo "TU archivo no cumple ,vuelve a intentarlo";
}

?>
Esto me funciono a mi si por ejemplo, tengo mi archivo no desde la raiz (ej : www.tusitio.com/micarpetanoraiz/fotos) y dentro de esa carpeta, tengo mi carpeta donde se guarda las fotos.
Si quieres guardarlo en alguna carpeta que este en la raiz,y que no necesariamente este tu script ahi, quitale la variable actual.

A todos, gracias por ayudarme

Etiquetas: jpg, servidor
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:28.