Código PHP:
$archivo=$_FILES['archivo']['tmp_name'];
Parse error: parse error
¿a que puede ser debido?
| ||||
Pueden ser diferencias entre las versiones de PHP... $_FILES se incorporó a partir de 4.1.0 Puedes cambiarlo por $HTTP_POST_FILES si la version de tu servidor es anterior... Saludos!!!
__________________ Manoloweb |
| ||||
Gracias, ya lo habia probado, pero tampoco funciono, cosa que no entiendo, pues según phpadmin el server tiene las siguientes versiones MySQL ver. 4.0.12 PHP ver. 4.2.3 Y php.ini esta configurado como register_globals= on file_uploads= 1 upload_max_files= 1M upload_tmp_dir= /tmp/ Todo es teoricamente correcto, pero no funciona. Pd.: el tamaño del archivo que intento subir es de 30000 bytes, luego voy sobrado con la limitación del upload_max_files. Un saludo |
| |||
Hola, Siempre cabe la posibilidad que el error este en la linea anterior, pero que PHP lo detecte en esa. Cuando digo anterior, quiero decir anterior(es). Pon unas cuantas lineas mas de codigo, las anteriores. Saludos.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
El problema no creo que esté en el codigo, cuando lo ejecuto a nivel local funciona perfectamente, el problema es cuando esta en el servidor del hosting que no funciona, no obstante aqui tienes el codigo: Código PHP: Código PHP: Un saludo |
| |||
Bueno, fijate: Código PHP: Saludos.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
![]() Tendre que ir pensando en pedir cita con el oculista. Muchas gracias. No obstante, y siguiendo en lo mismo, ahora me da los siguientes errores: Warning: open_basedir restriction in effect. File is in wrong directory Warning: fopen("/tmp/phpAyIIgJ", "rb") - Operation not permitted Warning: fread(): supplied argument is not a valid File-Handle resource Warning: fclose(): supplied argument is not a valid File-Handle resource Supongo que arreglando el primero se solucionaran los siguientes. pero lo que no entiendo es a que clase de restriccion se refiere: El codigo que da error es el siguiente: Código PHP: |
| |||
Pues esforzandote un poco y buscando en el manual ne www.php.net , podrias haber llegado a esta pagina: http://www.php.net/manual/en/feature...i.open-basedir . Dale un repaso, y si no entiendes algo en concreto, pregunta. Aunque la solucion pasa por modernizar la funcion para copiar la imagen (aunque sea temporalmente para luego cargarla en la BD). Suerte.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| |||
No sé que función estas usando para mover tu archivo que subes desde el /tmp donde se supone que te está subiendo los archivos que subes por "Upload" HTTP (por tu $_FILE ...) .. pero, este error es de permisos de lectura/acceso: Warning: fopen("/tmp/phpAyIIgJ", "rb") - Operation not permitted Eso lo deberias de solucionar usando en lugar de copy() si lo usas .. usar move_uploaded_file() ... Si pretendes leerlo directamente (con tu fopen() ..) y no te deja .. tendras que primero "mover" ese archivo hacia algun directorio de tu sisito para poder hacer un fopen() en tus directorios donde tendras permisos para hacer esa operación (y luego borrar el archivo con unlink() ...) Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| ||||
Cluster, no entiendo muy bien que me dices, llevo 4 dias con php y la verdad es que no me aclaro mucho. Te explico el procedimiento que sigo con el tratamiento de la imagen: Capturo la imagen con un formulario Código HTML: <form enctype="multipart/form-data" action="registrar.php" method="post"> <table border="0"> <tr> <td><strong>Imagen:</strong></td> <td><input type="file" name="archivo" size="50"></td> </tr> </table> </form> Código PHP: Código PHP: Y evidentemente cuando le digo que me reproduzca la imagen con Código PHP: Código PHP: Warning: open_basedir restriction in effect. File is in wrong directory Warning: fopen("/tmp/phpAyIIgJ", "rb") - Operation not permitted Asi que como veras no uso ningún copy(), que tampoco se usarlo aunque revisare el manual, y no puedo introducir el move_upload_file() Un saludo Última edición por Pandragon; 22/04/2003 a las 13:14 |
| |||
mmm no lo he probado .. pero mira de usar: En lugar del [tmp_name] que lo tienes en un directorio que no tienes acceso .. al [name] del archivo ... Código PHP: Código PHP:
__________________ 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; 22/04/2003 a las 13:10 |
| ||||
Cluster gracias por la ayuda, la 1ª opcion no funciona, he utilizado el move_uploaded_file y ya no da el error de permiso. No obstante, cuando quiero que me descargue la imagen uso: Código PHP: Código PHP: Un Saludo |
| |||
Y te guarda "algo" en tu BD en ese campo 'imagen' ? .. Ahora q lo veo . jeje .. Borro la imagen en cuento abres el archivo (fopen) .. osese .. el unlink() debe ir debajo del fread() y no justo debajo del fopen() como te puse .. Pruebalo y revisa tu BD si le llegan datos .. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| ||||
Si, me di cuenta y coloque el codigo de la siguiente manera: Código PHP: En cuanto a si me graba datos en la bd si que me los guarda, pero no me los muestra. Cosa que no entiendo, en mi ordenador me funciona bien. Un saludo |
| |||
Hola, ¿No te encuentra la imagen o te muestra imagen erronea? Es que puede ser un problema con las configuraciones, en concreto con la de magic_quotes. Lo digo porque al guardar en la BD haces un addslashes() y al sacarlo no haces un stripslashes(). Prueba con un echo stripslashes($contenido). Tambien podria ser el header(content-disposition), creo que solo es necesario el content-type. Suerte.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
He probado con stripslashes($contenido), pero tampoco funciona. En cuanto al uso de (content-disposition: ; filename=\"$nombre\"" según la ayuda de php el procedimiento es el que uso. O por lo menos es lo que he entendido aqui: http://www.php.net/manual/es/function.header.php y mas exactamente en este articulo: dpiper at stens dot com 23-May-2002 06:34 For inline images (JPEG for example): header('Content-Type: image/jpeg'); header('Content-Disposition: inline; filename=file.jpg); No obstante, no creo que el problema se encuentre en el scrip de lectura de la imagen, si no en el hecho de carecer de permisos. Antes de usar la opción move_uploaded_file, indicada por cluster, me guardaba todos los datos a excepcion del campo de image, este lo dejaba en blanco. Despué de utilizar el move_uploaded_file si que me guarda datos en ese campo, si son correctos o no eso ya no te lo puedo decir por que no puedo ver la imagen. Vuelvo a indicar que todo funciona perfectamente cuando hago la prueba a nivel local, donde si tengo permisos de acceso, pero el problema surge cuando lo subo al server, donde no tengo permisos de acceso. Para arreglar esto estoy intentando averiguar como funcionan las instrucciones: http://www.php.net/manual/en/function.ini-set.php ini_set (): que teoricamente permite modificar el php.ini durante la ejecucion del script. ini_alter () ini_get () ini_restore () Si teneis álgun conocimiento profundo de estas instrucciones os agradeceria un pequeña explicacion. Un saludo Última edición por Pandragon; 23/04/2003 a las 05:25 |
| |||
Lo unico que queda es ir haciendo pruebas. Yo creo que debes ser un problema de distintas configuraciones de PHP/web server/Sistema operativo. Haz las pruebas el el servidor de internet, no en el local. Primera prueba: quita el unlink() (que borra el fichero temporal al que has movido el upload), e intenta acceder a el por el navegador. Si lo ves, es que el fichero se sube correctamente. Si no, ya sabes que el error esta al subir la imagen. Superada la primera, vamos por la segunda: quita el addslashes() al grabar la imagen. Puede que con la configuracion del PHP ya este añadiendo los slash al hacer el upload y con esa funcion le estes añadiendo de mas. Si con esto se soluciona, para que te funcione tanto en local como en internet, deberias condicionar la ejecucion de addslashes() a la configuracion de PHP (creo que en el manual viene, no se si en addslashes() o en stripslashes()). Suerte.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| |||
Por cierto, en uno de los comentarios de los usuarios en fread() http://www.php.net/manual/en/function.fread.php comenta que para que fread() sea binary-safe (lea correctamente los ficheros binarios) debe desactivarse el magic_quotes_runtime con set_magic_quotes_runtime(0) antes de hacer el fread(). Si no, no se leera correctamente el fichero. Suerte.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
Josemi, el problema no esta en el fread(), el fread() dá error por que no se puede ejecutar la función fopen(), y la función fopen() no se puede ejecutar por que open_basedir esta desabilitado. La solución que propone php es la utilización de la función ini_set o su alias ini_alter, que permite modificar el archivo php.ini temporalmente, pero desgraciadamente mi server tiene esta función deshabilitada por motivos de seguridad. Por lo tanto, la única solución que me queda es la que propone cluster, subir la imagen a un directotio al que si tenga acceso, ejecutar fopen() y guardar el archivo (una vez que pueda ejecutar la funcion fopen () en un directorio en el que tenga acceso y el resto del script no dara problemas.). La duda es como hacerlo pues: Código PHP: En cuanto a lo del archivo binario, en la instrucción [php] $fp=fopen($nombre, "rb"); [/php* se lo indico mediante el uso de "rb", donde "b" es el tipo binario. Gracias y un saludo |
| |||
Hola, Pensaba que el move_upload_file() te lo hacia bien. Lo que no se es en que path lo esta moviendo, no se cual es el valor de $nombre. Si sige siendo lo que le asignabas antes, es solo el nombre del fichero ('pp.gif'), sin path. Prueba a especificarle el path absoluto. Por cierto, comprueba el valor devuelto por move_uploaded_file(), si es false es que no se ha podido mover. Y te comentaba lo de fread() porque parecia que decias que si guardaba datos en la BD, y puede ser que el fread() corrompiera los datos al leerlos por lo de magic_quotes_runtime. Saludos.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| |||
el move_uploaded_file() tal cual lo empleas con $archivo (que llega de $_FILES['imagen']['tmp_name'] y $nombre (que llega de $_FILES['image']['name'] .. debería guardarte en el mismo directorio que ejecutes ese script (el cual tendrá que tener permisos de escritura al menos) el archivo que has subido por tu "Upload HTTP" .. Tambien tienes funciones tipo is_uploaded_file() para comprobar si el archivo ha subido (llegó al tmp_ ..) para que puedas luego moverlo o copiarlo .. A todo esto .. revisa en tu phpinfo() del servidor donde no te funciona el tema de: Cita: Sobre todo la directiva: file_uploads y que el directorio temporal para los "uploads" sea alguno distinto de "no value" (ademas de que el tamaño máx. de archivo sea mayor de 0) .. Si alguna de estas directivas no tiene esos valores (aprox.) No estará habilitado el "Upload" en ese servidor.; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). upload_tmp_dir =/tmp ; Maximum allowed size for uploaded files. upload_max_filesize = 2M 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; 23/04/2003 a las 10:31 |
| ||||
Primero agradeceros vuestro interes. segundo, e implementado la siguiente funcion en mi script para comprobar si se subia correctamente el archivo: Código PHP: el archivo se ha subido bien. Con lo cual entiendo que hasta el fichero temporal lo sube bien. tercero las variables del sistema estan configuradas de la siguiente forma: file_uploads= 1 upload_tmp_dir= /tmp/ upload_max_filesize= 1M. Con lo cual teoricamente permite la subida de ficheros, ya comprobada anteriormente. cuarto ya he intentado colocar el path completo, con el consiguiente aviso de que no estoy autorizado, el porque pues ya he pasado la correspondiente pregunta al servicio tecnico del hosting, ya veremos que me contestan. en fin seguire probando ![]() Gracias y un saludo |
| |||
Y si haces... Código PHP: <editado> y despues ... Código PHP: Recuerda que como te dijeron, move_uploaded_file() devuelve un bool, osea que puedes hacer: [PHP] if (move_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'], "imagen.jpg")) { echo "se movio"; } else echo "no se movio"; </editado> Última edición por fran86; 23/04/2003 a las 22:27 |
| |||
Pandragon Y despues de todas las recomendaciones .. cual era el problema y su solución final? ... Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| ||||
El problema estaba en el open_basedir desabilitado, y la solucion ha sido pelearme con el hosting, y ante su negativa a cambiarme esa variable de la configuración del php aduciendo que estaba desabilitada por motivos de seguridad, buscarme un hosting donde si estuviera habilitada. Ya se que la solución no ha sido muy ortodoxa, y que posiblemente, profundizando más en la raíz del problema, se podría haber solucionado a través de programación, pero esta me ha parecido mas rapida. No obstante, como sigo manteniendo cuenta con ellos, seguiré intentándole darle una solución a través de programación, si lo logro os postearé como por si a alguno le sirve para algo. Muchas gracias por vuestra ayuda. Un Saludo |