У меня был очень простой PHP-код для загрузки файла на удаленный сервер; то, как я это делал (как было предложено здесь в некоторых других решениях), следует использовать cUrl для загрузки файла.
Здесь мой код:
$ch = curl_init("http://www.remotesite.com/upload.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('fileupload' => '@'.$_FILES['Filedata']['tmp_name']));
echo curl_exec($ch);
Сервер работает под управлением PHP 5.5.0, и похоже, что @filename устарело в PHP >= 5.5.0, как указано здесь под CURLOPT_POSTFIELDS
, и поэтому я получаю эту ошибку:
Deprecated: curl_setopt(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead in ...
Интересно, что в этом классе на php.net нет абсолютно ничего, кроме основного обзора класса. Нет примеров, описания методов или свойств. Это в основном пустое здесь. Я понимаю, что это совершенно новый класс, практически без документации и очень мало реального использования, поэтому практически ничего не стоит в поиске в Google или здесь, в Stackoverflow этого класса.
Мне интересно, есть ли кто-нибудь, кто использовал этот класс CURLFile, и может помочь мне или дать мне пример использования его вместо @filename в моем коде.
Edit:
Я также хотел добавить свой код "upload.php"; этот код будет работать с традиционным методом @filename, но больше не работает с кодом класса CURLFile:
$folder = "try/";
$path = $folder . basename( $_FILES['file']['tmp_name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
echo "The file ". basename( $_FILES['file']['tmp_name']). " has been uploaded";
}
Final Edit:
Требуется добавить Final/Working code для других, которые ищут похожий рабочий пример малодокументированного класса CURLFile...
curl.php(локальный сервер)
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label> <input type="file" name="Filedata" id="Filedata" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
<?php
if ($_POST['submit']) {
$uploadDir = "/uploads/";
$RealTitleID = $_FILES['Filedata']['name'];
$ch = curl_init("http://www.remotesite.com/upload.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$args['file'] = new CurlFile($_FILES['Filedata']['tmp_name'],'file/exgpd',$RealTitleID);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$result = curl_exec($ch);
}
?>
upload.php(удаленный сервер)
$folder = "try/";
$path = $folder . $_FILES['file']['name'];
if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
echo "The file ". basename( $_FILES['file']['name']). " has been uploaded";
}