Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysyłanie pliku przez Curl
Forum PHP.pl > Forum > PHP
Kasat
W poniższym kodzie chodzi o to by po zalogowaniu się do serwisu (to działa) ma zostać wysłany kolejny formularz, który zawiera tylko jedno pole i jest to pole typu file.
Niestety po wykonaniu funkcji upload() plik nie zostaje wrzucony. Na testowym pliku otrzymuje wynik

Kod
Array
(
    [file] => Array
        (
            [name] => 1.rar
            [type] => application/octet-stream
            [tmp_name] => /var/www/clients/client635/web1671/tmp/phps3NekX
            [error] => 0
            [size] => 1388
        )

)
Array
(
    [target] => default_upload
    [enctype] => multipart/form-data
)


W czym może być problem?

  1. <?php
  2. $url = 'http://adresstrony/login/';
  3. $site = 'http://adresstrony/profil/';
  4. $site2 = 'http://adresstrony/upload.php';
  5. $username = 'xyz';
  6. $password = 'xyz';
  7.  
  8. $html = pobierzstrone($site);
  9.  
  10. preg_match_all('/name="user_login" value="(.*)"/', $html, $b);
  11. $userlogin = $b[1][0];
  12. $data = "id=hdHomeLogin&user_login=".$userlogin."&login=". $username ."&pass=". $password ."";
  13.  
  14.  
  15.  
  16. login($url, $data);
  17.  
  18. $html2 = pobierzstrone($site);
  19.  
  20.  
  21.  
  22.  
  23. //funkcja logownia
  24. function login($url,$data){
  25. $fp = fopen("cookie.txt", "w");
  26. fclose($fp);
  27. $login = curl_init();
  28. curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
  29. curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
  30. curl_setopt($login, CURLOPT_TIMEOUT, 40000);
  31. curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
  32. curl_setopt($login, CURLOPT_URL, $url);
  33. curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  34. curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
  35. curl_setopt($login, CURLOPT_POST, TRUE);
  36. curl_setopt($login, CURLOPT_POSTFIELDS, $data);
  37. return curl_exec ($login);
  38. curl_close ($login);
  39. unset($login);
  40. }
  41.  
  42. //fukcja pobierania strony
  43. function pobierzstrone($site){
  44. $ch = curl_init();
  45. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  46. curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  47. curl_setopt($ch, CURLOPT_TIMEOUT, 40);
  48. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
  49. curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
  50. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
  51. curl_setopt($ch, CURLOPT_URL, $site);
  52.  
  53. return curl_exec ($ch);
  54.  
  55.  
  56. curl_close ($ch);
  57.  
  58. }
  59.  
  60.  
  61. function upload($site){
  62.  
  63. $postFields['file'] = '@' . dirname(__FILE__) . '/1.rar';
  64. $postFields['target'] = 'default_upload';
  65. $postFields['enctype'] = 'multipart/form-data';
  66.  
  67. $login = curl_init();
  68. curl_setopt($login, CURLOPT_TIMEOUT, 40000);
  69. curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
  70. curl_setopt($login, CURLOPT_URL, $site);
  71. curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  72. curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
  73. curl_setopt($login, CURLOPT_POST, TRUE);
  74. curl_setopt($login, CURLOPT_POSTFIELDS, $postFields);
  75. return curl_exec ($login);
  76. curl_close ($login);
  77. unset($login);
  78.  
  79.  
  80. }
  81.  
  82. upload($site2);
  83. ?>


odświeżam
em1X
Nie rozumiem w czym problem, plik się wysłał poprawnie. Na potwierdzenie pole error wynosi 0 (stała ERR_UPLOAD_OK).
Musisz zapoznać się z manualem, jak traktować uploadowane pliki.

Poza tym masz pełno cyrków powypisywanych, w szczególności:
1) funkcja login: niepotrzebne pierwsze dwie linijki, użycie return - po nim kod się nie wywoła
2) funkcja upload: nieistniejące zmienne, tak samo return.

Ogólnie kod jest tragicznie napisany, posiada mnóstwo błędów, nic dziwnego, że nic nie działa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.