FAQ
Hola a todos.

Sigo pegandome con un script para insertar un archivo en la base de datos.

El problema que tengo es para que php pueda leer correctamente el
archivo que el usuario selecciona en el formulario con un campo del tipo
"file".

He consultado toda la información que he visto en google sobre hacer un
upload de archivos, sin exito. :-(

He puesto en el script este código para que lea el contenido del archivo:

$contenido= file_get_contents($_FILES["archivo"]["tmp_name"]);


Según la documentación, esto asigna un nombre temporal al archivo que lo
deposita en la carpeta temporal (/tmp/, en mi caso).

Lo curioso es que si voy a esa carpeta no veo ese archivo.

Luego, tras escapar el tipo a bytea, no lo introduce correctamente.

Este código funciona perfectamente:
- ---------------------------------
require('conexion.php');

#lee el contenido del archivo.
$contenido= file_get_contents("/home/user/archivo.pdf");

#codifica a bytea.
$archivo= pg_escape_bytea($contenido);
$ins= "insert into archivo(archivo) values('".$archivo."')";
$q= pg_query($ins) or die("fallo");
- --------------------------------

Pero este, no funciona:

- --------------------------------
require('conexion.php');

#lee el contenido del archivo.
$contenido= file_get_contents($_FILES["archivo"]["tmp_name"]);

#codifica a bytea.
$archivo= pg_escape_bytea($contenido);
$ins= "insert into archivo(archivo) values('".$archivo."')";
$q= pg_query($ins) or die("fallo");
- ----------------------------

El "archivo" es el nombre del campo del formulario donde el usuario
selecciona el archivo en cuestión.

¿Alguna idea?.

Gracias a todos.
- --


< ¡¡Nos vemos!! >
----------------------------
\
\
.::!!!!!!!:.
.!!!!!:. .:!!!!!!!!!!!!
~~~~!!!!!!. .:!!!!!!!!!UWWW$$$
:$$NWX!!: .:!!!!!!XUWW$$$$$$$$$P
$$$$$##WX!: .<!!!!UW$$$$" $$$$$$$$#
$$$$$ $$$UX :!!UW$$$$$$$$$ 4$$$$$*
^$$$B $$$$\ $$$$$$$$$$$$ d$$R"
"*$bd$$$$ '*$$$$$$$$$$$o+#"
"""" """""""

Search Discussions

  • Floydiano at May 5, 2008 at 12:24 am
    Proba de subirlo a un campo longtext

    te paso parte del codigo que uso para un admin, que sube imagenes a DB


    $maxsize=1000000; //seteo el maximo de tamaño de archivo


    //valido que se seleccionara un archivo a subir
    if (!is_uploaded_file($HTTP_POST_FILES['upload_file']['tmp_name']) AND
    !isset($error)) {
    $error = "<b>You must upload a file!</b><br><br>";
    unlink($HTTP_POST_FILES['upload_file']['tmp_name']);
    }

    // valido el tamaño del archivo subido
    if ($HTTP_POST_FILES['upload_file']['size'] > $maxsize AND !isset($error)) {
    $error = "<b>Error, file must be less than $maxsize bytes.</b><br><br>";
    unlink($HTTP_POST_FILES['upload_file']['tmp_name']);
    }

    // valido el formato del archivo, para restringir los archivos que se pueden
    subir
    if($HTTP_POST_FILES['upload_file']['type'] != "image/gif" AND
    $HTTP_POST_FILES['upload_file']['type'] != "image/pjpeg" AND
    $HTTP_POST_FILES['upload_file']['type'] !="image/jpeg" AND !isset($error)) {
    $error = "<b>You may only upload .gif or .jpeg files.</b><br><br>";
    unlink($HTTP_POST_FILES['upload_file']['tmp_name']);
    }

    // copio solo para probar que el upload funciono, copio la imagen subida a
    una carpeta en el server
    if (!isset($error)) {
    copy($HTTP_POST_FILES['upload_file']['tmp_name'],"tmp/".$HTTP_POST_FILES['upload_file']['name']);

    // Esto es por que el upload esta en la misma pagina que el formulario,
    entonces verifico que la pagina se
    // cargo por que la llamo el formulario
    // si esta variable no esta cragada es por que es la primer carga de la
    pagina, no viene del submit del form
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
    // Obtengo el tamaño del archivo
    $PSize = filesize($HTTP_POST_FILES['upload_file']['tmp_name']);
    // Obtengo el binario de el archivo y lo meto entre comillas
    $mysqlPicture =
    addslashes(fread(fopen($HTTP_POST_FILES['upload_file']['tmp_name'], "r"),
    $PSize));
    // armo el script de insert en la base de datos
    $insertSQL = "INSERT INTO articulos ( Nombre, Descrip, Precio, Estado,
    imagen) VALUES
    ('".$_POST['Nombre']."','".$_POST['Descrip']."','".$_POST['Precio']."',
    '".$_POST['Estado']."', '".$mysqlPicture."')";
    // Ejecuto el script
    mysql_select_db($database_ecommerce, $ecommerce);
    $Result1 = mysql_query($insertSQL, $ecommerce) or die(mysql_error());
    }
    //elimino el archivo temporal
    unlink($HTTP_POST_FILES['upload_file']['tmp_name']);



    Espero que esto te sirva, a mi me esta funcionando.
    Saludos

    Dante Alejandro Robé
    http://www.floydiano.com.ar


    2008/5/4 Pablo Braulio <brulics@gmail.com>:
    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Hola a todos.

    Sigo pegandome con un script para insertar un archivo en la base de datos.

    El problema que tengo es para que php pueda leer correctamente el
    archivo que el usuario selecciona en el formulario con un campo del tipo
    "file".

    He consultado toda la información que he visto en google sobre hacer un
    upload de archivos, sin exito. :-(

    He puesto en el script este código para que lea el contenido del archivo:

    $contenido= file_get_contents($_FILES["archivo"]["tmp_name"]);


    Según la documentación, esto asigna un nombre temporal al archivo que lo
    deposita en la carpeta temporal (/tmp/, en mi caso).

    Lo curioso es que si voy a esa carpeta no veo ese archivo.

    Luego, tras escapar el tipo a bytea, no lo introduce correctamente.

    Este código funciona perfectamente:
    - ---------------------------------
    require('conexion.php');

    #lee el contenido del archivo.
    $contenido= file_get_contents("/home/user/archivo.pdf");

    #codifica a bytea.
    $archivo= pg_escape_bytea($contenido);
    $ins= "insert into archivo(archivo) values('".$archivo."')";
    $q= pg_query($ins) or die("fallo");
    - --------------------------------

    Pero este, no funciona:

    - --------------------------------
    require('conexion.php');

    #lee el contenido del archivo.
    $contenido= file_get_contents($_FILES["archivo"]["tmp_name"]);

    #codifica a bytea.
    $archivo= pg_escape_bytea($contenido);
    $ins= "insert into archivo(archivo) values('".$archivo."')";
    $q= pg_query($ins) or die("fallo");
    - ----------------------------

    El "archivo" es el nombre del campo del formulario donde el usuario
    selecciona el archivo en cuestión.

    ¿Alguna idea?.

    Gracias a todos.
    - --


    < ¡¡Nos vemos!! >
    ----------------------------
    \
    \
    .::!!!!!!!:.
    .!!!!!:. .:!!!!!!!!!!!!
    ~~~~!!!!!!. .:!!!!!!!!!UWWW$$$
    :$$NWX!!: .:!!!!!!XUWW$$$$$$$$$P
    $$$$$##WX!: .<!!!!UW$$$$" $$$$$$$$#
    $$$$$ $$$UX :!!UW$$$$$$$$$ 4$$$$$*
    ^$$$B $$$$\ $$$$$$$$$$$$ d$$R"
    "*$bd$$$$ '*$$$$$$$$$$$o+#"
    """" """""""


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php
  • Pablo Braulio at May 5, 2008 at 6:44 pm
    Buff, esto me tiene saturado.

    El caso es que el script funciona si el archivo no es subido al
    servidor. Por ejemplo, este es el código que tengo creado:

    - ----------------------------
    $nombre= $_FILES["archivo"]["name"];
    copy($_FILES["archivo"]["tmp_name"],"temp/".$nombre);
    size= filesize("temp/".$nombre);
    $contenido=
    addslashes(fread(fopen("/home/pablo/curriculum.odt","r"),$size));
    $archivo= pg_escape_bytea($contenido);

    $insert= "insert into....
    - ----------------------------

    Este código es el que procesa los datos introducidos en el formulario
    por el usuario. Lo que hace es mover el archivo temporal a un directorio
    que yo le indico (temp/). Lo miro y el archivo existe. Se recoge el
    nombre y el tamaño. Luego se abre, se lee, se escapa a bytea y se
    inserta. Luego con lo siguiente descargo el fichero:

    - ------------------------
    require('inc/conexion.php');
    header('Content-type: application/force-download');
    header('Content-type: application/octet-stream');
    header('Content-type: application/download');

    $sel= "select documento,nombdoc from comunicacionesclientes where id=
    ".$_GET["id"]." ";
    $q= pg_query($sel) or die("fallo");

    $r= pg_fetch_array($q);

    header('Content-Disposition: attachment; filename='.$r["nombdoc"].'');

    $arch= pg_unescape_bytea($r["documento"]);

    echo $arch;
    - ------------------------

    El problema del código que he puesto primero es que no debe leer
    correctamente el archivo subido, pues al descargarlo, con este último
    script, se descarga pero el contenido no es correcto o mas bien vacío.

    Lo curioso es que si cambio las variables del primer script por una ruta
    fija, fuera del directorio del servidor, funciona perfectamente.

    - -----------------------------
    $nombre= "curriculum.odt";
    $size= filesize("/home/user/curriculum.odt");
    $contenido=
    addslashes(fread(fopen("/home/user/curriculum.odt","r"),$size));
    $archivo= pg_escape_bytea($contenido);

    $insert= "insert ..
    - -----------------------------

    No entiendo que está pasando. Los permisos del archivo son los mismos.

    ¿Alguna idea?.

    Gracias por la ayuda.
    - --


    < ¡¡Nos vemos!! >
    ----------------------------
    \
    \
    .::!!!!!!!:.
    .!!!!!:. .:!!!!!!!!!!!!
    ~~~~!!!!!!. .:!!!!!!!!!UWWW$$$
    :$$NWX!!: .:!!!!!!XUWW$$$$$$$$$P
    $$$$$##WX!: .<!!!!UW$$$$" $$$$$$$$#
    $$$$$ $$$UX :!!UW$$$$$$$$$ 4$$$$$*
    ^$$$B $$$$\ $$$$$$$$$$$$ d$$R"
    "*$bd$$$$ '*$$$$$$$$$$$o+#"
    """" """""""
  • Pablo Braulio at May 5, 2008 at 8:51 pm

    Fernando Zapata Miranda escribió:
    Hola porsiacaso revisate esto Hola.
    1) El form desde donde cargas el archivo
    <form ... method="post" enctype="multipart/form-data">
    <input type="file" name="archivo">
    Si, eso está bien.
    2) en la pagina que recive los datos haces un print_r a $_FILES haber q
    te esta llegando

    echo "<pre>";
    print_r($_FILES);
    echo "<pre>";
    exit();
    La salida:
    Array
    (
    [archivo] => Array
    (
    [name] => avatar.png
    [type] => image/png
    [tmp_name] => /tmp/php0GG66L
    [error] => 0
    [size] => 15331
    )

    )

    3) si usas php 5 pintate cual es tu tmp dir
    echo sys_get_temp_dir(); /tmp
    haber q tal te va con esa info.

    suerte
    Sigo con lo mismo.

    Gracias por el comentario.

    - --


    < ¡¡Nos vemos!! >
    ----------------------------
    \
    \
    .::!!!!!!!:.
    .!!!!!:. .:!!!!!!!!!!!!
    ~~~~!!!!!!. .:!!!!!!!!!UWWW$$$
    :$$NWX!!: .:!!!!!!XUWW$$$$$$$$$P
    $$$$$##WX!: .<!!!!UW$$$$" $$$$$$$$#
    $$$$$ $$$UX :!!UW$$$$$$$$$ 4$$$$$*
    ^$$$B $$$$\ $$$$$$$$$$$$ d$$R"
    "*$bd$$$$ '*$$$$$$$$$$$o+#"
    """" """""""

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedMay 4, '08 at 11:04p
activeMay 5, '08 at 8:51p
posts4
users2
websitephp.net

2 users in discussion

Pablo Braulio: 3 posts Floydiano: 1 post

People

Translate

site design / logo © 2022 Grokbase