Судя по всему, принимающий скрипт находится вне вашей власти или вам как минимум неьзя его править. Я угадал? :-)
В документации PHP
написано, что он "способен получать загруженные файлы из любого браузера, совместимого со стандартом RFC-1867". В стандарте
RFC-1867, в свою очередь, введён тип кодирования "multipart/form-data". Следовательно, чтобы PHP понял, что ему передают не просто переменную в POST, а файл (и пометил его в массив $_FILES), нужно, чтобы клиент передал ему соответствующий тип. Так что можно либо внимательно изучить документ и организовать передачу самому, используя сокеты, либо внимательно изучить документацию в PHP к cURL.
В PHP 5.5 изменились правила использования cURL, таким образом, чтобы передать файл, нужно использовать объект
CURLFile (кстати, в русской версии документации этой страницы нет). В коде это будет выглядеть как-то так (не проверял).
$ch = curl_init();
$curlfile = new CURLFile('/home/user/we-are-champions.mp3', 'audio/mp3', 'best-song.mp3')
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlfile);
$content = curl_exec($ch);
curl_close ($ch);
Ну, или просто откатитесь на более старую версию PHP (до 5.5) и используйте тот подход, который описан в ответе выше. Но это неразумно, на мой взгляд.