Należy spróbować var_dump($body)
aby zobaczyć, co naprawdę zawiera $body
. Po skonfigurowaniu cURL, $body
będzie zawierał odpowiedź serwera lub wartość false w przypadku niepowodzenia. Nie ma sposobu na rozróżnienie między pustą odpowiedzią lub fałszem z echo
. Możliwe, że żądanie jest w porządku, a serwer po prostu nic nie zwraca.
Jednak, jak powiedzieli inni, ścieżka do pliku wydaje się nieważna. getcwd()
nie wyprowadza ostatecznej wersji /
i trzeba ją dodać, aby kod działał. Ponieważ powiedziałeś, że działa na Linuksie, nawet bez brakującego slasha, zastanawiam się, jak to jest znaleźć twój plik.
Proponuję utworzyć ścieżkę do pliku w odniesieniu do działającego skryptu PHP lub podać bezwzględną ścieżkę i nie polegać na getcwd()
, która prawdopodobnie nie zwróci oczekiwanego.Wartość getcwd()
może być nieprzewidywalna w różnych systemach i nie jest zbyt przenośna.
Na przykład, jeśli plik który próbujesz POST znajduje się w tym samym folderze co skrypt PHP:
$post = array('image' => '@image.jpg');
jest wystarczająca. W razie potrzeby zapewnić absolutną ścieżkę: $post = array('image' => '@/home/youruser/yourdomain/image.jpg');
Jak powiedział Terence, jeśli potrzebujesz kodu być przenośne całej Linux & Windows, należy rozważyć użycie PHP's Predefined ConstantDIRECTORY_SEPARATOR
$url = "http://yoursite.com/upload.php";
// images\image.jpg on Windows images/image.jpg on Linux
$post = array('image' => '@images'.DIRECTORY_SEPARATOR.'image.jpg');
$this->ch = curl_init();
curl_setopt($this->ch, CURLOPT_URL, $url);
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->ch, CURLOPT_TIMEOUT, 30);
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($this->ch, CURLOPT_POST, 1);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post);
$body = curl_exec($this->ch);
var_dump($body);
getcwd()cURL
Czy masz cURL skompilowane do instalacji PHP na twoim serwerze Windows? Pokaż wyświetlony komunikat o błędzie. Możesz sprawdzić instalację za pomocą skryptu [phpinfo()] (http://php.net/manual/en/function.phpinfo.php). – Orbling
Błąd nie pokazany. (error_reporting = on) – Dador
getcwd() nie powraca z ukośnikiem na końcu, więc brakuje mi tego, poza tym nie powinieneś używać odwrotnego ukośnika w oknach zamiast forwardslasha? –