Foros del Web » Programando para Internet » PHP »

Duda con Upload de ficheros

Estas en el tema de Duda con Upload de ficheros en el foro de PHP en Foros del Web. Porque no me mueve los ficheros al directorio. Este es el código: Código PHP: <?php   for( $i = 0 ; $i < $cant ; ...

  #1 (permalink)  
Antiguo 13/04/2004, 14:11
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Duda con Upload de ficheros

Porque no me mueve los ficheros al directorio. Este es el código:
Código PHP:
<?php
 
for($i=0;$i<$cant;$i++){
  
$tempdir "marxismo/files/";
  
$tmpname tempnam ($tempdir"reynier");
  @
chmod($tempdir,0777);
  
$var move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"][$i], $tmpname);
  if(
$var)
   echo 
"OK";
  else
   echo 
"False";
 }
?>
el form de donde vienen las variables es el siguiente:
Código PHP:
echo "<form action='upload.php' enctype='multipart/form-data' method='post' name='filesadmin' id='filesadmin'>
                 <table width='300' border='1' align='center' cellpadding='0' cellspacing='0' bordercolor='#98AAB1'>
                 <tr bgcolor='#BFCFE0'>
                 <td colspan='2' class='menutop'>Cantidad de ficheros a subir </td>
                 </tr>"
;
                 for(
$i=0;$i<$HTTP_POST_VARS['cantidad'];$i++){
                  echo 
"
                  <tr class='txtrg'>
                  <td width='325'>Fichero No. "
.$i.": </td>
                  <td width='169' class='txt'>
                  <input name='file[$i]' type='file' id='file[$i]'>
                  <input name='cant' type='hidden' id='cant' value='"
.$HTTP_POST_VARS['cantidad']."'>
                  </td>
                  </tr>"
;
                 }
           echo 
"<tr>
                 <td colspan='2'><div align='center'>
                 <input name='next' type='submit' class='txtcn' id='next' value='Siguiente &gt;&gt;'>
                 </div></td>
                 </tr>
                 </table>
                 </form>"

Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 13/04/2004, 14:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cuando algo no te funcione ... empieza por quitar los @ de las funciones. Todo esto es para localizar mensajes de error si se están provocando pero tu no los ves nunca sabras por donde fallan tus aplicaciones. NO uses @ en fase de desarrollo .. ya se los pondrás cuando des por terminado el script y veas que funciona.

Por lo demás .. haz echo a tus variables:
$HTTP_POST_FILES["file"]["tmp_name"][$i]

observa si tiene el valor esperado ..

En fin ... intenta localizar el problema viendo hasta donde se ejecuta tu script con los valores esperados.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 13/04/2004, 18:51
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Mira Clsuter

he hecho lo que me dijiste pero me pone esto que no se que rayo es:
Cita:
C:\WINDOWS\TEMP\php3FF.tmp OK
C:\WINDOWS\TEMP\php400.tmp OK
C:\WINDOWS\TEMP\php401.tmp OK
el código es este:
Código PHP:
for($i=0;$i<$cant;$i++){
  
$tempdir "marxismo/files/";
  
$tmpname tempnam ($tempdir"reynier");
  echo 
$HTTP_POST_FILES['file']['tmp_name'][$i]."<br>";
  
$var move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'][$i], $tmpname);
  if(
$var)
   echo 
"OK";
  else
   echo 
"False";
 } 
Salu2
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 14/04/2004, 06:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues según eso .. te está diciendo el nombre temporal que le dá PHP al archivo que subes y ademas que se aplicó correctamente la función move_uploaded_file() (por qué devuelve un True si pudo realizar la acción ..)

Así que .. mira en el directorio donde mueves los archivos con dicha función por qué ahí deberías tener tus archivos .. En tu último ejemplo se supone que ese directorio que indicas está creado y con permisos de escritura (CHMOD 0777 o algo menos).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 20/04/2004, 20:54
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Cluster de nuevo por aquí

Cluster ya no se que rayos hacer. Mira he cambiado todo el código. Ahora me ha quedado así:
Código PHP:
 //index.html desde aqui digo la cantidad de archivos a subir
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<
html>
<
head>
<
META HTTP-EQUIV="Expires" CONTENT="Fri, Jan 01 1900 00:00:00 GMT">
<
META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<
META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<
META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<
META http-equiv="content-language" content="en">
<
META name="author" content="">
<
META HTTP-EQUIV="Reply-to" CONTENT="@.com">
<
META name="generator" content="PHPEd 3.1">
<
META NAME="description" CONTENT="">
<
META name="keywords" content="">
<
META NAME="Creation_Date" CONTENT="08/15/2000">
<
META name="revisit-after" content="15 days">
<
title>Untitled</title>
<
link rel="stylesheet" type="text/css" href="my.css">
</
head>
<
body>
 <
FORM  action="2do.php" method="POST" name="upload" enctype="multipart/form-data" title="upload">
  <
INPUT TYPE="TEXT"  name="cantidad" align="right" size="5" maxlength="5"   title="cantidad">
  <
INPUT TYPE="SUBMIT"  name="envia" value="Siguiente >>">
 </
FORM>
</
body>
</
html
2do.php
aqui imprimo tantos input como haya especificado antes:
Código PHP:
 <?php
 printf
("<FORM  action=3ro.php method=POST name=action enctype=multipart/form-data>");
 
printf("<INPUT TYPE=HIDDEN  name=cantidad value=".$_POST['cantidad'].">");
 for(
$i=0;$i<$_POST['cantidad'];$i++){
  
printf("<INPUT TYPE=file  name=file[$i]><br>");
 }
 
printf("<INPUT TYPE=SUBMIT  name=envia value=Enviar>");
 
printf("</FORM>");
?>
3ro.php aqui hago el upload de ficheros
Código PHP:
 <?php
 
for($i=0;$i<$_POST['cantidad'];$i++){
  
$tmpdir "upload/";
  
//$tmpname = $tmpname($tmpdir,"tmp");
  
$bool move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'][$i], $tmpdir);
 }
 if(
$bool){
  
printf("OK");
 }else{
  
printf("No OK");
 }
?>
Lo mas lindo es que me pone OK, (algo así como que los subio) pero cuando voy al directorio upload lo que tengo es esto:
un archivo llamado upload que no tiene extensión cuyo contenido es esto:
Cita:
GIF89a ‘ ÿ÷™ÿÿÿ !ù  ,  œ'‡)@`q>ÇLm‹£Q ;
que no se que es eso, porque en ningún moment escribo nada en ficheros.
Los archivos que subí fueron estos:
D:\MyDocumentation\Duda con Upload de ficheros - Foros del Web_files\scratchchin.gif
D:\MyDocumentation\Duda con Upload de ficheros - Foros del Web_files\right_bottom.gif
D:\MyDocumentation\Duda con Upload de ficheros - Foros del Web_files\prev.gif

Salu2
PD: Si pueden ayudenme pues esto es básico para el Sistema de Portal que estoy realizando pues es para una escuela y debe dar la facilidad a los profesores de subir las conferencias que pueden ser .doc y .ppt o .pps de las clases.
__________________
Ing. Reynier Pérez Mira
  #6 (permalink)  
Antiguo 20/04/2004, 21:08
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Solo una sugerencia

jeje no he leido todos lso codigos... ustedes sabran disculparme, ahora bien mi recomendación es que no lo hagas asi, es decir que lo ahgas con funciones de FTP, es facil de utilizar el codigo es el doble de sencillo ademas de que lo hace mucho mas rapido (la diferencia se nota con archivos grandes) y además no ocupa espacio en los temporales (aunque no se para que mas puedan servir!!!)lo unico malo es que los servidorescolovan un limite al tamaño del archivo.. como 2 MB....
beuno hastapronto!!!
__________________
SEO en Medellin
  #7 (permalink)  
Antiguo 20/04/2004, 21:10
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Ahora he probado con este otro y nada

Código PHP:
 <?php
$uploaddir 
'upload/';
chmod($uploaddir,777);
$uploadfile $uploaddir$_FILES['userfile']['name'];
print 
"<pre>";
if (
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
   print 
"File is valid, and was successfully uploaded. ";
   print 
"Here's some more debugging info:\n";
   
print_r($_FILES);
} else {
   print 
"Possible file upload attack!  Here's some debugging info:\n";
   
print_r($_FILES);
}
print 
"</pre>";
?>
Me da estos errores
Cita:
Warning: chmod(): No such file or directory in c:\program files\apache group\apache\htdocs\upload\4to.php on line 3


Warning: move_uploaded_file(upload/header_ayuda.gif): failed to open stream: No such file or directory in c:\program files\apache group\apache\htdocs\upload\4to.php on line 6

Warning: move_uploaded_file(): Unable to move 'C:\WINDOWS\TEMP\php122.tmp' to 'upload/header_ayuda.gif' in c:\program files\apache group\apache\htdocs\upload\4to.php on line 6
Possible file upload attack! Here's some debugging info:
Array
(
[userfile] => Array
(
[name] => header_ayuda.gif
[type] => image/gif
[tmp_name] => C:\WINDOWS\TEMP\php122.tmp
[error] => 0
[size] => 141
)

)
Nota: Estoy trabajando en Win2003 Server Enterprise Edition, Apache/1.3.24, PHP 4.3.2 y MySQL 4.0.18

Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 20/04/2004 a las 21:12
  #8 (permalink)  
Antiguo 21/04/2004, 06:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Reynier . tu problema principal era que no le estás dando nombre al archivo que mueves con move_uploaded_file() ..

Además de la ruta has de decirle el nombre del archivo
$tmpdir = "upload/";

Por ejemplo:

Código PHP:
  $tmpdir "upload/";
  
//$tmpname = $tmpname($tmpdir,"tmp");
  
$bool =  move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'][$i], $tmpdir.$HTTP_POST_FILES['file']['name'][$i]); 
(usalo en el anterior ejemplo que pusistes que te funcionaba con ese archivo que se crea sin extensión ... y esos problemas q tenías).



Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 21/04/2004, 06:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Re: Solo una sugerencia

Cita:
Mensaje Original por mafima
jeje no he leido todos lso codigos... ustedes sabran disculparme, ahora bien mi recomendación es que no lo hagas asi, es decir que lo ahgas con funciones de FTP, es facil de utilizar el codigo es el doble de sencillo ademas de que lo hace mucho mas rapido (la diferencia se nota con archivos grandes) y además no ocupa espacio en los temporales (aunque no se para que mas puedan servir!!!)lo unico malo es que los servidorescolovan un limite al tamaño del archivo.. como 2 MB....
beuno hastapronto!!!
Las funciones de FTP te permiten conectarte a un servidor FTP y mover/copiar .. etc .. archivos en ese servidor. OK?

Ahora .. si yo tengo mi archivito a subir al servidor en mi PC (cliente) y deseo subir un archivo al servidor por HTTP (por una página web para que mis usuarios suban fotos/archivos en general sin que tengan que usar un cliente FTP o por qué simplemente a ese archivo le asocio otros datos y debo guardar en mi BD o donde sea ...).

¿ Como aplicas funciones de FTP para subir mi archivo de mi PC (clienet) al servidor ?

Es decir (a lo que quiero llegar) ..
El "Upload" se hará vía PHP por HTTP con las limitaciones de la configuración de PHP (php.ini) al respecto. Una vez que sube el archivo (que queda en ese directorio temporal que se mencionó: donde diga upload_tmp_dir por si ascaso ..) se debe -mover- hacia su destino definitivo. Si es en el mismo servidor, un "move_uploaded_file()" es lo más seguro y rápido. Una conexión por FTP al mismo servidor que ejecuta PHP y que es donde quedarán los archivos tendrá un tiempo más extra de conexión y negociación de la autentificación del usuario FTP que se va a usar además que requiere de un servidor FTP habilitado (cuando podría ser opcional). Ahora, si el archivo se va a mover a otro servidor distinto al que lo subió (el archivo) .. OK, usa FTP sin problemas para moverlo de forma segura a donde corresponda.

Un saludo,
  #10 (permalink)  
Antiguo 21/04/2004, 07:20
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Chicos ...

Chicos:
Muy buena sus respuestas pero no entendí nada. Lo que quiero hacer es subir los archivos a un servidor remoto, es decir, donde está publicada mi web, desde cualquier otra PC conectada a la red. Me podían explicar un poco mejor ?
Salu2
__________________
Ing. Reynier Pérez Mira
  #11 (permalink)  
Antiguo 21/04/2004, 07:33
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Cluster de nuevo por aquí

Me sigue dando el mismo error:
Cita:
Possible file upload attack! Here's some debugging info:
Array
(
[userfile] => Array
(
[name] => 1082320851.jpg
[type] => image/pjpeg
[tmp_name] => C:\WINDOWS\TEMP\php16C.tmp
[error] => 0
[size] => 27359
)

)
El codigo es este:
Código PHP:
 <?php
$uploaddir 
"upload/";
print 
"<pre>";
if (
move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'], $uploaddir.$HTTP_POST_FILES['file']['name'])) {
   print 
"File is valid, and was successfully uploaded. ";
   print 
"Here's some more debugging info:\n";
   
print_r($_FILES);
} else {
   print 
"Possible file upload attack!  Here's some debugging info:\n";
   
print_r($_FILES);
}
print 
"</pre>";
?>
Salu2

PD: A y me sigue creando el fichero sin extensión con el contenido en caracteres extraños, algo como esto:
Cita:
ÿØÿà JFIF  H H ÿÛ C 




  ÿÛ C  

 ÿÀ ^^" ÿÄ   
ÿÄ µ  } !1AQa"q2‘¡#B±ÁRÑð$3br‚
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ× ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ   
ÿÄ µ  w !1AQaq"2B‘¡±Á #3RðbrÑ
$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvw xyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓ ÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ   ? ñŽ?´Ä=/ãO‰¬lüM,°JEŽ+ÿ †ƒø¢éƒâ™í…¬oÚ)Høóâ²¹ßç\ëÆ0äñŸJúHE4¶>jr—>ç_Ú ⊩ÅSg?ݧAñóâ½íÌv°ø¢v™È …®.O-£ 9#Ò½á†Vy§Õ/#ÊÇþ¯uháÀ›î{—ÅßxwÂðÇwâ9^ø¨bäV
ŸÆŸˆ×3¿á%•²»X>"½}V÷ÈÆOoJ³e¦¬Bt4rDz4»³±¶ø¿ããþ !”gÚµâï÷
~SÇ¥rÚˆÎæÏj»sÓŠ9#Ù
7ç÷Jü]ñÓíÛ²géVãø±ãœÚä‡ÓŠå¼_ =*ÄP¾1SÉ/¸®gç÷l|o!\ë’nÎ1Šãþ,þÐ>5Ñ_#²²ñ ‹§6H©î®SCÒî/®!vs^
¬ÞK_êO{;¸ô=©ªqì¾â%9[KýæÚ|tøšÃð”Ì€rß/ZãçħO̧ýÚåd
3íNƒõ«6ús7Ͷ¯’‘Ÿ4¼Î‚?ä'>)˜¿®Ú¿oñ“â[aO‰¦föZÊÓôWº9ÆÅõ5~w³Ñ“8ïŠ\‘膥.ì×¾$Mƒ/‰æUï•Å6OÞ2ÓŽÄ’3ö8®Xñ4“dFv
å/5'vbͻގUÙ É÷g¡j¿´LŒÄÒãé^e⟎ßáåOMaU¦˜¹ÈÉ&¹¿ØÉ4,ÛN*% g¡p¨Ô“¹:~Ñ?RUoøIçãj½«üsø†±¬£ÄÓ6FN+Ìç“p¡_¿+íš0t `1\0¦šqg|ê4ã4lÿ × <KpH_ý'ö¦ø‰Hî|C+ÇÓ‘^K*
‘ƒéP•' Ž•Ì¿vô:U™ô~ŸûIø®ñŠ¾qÓüš&øÙãÛ´“þ7;GA_9Å#@û£bŸ kiºÛZçsOzì…hËâI(J:¦{øøïâ·³¶¸àâÅ@¿üY+4£Ä¯éŠò ;{µ¼@ÛÀsÞ¤w¸²O‘ÉÉÍuû½9/%£lïÏÄŸÝÝIkòªžø¬
Kâ ®–þ!•¶ö±¢×%i€c Uf» îñ7-Pá
“‹ºeóñcÇš[$_Ìøè0k¸ð·í ¯ê·Õõljˆ¯5šE{]Òà‘Ú±çÓD¬& V|® ³©í§§š>ª´ñ§‹,¬%¹Ò|PÒ\_^k›½ñϵ+Cq{_ÈòFÙÊׄé2Õ |?t¢+†òÇð±$W¡Ù|H·Õ_Œs°ŠfÁèMkF]3”e ksß~~ßÞ4ørɤøŸv³¡ýÏ·óF8Æké? ø§À¿´ÞŽðÚø²)o¥û‚Y\c5ùsuqcw3FT”Ÿ•ÆF*1_xVþsò \Ù^Dþf"}£?A\ÓƒŽ©4êÆ^ëÜúWãWìÓñ“À:¥äº_w«é±åñ“´xâ ¾bÔ>(x÷Oº’Öÿ U»´ž#´¤Ñ• Ž;××_à_ZËßE¦x×N}Aˆòüí¤€=ëÝõÙóáíO£O©Øê6ëÌ¥¼¸ iÇ|㹬=š–¨êU_+?2âÇF5ùXJ?ámxÐcüÕê¿¿cü&º¸š Âݵ½1³%¹`ëùׂÂ1IŠU8(èöh§Qîu#âß@ç^š›ÿ _Æe³ý½)>†¹v…ËpiÆ ƒ,ÜúUr_r}£:gøµã<àë²×¬~Ï?<W©êúÒÏ_JJF¼‘žâ¼PI€x5ëÿ ³\Gûk]ÁêׯÔR”µ‹Œù®™ÖþÑGÇûÊ+€l(Ú95ê´5›ŽÞ*ム¯>û.Ä .\œ
õ¡ð¯CÅŸÅó4<!£Ï®ë6öi–RÃv=+è=N¼/¥Eg
í!G¿ð{Áø{Imfì~ùÆT5j_Jþ Ô$wD<{Õ++z~–ì¢i]Žy_ÛhALw°Aä ‡‘Wa‰TZ¤6Þ0$äZ±mb¸ëDv¥ÀÛÞ®_·ï((r[—Œ¤v«–vlí†8’i`·9 wª¾)Õ@Ò÷òð)__m©çÿ uöÔuÓab ‹$‘Ðô®XÚS¶1•_K-̬I˹É&¬Ùé¥x ×½Y›ÔϲÒ÷mãšÜƒOŠÍ³_v©Ã¥@ZB c8®C[ñ+\ç
:sL“O[ñJlh_ýÞ=+½ÖV%Ø–ªÝÉ!Ö¦ŠÀàyjr«´×-òƒ¶žºj–Øý+V;|/È0(å³E„gý’(Ø8ªš”1Í «(ÚGjÚ{\ñŠ‹û1¦`¡ f“CLñÝbÕm.% ÔÕ ‘$rÛ1
el archivo subido es este:
C:\Documents and Settings\Administrator\My Documents\My Pictures\1082320851.jpg
__________________
Ing. Reynier Pérez Mira
  #12 (permalink)  
Antiguo 21/04/2004, 08:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te dije que usases el código que no te daba esos erroes (no el último que pusistes).

En tu último ejemplo .. fijate que estás menzclando cosas ..

por un lado haces todo con $HTTP_POST_FILES y luego ves lo que viajó en $_FILES (que al parecer es correcto) .. Entonces ¿ por qué no usas lo mismo para todo?: .. $_FILES

otro detalle .. fijate:

en $_FILES tienes "userfile" y luego accedes en $HTTP_POST_FILES a "file"

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 21/04/2004 a las 08:43
  #13 (permalink)  
Antiguo 21/04/2004, 09:48
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Nada

Lo he hecho como me dijiste y me da estos errores:
Cita:
Warning: move_uploaded_file(upload/lapiz.gif): failed to open stream: No such file or directory in c:\program files\apache group\apache\htdocs\upload\3ro.php on line 4

Warning: move_uploaded_file(): Unable to move 'C:\WINDOWS\TEMP\php189.tmp' to 'upload/lapiz.gif' in c:\program files\apache group\apache\htdocs\upload\3ro.php on line 4

Warning: move_uploaded_file(upload/1082320851.jpg): failed to open stream: No such file or directory in c:\program files\apache group\apache\htdocs\upload\3ro.php on line 4

Warning: move_uploaded_file(): Unable to move 'C:\WINDOWS\TEMP\php18A.tmp' to 'upload/1082320851.jpg' in c:\program files\apache group\apache\htdocs\upload\3ro.php on line 4
No OK
El código de index.html y 2do.php se mantienen iguales. Por eso no los pongo. El de 3ro.php lo cambié por este:
3ro.php
Código PHP:
<?php
 $tmpdir 
"upload/";
 for(
$i=0;$i<$_POST['cantidad'];$i++){
  
$bool move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'][$i], $tmpdir.$HTTP_POST_FILES['file']['name'][$i]);
 }
 if(
$bool){
  
printf("OK");
 }else{
  
printf("No OK");
 }
?>
Salu2
__________________
Ing. Reynier Pérez Mira
  #14 (permalink)  
Antiguo 21/04/2004, 11:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te comenté también que uses $_FILES en lugar de $HTTP_POST_FILES .. más que nada por qué no sé como usas "register_gloabals" y por qué es más seguro acceder a archivos que subes por HTTP así.

Y por favor .. aclarate con el código que usas . .has cambiado como 4 veces de código (yo por lo menos ya no sé que es el 1º o el 2º o al código que haces referencia) ... todos con sus errores própios. Así que es imposible recomendar nada, por qué cuando se te recomiendan algo ya has probado otra cosa y llegas con otro problema.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 21/04/2004, 11:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Asegurate también que los permisos de lectura/escritura del directorio destino tengan permisos para eso.

Si usas windows XP pro o 2000, 2003 debes revisarlo, sino PHP no podrá copiar el archivo allá o moverlo desde su origen.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 21/04/2004, 11:27
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Disculpa Cluster

Clsuter disculpa si cambio tanto el código pero es que estoy buscando alternativas a ver si resuelvo el problema. El register_globals mío está en ON y el del server donde voy a publicar la página también. Ahora el código último que probé es este:
Este es el index.html. Aquí digo la cantidad de ficheros que quiero subir.
Código PHP:
<html>
<
head>
<
title>Untitled</title>
</
head>
<
body>
 <
FORM  action="2do.php" method="POST" name="upload" enctype="multipart/form-data" title="upload">
  <
INPUT TYPE="TEXT"  name="cantidad" align="right" size="5" maxlength="5"   title="cantidad">
  <
INPUT TYPE="SUBMIT"  name="envia" value="Siguiente >>">
 </
FORM>
</
body>
</
html
Luego va el 2do.php. Este lo que me hace es imprimirme tantos input como haya especificado antes en la cantidad de archivos a subir.
Código PHP:
 <?php
 printf
("<FORM  action=3ro.php method=POST name=action enctype=multipart/form-data>");
 
printf("<INPUT TYPE=HIDDEN  name=cantidad value=".$_POST['cantidad'].">");
 for(
$i=0;$i<$_POST['cantidad'];$i++){
  
printf("<INPUT TYPE=file  name=file[$i]><br>");
 }
 
printf("<INPUT TYPE=SUBMIT  name=envia value=Enviar>");
 
printf("</FORM>");
?>
Luego el 3ro.php. Este es el que se encarga de hacer el upload de los ficheros.
Código PHP:
 <?php
 $tmpdir 
"upload/";
 for(
$i=0;$i<$_POST['cantidad'];$i++){
  
$bool move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'][$i], $tmpdir.$HTTP_POST_FILES['file']['name'][$i]);
 }
 if(
$bool){
  
printf("OK");
 }else{
  
printf("No OK");
 }
?>
Ah !! Lo del directorio no se que permisos son los que debo de dar ni como darlos.

Salu2
__________________
Ing. Reynier Pérez Mira
  #17 (permalink)  
Antiguo 21/04/2004, 11:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Ah !! Lo del directorio no se que permisos son los que debo de dar ni como darlos.
Eso depende del Sistema Operativo que uses .. En tu servidor remoto lo puedes hacer con tu cliente de FTP con el comando o botón CHMOD dandole permisos de escritura (0666 o similar) al directorio "uploads/" ..

En Windows .. depende .. sólo en Windows XP PRO, 2000 y 2003 puedes dar permisos a usuarios/archivos .. En W9x tan sólo no hay que hacer nada (por defecto está como escritura salvo que edites las propiedades de ese directorio y le des otras ..).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #18 (permalink)  
Antiguo 21/04/2004, 14:09
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pero a quien

Clsuter no se a quien le debo dar los permisos, pues esa carpeta está en Archivos de Programas por lo que tiene permisos de escritura/lectura. Estoy trabajando con Windows2003 Server.

Salu2
__________________
Ing. Reynier Pérez Mira
  #19 (permalink)  
Antiguo 21/04/2004, 14:40
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
loading......




porque no solo usas la funcion copy?



connection closed.
__________________

Maborak Technologies
  #20 (permalink)  
Antiguo 21/04/2004, 14:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
MaBoRaK

En principio .. copy(), fopen() .. y move_uploaded_file() pueden servir para el mismo propósito: mover un archivo de un directorio a otro ..

pero justamente "move_uploaded_file()" tiene permisos para mover archivos sólo dese donde PHP indica que los sube (en su uplad_tmp_dir ..) incluso bajo configuraciones "safe mode" que son altamente restricctivas con el archivo y donde se hubique para copiarlo. (ademas .. mueve el archivo y parece que lo borra del temporal .. así que no has de preocuparte de andar borrando luego ese directorio de archivos que ya tendrás en otro sitio del servidor ..)

----

Reynier ..
No conozco Windows 2003 Server a fondo .. pero tan sólo posicionate en el directorio "upload" y mira a ver si le sacas las propiedades. Si habla algo del tema lo ajustas. (o preguntas en el foro de S.O.: Windows)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #21 (permalink)  
Antiguo 21/04/2004, 18:55
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Huy exelente ese aporte

cluster, exelente eseaporte de las funciones fopen, copy etc

pero hay algo que no te entendi... acerca de las funciones FTP...
entiendo que dices que es mas lenta en cuanto a que tiene que negociar la autentificación, pero no entiendo por que dices que es mas recomendable utilizar la fucnion move_upload_file cuando se trata de mover archivos del clinte al servidor...
bueno, pero no pretendo robarle el header a nuestro compañero, sin embargo quedo con la duda, ahora mismo voy abrir un nuevo tema que trate sobre esto, CLUSTER espero tu participación esn este tema.
HASTA PRONTO
__________________
SEO en Medellin
  #22 (permalink)  
Antiguo 22/04/2004, 06:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te contesto a esas preguntas en el tema nuevo que abristes,
para no mezclar temas. El que desee seguir la conversación puede hacerlo en:

http://www.forosdelweb.com/s/msg197301.html

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #23 (permalink)  
Antiguo 22/04/2004, 11:29
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
nada Cluster

Cluster y otros:
Me van a tener que disculpar pero esto no me da resultados. He probado ahora con una nueva variante de código y me sigue dando errores:
Código PHP:
<?
          
if(!isset($phase)){
           echo 
"<form action='uploadadmin.php?action=admin&type=".$HTTP_COOKIE_VARS['usertype']."&ses=".$HTTP_COOKIE_VARS['sessionid']."&phase=second' method='post' name='filesadmin' id='filesadmin'>
                 <table width='300' border='1' align='center' cellpadding='0' cellspacing='0' bordercolor='#98AAB1'>
                 <tr bgcolor='#BFCFE0'>
                 <td colspan='2' class='menutop'>Cantidad de ficheros a subir </td>
                 </tr>
                 <tr class='txtrg'>
                 <td width='325'>Cantidad de Ficheros a subir: </td>
                 <td width='169' class='txt'><input name='cantidad' type='text' id='cantidad' size='5' maxlength='5'></td>
                 </tr>
                 <tr>
                 <td colspan='2'><div align='center'>
                 <input name='next' type='submit' class='txtcn' id='next' value='Siguiente &gt;&gt;'>
                 </div></td>
                 </tr>
                 </table>
                 </form>"
;
          }elseif((isset(
$phase))&&($phase=="second")){
           echo 
"<form action='upload.php?action=admin&type=".$HTTP_COOKIE_VARS['usertype']."&ses=".$HTTP_COOKIE_VARS['sessionid']."&phase=upload' enctype='multipart/form-data' method='post' name='filesadmin' id='filesadmin'>
                 <table width='300' border='1' align='center' cellpadding='0' cellspacing='0' bordercolor='#98AAB1'>
                 <tr bgcolor='#BFCFE0'>
                 <td colspan='2' class='menutop'>Cantidad de ficheros a subir </td>
                 </tr>"
;
                 for(
$i=0;$i<$_POST['cantidad'];$i++){
                  echo 
"
                  <tr class='txtrg'>
                  <td width='325'>Fichero No. "
.$i.": </td>
                  <td width='169' class='txt'>
                  <input name='file[$i]' type='file' id='file[$i]'>
                  <input name='cant' type='hidden' id='cant' value='"
.$_POST['cantidad']."'>
                  </td>
                  </tr>"
;
                 }
           echo 
"<tr>
                 <td colspan='2'><div align='center'>
                 <input name='next' type='submit' class='txtcn' id='next' value='Siguiente &gt;&gt;'>
                 </div></td>
                 </tr>
                 </table>
                 </form>"
;
          }
          
?>
y el fichero upload.php es este:
Código PHP:
 <?php
 $newdir 
mkdir("files",0777);
 
$tmpdir "marxismo/".$newdir;
 if((isset(
$_GET['action']))&&($_GET['action']=="admin")){
  if((isset(
$_GET['phase']))&&($_GET['phase']=="upload")){
   for(
$i=0;$i<$_POST['cant'];$i++){
     
$dir $tmpdir."/".$_FILES['file']['name'][$i];
     
$bool move_uploaded_file($_FILES['file']['tmp_name'][$i], $dir);
     if(
$bool)
      echo 
"OK";
     else
      echo 
"Pepe";
   }
  }
 }
?>
me da este error:
Cita:

Warning: move_uploaded_file(marxismo/1/1082320851.jpg): failed to open stream: No such file or directory in c:\program files\apache group\apache\htdocs\marxismo\upload.php on line 8

Warning: move_uploaded_file(): Unable to move 'C:\WINDOWS\TEMP\phpF4.tmp' to 'marxismo/1/1082320851.jpg' in c:\program files\apache group\apache\htdocs\marxismo\upload.php on line 8
Pepe
Warning: move_uploaded_file(marxismo/1/connected_multiple_big.jpg): failed to open stream: No such file or directory in c:\program files\apache group\apache\htdocs\marxismo\upload.php on line 8

Warning: move_uploaded_file(): Unable to move 'C:\WINDOWS\TEMP\phpF5.tmp' to 'marxismo/1/connected_multiple_big.jpg' in c:\program files\apache group\apache\htdocs\marxismo\upload.php on line 8
Pepe
Salu2
__________________
Ing. Reynier Pérez Mira
  #24 (permalink)  
Antiguo 23/04/2004, 06:36
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Nada

Sigue sin funcionarme. Alguna idea de si es problema de mi código o de mi PC?
Salu2
__________________
Ing. Reynier Pérez Mira
  #25 (permalink)  
Antiguo 23/04/2004, 07:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. revisastes todo el tema de permisos en tu Windows 2003?

que permisos tiene tu?:

c:\windows\temp

(por cierto .. que valor tiene tu: upload_tmp_dir ? .. podrías subir tus archivos a otro sitio (directorio) así controlas esos archivos de forma independiente y fuera de directorios de sistema ..)

Esto de aqui ...
$newdir = mkdir("files",0777);

No tendrías que hacerlo cada vez que subes un archivo .. con una vez sobra. Es más .. eso (si corresponde) lo harías por FTP (con CHMOD si usas un servicio de hosting) o por las propiedades de tus directorios o control de permisos de tu Sistema Operativo.

También revisa los permisos de:
"marxismo/"

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #26 (permalink)  
Antiguo 23/04/2004, 09:01
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Nada

En realidad ya no se que hacer. Debo presentar el Portal mañana en un Forum Científico y lo más importante que considera mi tutor no lo he logrado hacer que es upload de archivos. Cluster he puesto todos los permisos a la carpeta marxismo completa (es decir lo que en Linux sería 777) y a C:\ que es el valor que le he puesto a mi upload_temp_dir y nada me sigue dando errores. Que hago? Please?

__________________
Ing. Reynier Pérez Mira
  #27 (permalink)  
Antiguo 23/04/2004, 09:31
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Mira lo que descubrí

Cluster:
Me he puesto a correr el código paso a paso con el NuSphere y mirando los valores que toman las variables y me he topado con que mi upload_etmp_dir es este:
Cita:
"C:\\DOCUME~1\\ADMINI~2\\LOCALS~1\\Temp\\php8E.tmp "
sin embargo en mi php.ini lo tengo en "C:\"

Que puede ser eso?
__________________
Ing. Reynier Pérez Mira
  #28 (permalink)  
Antiguo 23/04/2004, 09:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues esa es la ruta donde "al parecer" sube tu archivo:

Que valor tiene tu directiva php.ini:
upload_tmp_dir

Indica ahí una ruta conocida con permisos de escritura/lectura

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #29 (permalink)  
Antiguo 23/04/2004, 10:06
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Lo que tiene es esto

Mi php.ini tiene upload_temp_dir en C:\\ dionde tiene persmisos R/W

Salu2
__________________
Ing. Reynier Pérez Mira
  #30 (permalink)  
Antiguo 23/04/2004, 10:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo usaría cualquier otro directorio .. create uno desde el raiz y dale permisos correspondientes tipo:

c:\uploads

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 20:45.