Duda en la subida de archivos en php !!!

Iniciado por Diabliyo, 25 Abril 2007, 15:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

Hola:

Como podria subir archivos al servidor, sabiendo que el PHP.ini esta:

register_globals= off
Ya intente usando: $_FILES["archivo"]["name"] (para mostrar nombre), pero no logro obtener su nombre :S !!!

Por Ultimo, como puro testeo de mi aplicacion, subi manualmente las imagenes en el directorio que elijo (tmp/), para despues mover dichas imagenes con un nombre distinto a la carpeta fotos/ y asi tener un mejor control con las fotos y no tener problemas con la repeticion de los nombres, pero al realizar move_uploaded_file( $url.$buf, "fotos/".$buf ); y sigue marcando error al intenta mover la o las imagenes :( !!!

Sobre los permisos, los puse 0775, a todos los archivos .php y carpetas...

OJO: uso slackwrae linux, y estoy testeando en mi propia PC, tengo Apache, PHP y MySQL corriendo....

bye bye

LuffyFF

Para lo primero:
Intenta envez de $_FILES
Con
$HTTP_POST_FILES["archivo"]["name"];


La variable $url es el path no?

Y la carpeta fotos deberia tener 777 para que puedas escribir.


De todos modos, intenta esto

Citar
$dirfinal 
"fotos/".$buf."";

if (
is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'])) {
     
copy($HTTP_POST_FILES['archivo']['tmp_name'], $dirfinal);

Salu2.

Diabliyo

#2
Hola:

Gracias por contestar, pero veo que no leiste bien mi post amigo Mugiwara, la variable $HTTP_POST_FILES[][], no se puede utilizar, ya que el php.ini esta configurado para no registrar variables globales, osease:

register_globals=off

Oviamente el uso de POST (y sus derivados) no se puede utilizar, ya que esta configuracion del php.ini no lo permite.

Y el permiso: 777 indica:

7 = rwx = el usuario cerador puede hacer de todo
7 = rwx = el usuario que sea del GRUPO puede hacer de todo
7 = rwx = quien NO sea del grupo y cualquiera puede hacerle de todo

Osease, esta configuracion es INAPROPIADA ya que permite que cualquiera pueda modificarte el archivo :S !!...

Lo mas apropiado es: 775

7 = rwx = el usuario creador puede hacer de todo
7 = rwx = el usuario que sea del GRUPO puede hacer de todo
5 = r-x = el que NO sea del grupo o cualquier solo puede leer y ejecutar.

Mi problema aun esta sin resolver :(, ya que no se permite el uso de POST, por la configuracion del php.ini

Y lo digo porke muchos SERVIDORES optan por esta configuracion, segun por mas "seguridad", pero en fin, resulta ser solo un dolor de cabeza :( !!

Por Ultimo: si en efecto la variable $url es el directorio donde subo las fotos al momento de que el usuario las va agregando en la parte de 'Agregar Fotos', al FINALIZAR este proceso se toman de dicho directorio y son movidas al directorio que les corresponde, pero oviamente por SEGURIDAD al moverlas, las muevo con un nombre DISTINTO, este nombre es un NUMERO consecutivo para evitar problemas de REPETICION de nombres o numeros en imagenes !!!

bye bye

Ertai

Prueba un print_r($_FILES) o print_r($_FILES['archivo']) y haber que te sale.

Saludos.
Si la felicidad se comprara, entonces el dinero sería noble.


void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}

LuffyFF

Mira...he leido perfectamente tu post.

No te confundas.

Register globals es para no registrar variables globales.

O sea, si yo recibo un mensaje via POST
Que sea $_POST["nombredelcampo"].
Si register_globals está off, entonces $nombredelcampo no sería válido.
Si estuviera ON, $nombredelcampo sería válido.

$HTTP_POST_FILES es lo mismo que $_FILES.

O sea, lo que register_globals ON haria en $HTTP_POST_FILES seria pasar el valor, por ej.
$HTTP_POST_FILES["campoPOST"]
pasarlo a $campoPOST.
Eso es lo que ahce register_globals activado. Si no está activado, simplemente no genera la variable esa.

Bien...lo de los permisos, no le des 777 y no te va a funcionar nunca.
El ultimo 7 es el que da permisos de escritura.
Si no quieres que nadie escriba, ni el propio apache/php podrá escribir sobre esa carpeta, entonces, en teoría no te funcionaría nunca.
PHP no tiene usuario propio por defecto para actuar, por lo cual actua como nobody. Entonces, puedes darle chown nobody a la carpeta esa, o darle 777, en teoría es lo mismo.

Y además, nunca dije que le dieras 777 a ningún archivo archivo. Sino a la carpeta para que se pudieran copiar los archivos. Los archivos que copies ,dejalos con permisos normales, no importa, lo que importa es que el directorio sea escribible por nobody.

Y sobre lo ultimo...

Yo agarre tu ejemplo, la variable $buf pense que seguramente era la variable con el nombre generado, bueno consideralo asi.
Y que luego $dirfinal sea el path + $buf, que seria el nombre generado, ese seria el destino final del file y quedaria con ese nombre
PATH + $buf.

Y luego mueve el archivo temporal que se ha subido en la carpeta temporal y se escribe sobre $dirfinal, o sea PATH + $buf. Y no es que vaya a escribir
path/$bufNOMBREDELFILE.jpg
sino que seria path/$buf.



Saludos

Diabliyo

#5
Cita de: Ertai en 26 Abril 2007, 10:15 AM
Prueba un print_r($_FILES) o print_r($_FILES['archivo']) y haber que te sale.

Saludos.

Hola:

Me sale simplemente este numero asi: 1

Y mas o menos este es el code:

if( $_GET["evento"]=="carga" )
{
//resultado es: Eviaste () (1)
echo "Enviaste: <b>(". $_FILES["foto"]["name"]. ")</b> <b>(". print_r($_FILES["foto"]). ")</b>";
}
else
{
echo "<form action=\"index.php?modulo=agregar&evento=carga\" enctype=\"multipart/form-data\" method=\"GET\">";
echo "<input type=\"file\" name=\"foto\" class=\"boton_intro\"> ";
echo "<a href=\"index.php?modulo=agregar&evento=carga\" border=\"0\">";
echo "<img src=\"imagenes/subir_fotos_02.gif\" border=\"0\" align=\"center\">";
echo "</a>";
echo "</form>";
}

LuffyFF

$_FILES es lo mismo que $HTTP_POST_FILES.
O sea que $_FILES es el corto de $HTTP_POST_FILES

De ningún modo, funcionaría con GET.

Saludos.

Ertai

Haber si aprendemos a debuggear nuestros programas. Yo te dicho que pusieras solo esa función, no que la metieras dentro de un echo.

Si lo que te he dicho yo te imprime por pantalla un 1, es que entonces $_FILES no es un array y no contiene nada.

Mira la documentación de dicha función, y ya sabes que dirección tomar: tu formulario falla!! No llega ningún array, y ahora que me lo miro... Como quieres pasar un formulario con una imagen por GET!!  :xD
Si la felicidad se comprara, entonces el dinero sería noble.


void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}

Diabliyo

Cita de: Ertai en 27 Abril 2007, 09:58 AM
Haber si aprendemos a debuggear nuestros programas. Yo te dicho que pusieras solo esa función, no que la metieras dentro de un echo.

Si lo que te he dicho yo te imprime por pantalla un 1, es que entonces $_FILES no es un array y no contiene nada.

Mira la documentación de dicha función, y ya sabes que dirección tomar: tu formulario falla!! No llega ningún array, y ahora que me lo miro... Como quieres pasar un formulario con una imagen por GET!!  :xD

Intente lo de la imagen porke estaba anteriormente calandole con un boton y el formulario con method=GET, pero este no funcionaba :( !!!... en fin, modifique a POST y santa solucion !!...

Ahora les contare mas broncas que me surgen !!....

un momento.. jejejje

Gracias de Antemano !!...

bye bye

Diabliyo

Hola:

Me sale error al intentar mover el/los archivos/imagenes :( !!!... me dice que NO puede :S !!... Mas o menos este es el code !!!

if( $_GET["evento"]=="subir" )
{
echo "<td align=\"center\">";
$fdir= opendir( "tmp/" );
$cont=0;
$url= "tmp/";

while( $buf= readdir($fdir) )
{
if( ($buf!="." && $buf!="..") && formatos_validos( strtolower($buf) ) )
{
$cont++;

if( move_uploaded_file( $url.$buf, "fotos/".$buf )==FALSE )
{
echo "<b>". $url.$buf. "</b> no pudo ser cargada<br>";
$cont--;
}
}
}

closedir($fdir);

if( $cont )
{
echo "<b>". $cont. " </b>";
if( $cont>1 )
echo "Fotos Subidas";
else
echo "Foto Subida";
echo " con Exito...<p>";
echo "<a href=\"index.php\"><img src=\"imagenes/finalizar.gif\" border=\"0\"></a>";
}
else
echo "No existen fotos a subir...";
echo "</td>";
}








echo "<td valign=\"bottom\">";
echo "<form action=\"index.php?modulo=agregar&evento=subir\" method=\"POST\">";
echo "<input type=\"submit\" value=\"Subir Fotos\" class=\"boton_intro\">";
echo "<span>:: Pulsa este boton si has teminado de adjuntar fotos.</span>";
echo "</form>";
echo "</td>";