Tôi đã có một mã PHP rất đơn giản để tải tệp lên máy chủ từ xa; cách tôi đã làm nó (như đã được đề xuất ở đây trong một số giải pháp khác) là sử dụng cUrl để tải lên các tập tin.Bất cứ ai có thể cho tôi một ví dụ cho lớp CURLFile của PHP?
Dưới đây là mã của tôi:
$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);
Các máy chủ đang chạy PHP 5.5.0 và dường như @filename đã bị phản đối trong PHP> = 5.5.0 như đã nêu here dưới mô tả CURLOPT_POSTFIELDS
, và do đó, Tôi gặp phải lỗi này:
Deprecated: curl_setopt(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead in ...
Điều thú vị là, hoàn toàn không có gì về Lớp này trên php.net ngoài tổng quan lớp cơ bản. Không có ví dụ, không có mô tả về phương pháp hoặc thuộc tính. Về cơ bản nó trống here. Tôi hiểu rằng đó là một lớp hoàn toàn mới với ít hoặc không có tài liệu và sử dụng rất ít trong thế giới thực, đó là lý do tại sao thực tế không có gì liên quan đến các tìm kiếm trên Google hoặc ở đây trên Stackoverflow trên lớp này.
Tôi tự hỏi liệu có ai đã sử dụng lớp CURLFile này và có thể giúp tôi hoặc cho tôi ví dụ về cách sử dụng nó thay cho @filename trong mã của tôi hay không.
Edit:
tôi muốn thêm "upload.php" tôi mã là tốt; mã này sẽ làm việc với các phương pháp truyền thống @filename nhưng không còn được làm việc với mã lớp 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";
}
cuối cùng Sửa:
Muốn thêm cuối cùng/code làm việc cho những người khác tìm kiếm Ví dụ làm việc tương tự của lớp CURLFile hiếm khi các tài liệu ...
curl.php (máy chủ địa phương)
<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 (từ xa máy chủ)
$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";
}
Bạn có thể var_dump ($ _ FILES) không? – Danack
trong upload.php? Nếu tôi làm điều đó - làm cách nào để tôi trả lại kết quả trên trang curl.php của tôi? Tôi đã cố gắng làm điều đó sớm hơn nhưng không có gì thực sự trở lại khi tôi thực thi mã gửi. – luci5r
OK - Đã đặt RETURNTRANSFER thành true; vì vậy đây là kết quả của var_dump ($ _ FILES) trong tệp upload.php: 'mảng (1) {[" tệp "] => mảng (5) {[" tên "] => chuỗi (11)" phpC0F4.tmp "[ "type"] => string (24) "application/octet-stream" ["tmp_name"] => chuỗi (14) "/ tmp/phpj7C3Hv" ["lỗi"] => int (0) ["kích thước"] => int (483397)}} Các tập tin phpj7C3Hv đã được tải lên ' – luci5r