Вы должны попробовать var_dump($body)
, чтобы увидеть, что действительно содержит $body
.Если вы настроили cURL, $body
будет содержать ответ сервера или false в случае сбоя.Невозможно провести различие между пустым ответом или ложным с echo
.Возможно, запрос проходит нормально, а сервер просто ничего не возвращает.
Однако, как уже говорили другие, ваш путь к файлу кажется неверным.getcwd()
не выводит окончательный /
, и вам нужно будет добавить его, чтобы код работал.Поскольку вы сказали, что он работает в Linux, даже без пропущенной косой черты, мне интересно, как он находит ваш файл.
Я бы посоветовал вам создать путь к файлу относительно выполняемого сценария PHP, илипредоставить абсолютный путь и не полагаться на getcwd()
, который, вероятно, не возвращает то, что вы ожидаете.Значение getcwd()
может быть непредсказуемым для всех систем и не очень переносимым.
Например, если файл, который вы пытаетесь POST, находится в той же папке, что и ваш PHP-скрипт:
$post = array('image' => '@image.jpg');
достаточно.Если необходимо, укажите абсолютный путь: $post = array('image' => '@/home/youruser/yourdomain/image.jpg');
Как сказал Теренс, если вам нужен код, переносимый в Linux и Windows, рассмотрите возможность использования предопределенной константы PHP DIRECTORY_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