CURL: problem ze zwracaniem curl_getinfo() po wykonaniu pli

Witam,

Potrzebuje dostać Info o całkowitej liczbie pobranych bajtów na końcu wykonania tego skryptu i dopiero wtedy edytować rekord w bazie.

Aktualnie działa to tak, że rekord w bazie aktualizuje się zaraz po załadowaniu kodu i zmienna $transfer nic nie zwraca… Jak to zrobić…?

$ch = curl_init($file);

		curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);

		curl_setopt($ch, CURLOPT_RESUMSE_FROM, $seek_start);

		curl_setopt($ch, CURLOPT_NOBODY, false);

		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

		curl_setopt($ch, CURLOPT_HEADER, 0);

		curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);

		curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);

		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30');

		$result = curl_exec($ch);

		$transfer = curl_getinfo($ch, CURLINFO_SIZE_UPLOAD); // całkowita liczba wysłanych bajtów


 		if(!empty($result))

		{

			mysql_query("UPDATE `downloads` SET `transfer`='".$transfer."', `finished`='1' WHERE `id`='".$downloads_id."' ") or die (mysql_error());

		}


		curl_close($ch);
  1. Nie sprawdzasz, czy żądanie faktycznie się wykonało, czy zakończyło błędem

  2. Masz literówkę, powinno być CURLOPT_RESUME_FROM a nie CURLOPT_RESUMSE_FROM

  3. Nie pobierasz ani nagłówka (CURLOPT_HEADER, 0), a body (CURLOPT_NOBODY, false). Nie jestem pewien, ale sprawdź to.

Nagłówki nie są mi potrzebne, bo gdy je pobieram to plik zapisuje się jako .php

Tutaj jest przykład:

<?php

    //get Zend home page

    $curl = curl_init('http://www.zend.com/');

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

    curl_exec($curl);


    //dump information about the request

    print("CURLINFO_CONNECT_TIME: " .

        curl_getinfo($curl, CURLINFO_CONNECT_TIME) .

        '
');

    print("CURLINFO_CONTENT_LENGTH_DOWNLOAD: " .

        curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD) .

        '
');

    print("CURLINFO_CONTENT_LENGTH_UPLOAD: " .

        curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_UPLOAD) .

        '
');

    print("CURLINFO_CONTENT_TYPE: " .

        curl_getinfo($curl, CURLINFO_CONTENT_TYPE) .

        '
');

    print("CURLINFO_EFFECTIVE_URL: " .

        curl_getinfo($curl, CURLINFO_EFFECTIVE_URL) .

        '
');

    print("CURLINFO_FILETIME: " .

        curl_getinfo($curl, CURLINFO_FILETIME) .

        '
');

    print("CURLINFO_HEADER_SIZE: " .

        curl_getinfo($curl, CURLINFO_HEADER_SIZE) .

        '
');

    print("CURLINFO_HTTP_CODE: " .

        curl_getinfo($curl, CURLINFO_HTTP_CODE) .

        '
');

    print("CURLINFO_NAMELOOKUP_TIME: " .

        curl_getinfo($curl, CURLINFO_NAMELOOKUP_TIME) .

        '
');

    print("CURLINFO_PRETRANSFER_TIME: " .

        curl_getinfo($curl, CURLINFO_PRETRANSFER_TIME) .

        '
');

    print("CURLINFO_REDIRECT_COUNT: " .

        curl_getinfo($curl, CURLINFO_REDIRECT_COUNT) .

        '
');

    print("CURLINFO_REDIRECT_TIME: " .

        curl_getinfo($curl, CURLINFO_REDIRECT_TIME) .

        '
');

    print("CURLINFO_REQUEST_SIZE: " .

        curl_getinfo($curl, CURLINFO_REQUEST_SIZE) .

        '
');

    print("CURLINFO_SIZE_DOWNLOAD: " .

        curl_getinfo($curl, CURLINFO_SIZE_DOWNLOAD) .

        '
');

    print("CURLINFO_SIZE_UPLOAD: " .

        curl_getinfo($curl, CURLINFO_SIZE_UPLOAD) .

        '
');

    print("CURLINFO_SPEED_DOWNLOAD: " .

        curl_getinfo($curl, CURLINFO_SPEED_DOWNLOAD) .

        '
');

    print("CURLINFO_SPEED_UPLOAD: " .

        curl_getinfo($curl, CURLINFO_SPEED_UPLOAD) .

        '
');

    print("CURLINFO_SSL_VERIFYRESULT: " .

        curl_getinfo($curl, CURLINFO_SSL_VERIFYRESULT) .

        '
');

    print("CURLINFO_STARTTRANSFER_TIME: " .

        curl_getinfo($curl, CURLINFO_STARTTRANSFER_TIME) .

        '
');

    print("CURLINFO_TOTAL_TIME: " .

        curl_getinfo($curl, CURLINFO_TOTAL_TIME) .

        '
');

    ?>

Który zwraca CURLINFO_SIZE_UPLOAD = 0 ale tutaj jest ok, bo do usera nic nie wysyła tylko pobiera do wyświetlenia na stronie wiec download.

A UPLAOD jest do wysyłania do usera…

no dalej nie wiem jak to rozwiązać.

Sorry, nie do końca zrozumiałem o co Ci chodziło.

Chcesz za pomocą cURL wysłać czy pobrać plik? Trochę zgłupiałem, Twój kod wygląda jakbyś chciał pobierać, a pytasz się o ilość wysłanych bajtów

Skrypt dostaje link do zewnętrznego pliku który znajduje się na innym serwerze B.

Ja pobieram ten plik do siebie na komputer przez mój serwer A.

Aby pobrać plik przez mój serwer A. Musze najpierw pobierać go z B do A i dopiero wtedy wysyłać do siebie na komputer. Czyli jest download (gdy pobiera z B), a upload gdy wysyła z A na mój komputer.

Czyli powinny być oba parametry UPLAOD I DOWNLOAD. Ja tak to rozumiem…

  1. Pobierz plik z serwera B przy pomocy curl.

  2. Dodajesz dane do bazy MySQL.

  3. Sprawdzasz czy nie wystąpił błąd.

  4. Ustawiasz header() np. tak jak tu.

  5. Wyświetlasz to co zwrócił ci curl.

Z serwera B na serwer A pobierasz plik za pomocą cURL, ale już na swój komputer ściągasz go przecież bez cURL. Dlatego w UPLOAD masz zero.