Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/12/2012, 03:37
DoHITB
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Archivos VB.net - PHP

Buenas,

Estoy creando un repositorio de apps en el cual almaceno versiones de varias de mis apps.

Entonces, estoy intentando crear una aplicación de escritorio con VB.net que me facilite la tarea. El algoritmo que intento seguir es el siguiente:

Código:
--> click en botón (por ejemplo "subir última versión de APP test_1"): lanza la rutina fupload.

public sub fupload
        Dim post(1) As String
        Dim res As Boolean
        res = Module1.cpy("ruta_origen\archivo_con_nombre_largo", "ruta_origen\ACNL")
        post(0) = "nxtkt=" + System.Web.HttpUtility.UrlEncode("test1")
        If res Then
            post(1) = "fxtkt=" + System.Web.HttpUtility.UrlEncode("ruta_origen\ACNL")
        Else
            post(1) = "fxtkt=" + System.Web.HttpUtility.UrlEncode("ruta_origen\archivo_con_nombre_largo")
        End If

        Dim f As New StreamWriter("../_data/text_1.HTML", False)
        Module1.fwrite(f, Module1.GetHTML("http://www.miweb.com/subir.php", post))
End sub
A destacar:

- cpy copia un archivo del primer parámetro al segundo. Lo uso para acortar los nombres y evitar conflictos (por si están en uso, o algo así...)
- getHTML es una función que hace una llamada HTTP a la ruta indicada; si hay datos post (array), los envía también. Retorna el HTML generado por la página

- Tanto cpy como getHTML están testeados y funcionan 100%

Bien, ahora empieza el meollo del problema:

Primero he probado a llamar directamente a una página que hace lo siguiente:

Código PHP:
Ver original
  1. $archivo = $_FILES['fxtkt']['tmp_name'];
  2. $tamanio = $_FILES['fxtkt']['size'];
  3. $tipo = $_FILES['fxtkt']['type'];
  4. $nombre = $_FILES['fxtkt']['name'];  
  5.  
  6. if($archivo != "none"){
  7.     $fp = fopen($archivo, "rb");
  8.     $fxtkt = fread($fp,$tamanio);
  9.     $txtkt = addslashes($fxtkt);
  10.     fclose($fp);
  11.  
  12.     $connection = mysql_select_db("database",($con = mysql_connect("host","user","pass")));
  13.     $ret = mysql_query("insert into vbxtkt(name_xtkt, file_xtkt) values('".$_POST['nxtkt']."', ".$fxtkt.")");
  14.    
  15.     if($ret){echo("1");}
  16.     else{echo("0");}
  17. }else{
  18.     echo("-1");
  19. }

Pero me da error en fopen, diciendo que $archivo está vacío (ya se que el if está "mal"...), así que he cambiado de estrategia, usando una página "puente", que hace lo siguiente:

Código PHP:
Ver original
  1. echo('<form name="up" action="subir.php" method="post" enctype="multipart/form-data"><input type="text" name="nxtkt" value="'.$_POST['nxtkt'].'" /><input type="file" name="fxtkt" value="'.$_POST['fxtkt'].'" /></form>');
  2. echo('<script type="text/javascript">document.up.submit();</script>');

Adicionalmente, en subir.php he puesto un print_r de $_POST y $_FILE. el $_POST lo tengo bien, pero en cuanto a $_FILES, me da un array con error 4 (no han subido fichero...)

No sé dónde podría estar el error... ¿me podéis ayudar?

Gracias.