Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: REST PUT php upload psuje wysyłąny plik
Forum PHP.pl > Forum > PHP
trzczy
Siemanko. Chciałbym napisać skrypt php wysyłający plik na serwer openstack. Z tego serwera dostałem token i specjalną ścieżkę dostępu. Komenda curl uruchamana w cli przez ssh działa mi dobrze. Ale po przepisaniu na php wysyłany plik ulega deformacji. Powiększa się z 660kB do 660.29kB albo 660.31kB. Kiedy go potem ściągam na peceta, to po ściągnięciu nie chce się uruchomić w playerze. (Przed wysyłką na serwer chciał. Jest to plik video.)

Oto kod:

  1. $ch = curl_init();
  2.  
  3. curl_setopt($ch, CURLOPT_URL, "https://raz-ul.domena.com/v1/AUTH_8a619275-f933-4da1-b289-0c06a1a2a3a4/bcd/drop91.avi");
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
  6.  
  7. $headers = array();
  8. $headers[] = "X-Auth-Token: AUTH_tkaacb23cace324039a3be9c81b1b2b3b4";
  9. $headers[] = "Content-Type: video/avi";
  10. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  11.  
  12. $curlFile = curl_file_create ('./drop.avi');
  13. $curlFile->setMimeType('video/avi');
  14.  
  15. $post = array (
  16. 'type' => 'video/avi',
  17. 'file_contents' => $curlFile
  18. );
  19. curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
  20.  
  21. $response = curl_exec($ch);
  22. $info = curl_getinfo($ch);
  23. curl_close($ch);
  24.  
  25. $header_size = $info['header_size'];
  26. $header = substr($response, 0, $header_size);
  27. echo"<pre>";
  28. var_dump($header);
  29. var_dump($info);
  30. echo"</pre>";


Jak go poprawić?
Z góry dziękuję
maly_swd
zobacz co masz w pliku na początku i na końcu (w edytorze HEX). Być może curl dokleja jakieś swoje nagłówki nie tam gdzie trzeba.

viking
A spróbuj wysłać zewnętrzną biblioteką która przy okazji ustawi sama wszystkie potrzebne rzeczy.
https://github.com/guzzle/guzzle
Nie wiem czemu ludzie tak lubią się molestowac czystym curlem.
trzczy
@maly_swd faktycznie curl dokleja swój kod. Zrobiłem screena z hex editor. Wszystko przed słowem "RIFF" zostało doklejone w czasie uploadu. Tylko jak teraz unikać tego doklejania?





@viking ok, ale ten przypadek nie daje mi spokoju.
maly_swd
CURLOPT_HEADER

curl_setopt($ch, CURLOPT_HEADER , false);

albo coś w ten deseń.

Albo to:

curl_setopt($ch, CURLOPT_NOBODY, true);

Albo
curl_setopt($ch, CURLINFO_HEADER_OUT, true);


nie mam teraz czasu sprawdzić biggrin.gif

trzczy
Cytat(maly_swd @ 17.02.2017, 17:35:36 ) *
curl_setopt($ch, CURLOPT_HEADER , false);
Albo to:
curl_setopt($ch, CURLOPT_NOBODY, true);
Albo
curl_setopt($ch, CURLINFO_HEADER_OUT, true);


Nie pomagają te opcje.
maly_swd
Plik psuje się podczas wysyłania czy podczas pobierania?
trzczy
Wysyłania. Na serwerze docelowym ma 660,21 kB. A jak wysyłam curlem z terminala, to ma normalnie 660kB na serwerze docelowym.
maly_swd
http://php.net/manual/en/function.curl-setopt.php
Dokumentacja mówi o CURLOPT_HEADER

Jeśli nie działa u Ciebie to coś masz źle ustawione. Albo serwer z którego to pobierasz dodaje nagłówki

no to jeszcze CURLOPT_VERBOSE na false lub 0
trzczy
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);

nie pomaga. Spytam admina tego serwera, może wie, co jest grane. To jest lokalizacja w chmurze, a nie wiem, czy to nie jest odbierane przez php curl jako proxy. Przy proxy ten HEADER ma się ponoć jakoś inaczej zachowywać. Poza tym odkryłem php api dla openstack. Dzięki za pomoc.
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.