PHP - No consigo crear una función para subir imágenes

 
Vista:

No consigo crear una función para subir imágenes

Publicado por PetBang (2 intervenciones) el 27/01/2009 02:39:52
MegaFotos 2.51

Hola ante todo y gracias de antemano por vuestra magnifica ayuda y por esta página tan buena, soy programador desde hace unos años pero soy nuevo en PHP apenas unas semanas y me cuesta familiarizarme con el lenguaje.

Descripción:
En mi página personal quería hacer un modulo para que mis amigos puedan tener un espacio para incluir sus fotografías, entonces vi en internet un script llamado PhotoFoder muy sencillo que sorprendentemente solo es un único archivo y sin base de datos mysql Genial! el script lo he modificado por completo pero le faltaban algunas cosas que son las que me gustaría saber si me podiais echar una mano, y a continuación describo el proyectito y publico por supuesto los códigos para que todos os beneficies de modificación si os interesa, los apartados son los siguientes:

1. Me gustaría poder crear carpetas, ya que este magnífico script genera automáticamente miniaturas de las carpetas del directorio padre. (Eliminar y renombrar no hace falta porque ya es capaz de hacerlo).

2. Lo que más me esta costando es poder subir foto al directorio actual, os explico:
Realice en flash un formulario a medida para subir archivos al servidor, este formulario se beneficia de un script en php para configurarle el directorio, pero me ocurre el siguiente problema..

Código original (incrustado en index.php que es el único archivo que hay):
//Upload de directorios
//Ruta del directorio actual y condicionante
if(empty($HTTP_GET_VARS['path'])) $storage = "";
else $storage = $HTTP_GET_VARS['path'] . "/";
//ruta del fichero a almacenar
$uploadfile = "$storage" . basename( $_FILES['Filedata']['name'] );
//si es correcta la subida del fichero
if ( move_uploaded_file( $_FILES['Filedata']['tmp_name'] , $uploadfile ) ) {
echo( '1 ' . $_FILES['Filedata']['name']);
//si falla la subida del fichero
}else{
echo('');
}

*Si os fijáis he hecho una condición que quita el separado '/' ¿Por que?, pues porque cuando nos encontramos en el directorio padre la ruta a subir archivos estaría en blanco, por el contrario, si estuviéramos en una carpeta el directorio ya si contendría separador, el problema creo que esta en la siguiente condición del código anterior:

if(empty($HTTP_GET_VARS['path'])) $storage = "";
else $storage = $HTTP_GET_VARS['path'] . "/";

aquí es donde en teoría comprueba el directorio actual, el caso es que he probado a poner un 'echo('$storage');' para comprobarlo y si que funciona pero no consigo hacer que suba ningún fichero.

¡Lo curioso¡ que si cambio las anteriores líneas y establezco una carpeta que se encuentre en el directorio padre, por ejemplo, 'Pajaros' siendo así el código sí funciona y sube el archivo a la carpeta correctamente:

//Upload de directorios
$storage = "Pajaros/";
//ruta del fichero a almacenar
$uploadfile = "$storage" . basename( $_FILES['Filedata']['name'] );
//si es correcta la subida del fichero
if ( move_uploaded_file( $_FILES['Filedata']['tmp_name'] , $uploadfile ) ) {
echo( '1 ' . $_FILES['Filedata']['name']);
//si falla la subida del fichero
}else{
echo('');
}

Espero que me podáis ayudar, ahora os pongo un enlace con el código fuente y el código fuente del upload en Flash.
http://www.pescaarte.es/download/megafotos.rar

(Al ejecutar por primera vez tiene un formulario de configuración muy sencillo y agradable, he adjuntado una carpeta con una imagen para que el script al generar el cache reconozca la carpeta).

*Por si os interesa os dejo también una dirección de un ejemplo en mi web por si os sirve de algo.
http://www.pescaarte.es/public/megafotos/demo/

Espero que me haya explicado bien jeje ahora me voy a la cama que estoy muerto de sueño..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No consigo crear una función para subir imágene

Publicado por wbeimar Rodriguez (9 intervenciones) el 29/01/2009 19:42:03
intenta esto

<?php
// define una constante para el tamaño maximo de subida
define ('MAX_FILE_SIZE', "tamaño en bytes");

if (array_key_exists('upload', $_POST)) {
// define constante para el folder de destino
define('UPLOAD_DIR', 'Directorio Raiz');
// reemplaza espacios en el nombre del archivo con underscores
// al mismo tiempo asigna todo a una variable mas sencilla
$file = str_replace(' ', '_', $_FILES['image']['name']);
// convertir el tamaño maximo a KB
$max = number_format(MAX_FILE_SIZE/1024, 1).'KB';
// crear un array de MIME types permitidos
$permitted = array('application/msword', 'application/pdf', 'text/plain', 'text/rtf');
// comenzar por asumir que el archivo no es aceptable
$sizeOK = false;
$typeOK = false;

// chequear que el archivo tiene el tamaño permitido
if ($_FILES['image']['size'] > 0 && $_FILES['image']['size'] <= MAX_FILE_SIZE) {
$sizeOK = true;
}

// Chequear que el archivo tiene unMIME type permitido
foreach ($permitted as $type) {
if ($type == $_FILES['image']['type']) {
$typeOK = true;
break;
}
}

if ($sizeOK && $typeOK) {
switch($_FILES['image']['error']) {
case 0:
// mueve el archivo al folder de destino y lo renombra
$success = move_uploaded_file($_FILES['image']['tmp_name'], UPLOAD_DIR.$file);
if ($success) {
$result = "$file uploaded successfully";
}
else {
$result = "Error uploading $file. Please try again.";
}
break;
case 3:
$result = "Error uploading $file. Please try again.";
default:
$result = "System error uploading $file. Contact webmaster.";
}
}
elseif ($_FILES['image']['error'] == 4) {
$result = 'No file selected';
}
else {
$result = "$file cannot be uploaded. Maximum size: $max. Acceptable file types: gif, jpg, png, pdf, txt, doc.";
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>File upload</title>
<style type="text/css">
<!--
body {
background-image: url(vista3.jpg);
}
-->
</style></head>

<body>
<p> </p>
<table width="200" border="1">
<tr>
<th scope="col"><img src="BIOS2.gif" width="904" height="180" /></th>
</tr>
</table>
<p> </p>
<p>
<?php
// si el formulario ya ha sido enviado muestra el resultado
if (isset($result)) {
echo "<p><strong>$result</strong></p>";
}
?>
</p>
<p> </p>
<p>  </p>
<form action="" method="post" enctype="multipart/form-data" name="uploadImage" id="uploadImage">
<p>
<label for="image">Upload File:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_FILE_SIZE; ?>" />
<input type="file" name="image" id="image" />
</p>
<p>
<input type="submit" name="upload" id="upload" value="Upload File" />
</p>
</form>
</body>
</html>

este codigo es una adaptacion de uno que encontre en un libro "PHP Solutions - Dynamic Web Design Made Easy (2006)" pero me ha funcionado para subir todo tipo de archivos, espero que le sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No consigo crear una función para subir imágene

Publicado por PetBang (2 intervenciones) el 30/01/2009 13:22:20
Gracais wbeimar Rodriguez, por lo menos eres el segundo que me aporta alguna idea, lo he probado y el problema de la variable del directorio sigue sin funcionarme, ya no se que mas interntar, lo que me da rabia es que si me funciona haciendo un simple echo.. pero cuando la utilizo para subir archivos nada de nada... pero gracias por ayudarme de verdad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar