Đã hỏi 7 năm, 8 tháng trước 7 years, 8 months ago
Đã xem 8k lần 8k times
Tôi đang tìm kiếm một cách để cho phép tải lên tệp nhưng thay vì viết tệp vào đĩa trên máy chủ web, tôi muốn lưu trữ nội dung nhị phân trong một biến. Tôi đã tìm thấy một ví dụ đơn giản để thực sự thực hiện tải lên nhưng tôi không thể tìm ra cách để ngăn chặn việc viết vào tệp và thay vào đó giữ nó trong bộ nhớ.
Có thể làm điều này và nếu vậy làm thế nào?
Send this file:
Đã hỏi ngày 5 tháng 3 năm 2015 lúc 7:22Mar 5, 2015 at 7:22
Nếu bạn chỉ cần tệp đã tải lên cho thời gian chạy PHP thì
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
Sau này nếu bạn cần lưu trữ nó trên MySQL DB, bạn luôn có thể thực hiện 'AddSlashes []' cho nó.
Đã trả lời ngày 5 tháng 3 năm 2015 lúc 7:42Mar 5, 2015 at 7:42
1
Ngày 31 tháng 7 năm 2012 • 12 phút Đọc• 12 min read Tôi đã làm việc trong một dự án mà tôi phải gửi và nhận các tệp nhị phân đến và từ API REST, vì vậy tôi quyết định ghi lại một số mã tôi đã viết. Hãy nhớ rằng tôi đã trích xuất tất cả các đoạn mã này từ một lớp PHP tùy chỉnh mà tôi đã viết, vì vậy nếu bạn làm việc với API, tôi sẽ khuyến khích bạn tạo một lớp của riêng bạn. Trước khi bạn có thể gửi tệp nhị phân đến API, bạn phải lấy nó từ đâu đó. Trong dự án của tôi, tập tin đó đến từ một hình thức. Hình thức có thể đơn giản như thế này: Lưu ý Thuộc tính Thiết lập một biểu mẫu để gửi tệp
1 được đặt thành
2. Bạn phải có bộ này, nếu không tệp sẽ không được gửi.
Lấy tệp đã gửi
Thông thường khi bạn xử lý một biểu mẫu, nội dung được tìm thấy bên trong biến
3 toàn cầu, tuy nhiên dữ liệu tệp nằm trong biến
4 toàn cầu.Nếu bạn in nội dung của
4 trên trang, biểu mẫu đã được gửi, bạn sẽ thấy một cái gì đó như:Array
[
[file] => Array
[
[name] => Array
[
[0] => 400.png
]
[type] => Array
[
[0] => image/png
]
[tmp_name] => Array
[
[0] => /tmp/php5Wx0aJ
]
[error] => Array
[
[0] => 0
]
[size] => Array
[
[0] => 15726
]
]
]
Điều khác thường về mảng này là thay vì nhóm mỗi dữ liệu tệp trong một mảng, mỗi thông tin về một tệp được nhóm lại với nhau. Vì vậy, các giá trị tại Index
6 trong
7,
8,
9, Array
[
[file] => Array
[
[name] => Array
[
[0] => 400.png
]
[type] => Array
[
[0] => image/png
]
[tmp_name] => Array
[
[0] => /tmp/php5Wx0aJ
]
[error] => Array
[
[0] => 0
]
[size] => Array
[
[0] => 15726
]
]
]
0 và Array
[
[file] => Array
[
[name] => Array
[
[0] => 400.png
]
[type] => Array
[
[0] => image/png
]
[tmp_name] => Array
[
[0] => /tmp/php5Wx0aJ
]
[error] => Array
[
[0] => 0
]
[size] => Array
[
[0] => 15726
]
]
]
1 thuộc về một tệp.Dữ liệu tệp nhị phân được đặt trong một bộ lưu trữ tạm thời trên máy chủ của bạn. Trong trường hợp này, tại
Array
[
[file] => Array
[
[name] => Array
[
[0] => 400.png
]
[type] => Array
[
[0] => image/png
]
[tmp_name] => Array
[
[0] => /tmp/php5Wx0aJ
]
[error] => Array
[
[0] => 0
]
[size] => Array
[
[0] => 15726
]
]
]
2.Gửi nội dung nhị phân qua Curl
Đoạn trích sau đây gửi tệp nhị phân đến URL:
$url = '//example.org/api';
$header = array['Content-Type: multipart/form-data'];
$fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]];
$token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m';
$resource = curl_init[];
curl_setopt[$resource, CURLOPT_URL, $url];
curl_setopt[$resource, CURLOPT_HTTPHEADER, $header];
curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1];
curl_setopt[$resource, CURLOPT_POST, 1];
curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields];
curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token];
$result = json_decode[curl_exec[$resource]];
curl_close[$resource];
Hãy nói về từng dòng này, bởi vì một số điều này sẽ phụ thuộc vào các yêu cầu của API bạn đang sử dụng và có thể không cần thiết.
3 là nơi Curl sẽ đăng dữ liệu của bạn.Array [ [file] => Array [ [name] => Array [ [0] => 400.png ] [type] => Array [ [0] => image/png ] [tmp_name] => Array [ [0] => /tmp/php5Wx0aJ ] [error] => Array [ [0] => 0 ] [size] => Array [ [0] => 15726 ] ] ]
4 nói với API rằng có một tệp đang theo cách của nó. Bạn có thể cung cấp nhiều tiêu đề hơn bằng cách thêm các giá trị bổ sung vào mảng.Array [ [file] => Array [ [name] => Array [ [0] => 400.png ] [type] => Array [ [0] => image/png ] [tmp_name] => Array [ [0] => /tmp/php5Wx0aJ ] [error] => Array [ [0] => 0 ] [size] => Array [ [0] => 15726 ] ] ]
5 chứa một mảng kết hợp. Tên trường phụ thuộc vào những gì API mong đợi. Dấu hiệuArray [ [file] => Array [ [name] => Array [ [0] => 400.png ] [type] => Array [ [0] => image/png ] [tmp_name] => Array [ [0] => /tmp/php5Wx0aJ ] [error] => Array [ [0] => 0 ] [size] => Array [ [0] => 15726 ] ] ]
6 trong giá trị cho Curl nói rằng chúng tôi đang xử lý một tệp.Array [ [file] => Array [ [name] => Array [ [0] => 400.png ] [type] => Array [ [0] => image/png ] [tmp_name] => Array [ [0] => /tmp/php5Wx0aJ ] [error] => Array [ [0] => 0 ] [size] => Array [ [0] => 15726 ] ] ]
7 là một mã thông báo mà API còn lại mong đợi như một cookie. Thông thường bạn đăng nhập vào API một lần trong một giao dịch, sau đó sử dụng mã thông báo cho tất cả các yêu cầu tiếp theo. Cookie được gọi làArray [ [file] => Array [ [name] => Array [ [0] => 400.png ] [type] => Array [ [0] => image/png ] [tmp_name] => Array [ [0] => /tmp/php5Wx0aJ ] [error] => Array [ [0] => 0 ] [size] => Array [ [0] => 15726 ] ] ]
8, nhưng điều này có thể khác nhau tùy thuộc vào kỳ vọng của API.Array [ [file] => Array [ [name] => Array [ [0] => 400.png ] [type] => Array [ [0] => image/png ] [tmp_name] => Array [ [0] => /tmp/php5Wx0aJ ] [error] => Array [ [0] => 0 ] [size] => Array [ [0] => 15726 ] ] ]
9 nói với Curl chúng tôi muốn có phản hồi.Array [ [file] => Array [ [name] => Array [ [0] => 400.png ] [type] => Array [ [0] => image/png ] [tmp_name] => Array [ [0] => /tmp/php5Wx0aJ ] [error] => Array [ [0] => 0 ] [size] => Array [ [0] => 15726 ] ] ]
0 cho biết Curl chúng tôi muốn dữ liệu của chúng tôi được đăng.$url = '//example.org/api'; $header = array['Content-Type: multipart/form-data']; $fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]]; $token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m'; $resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HTTPHEADER, $header]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_POST, 1]; curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $result = json_decode[curl_exec[$resource]]; curl_close[$resource];
1 Đặt mã thông báo làm cookie.$url = '//example.org/api'; $header = array['Content-Type: multipart/form-data']; $fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]]; $token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m'; $resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HTTPHEADER, $header]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_POST, 1]; curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $result = json_decode[curl_exec[$resource]]; curl_close[$resource];
Cuối cùng, hãy chú ý dòng cuối cùng:
$result = json_decode[curl_exec[$resource]];
Trong trường hợp của tôi, tôi biết rằng phản hồi mà tôi đã nhận được từ API sẽ ở định dạng JSON, đó là lý do tại sao tôi lại giải mã nó. Ví dụ, bạn có thể không cần điều này nếu bạn nhận lại phản hồi trong XML.
Điều này hoàn thành việc gửi một tập tin nhị phân qua Curl.
Tiếp theo, chúng tôi sẽ xem xét truy xuất tập tin đó.
Lấy nội dung nhị phân thông qua Curl
Tại đây, cách lấy một tệp nhị phân:
$resource = curl_init[];
curl_setopt[$resource, CURLOPT_URL, $url];
curl_setopt[$resource, CURLOPT_HEADER, 1];
curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1];
curl_setopt[$resource, CURLOPT_BINARYTRANSFER, 1];
curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token];
$file = curl_exec[$resource];
curl_close[$resource];
Chúng tôi không phải đi qua bất cứ điều gì ngoại trừ:
2 nói với Curl rằng chúng tôi hy vọng sẽ có một tiêu đề. Điều này rất quan trọng, bởi vì nó cho chúng ta biết loại tệp nào chúng ta đang nhận được, tức là một hình ảnh, một tài liệu từ, PDF, v.v.$url = '//example.org/api'; $header = array['Content-Type: multipart/form-data']; $fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]]; $token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m'; $resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HTTPHEADER, $header]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_POST, 1]; curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $result = json_decode[curl_exec[$resource]]; curl_close[$resource];
3 nói với PHP rằng kết quả sẽ chứa dữ liệu nhị phân. Rất nhiều người cho rằng bạn không cần dòng này. Tôi nói hãy thử nó với và không, chỉ để chắc chắn.$url = '//example.org/api'; $header = array['Content-Type: multipart/form-data']; $fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]]; $token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m'; $resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HTTPHEADER, $header]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_POST, 1]; curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $result = json_decode[curl_exec[$resource]]; curl_close[$resource];
Bây giờ bạn có tệp nhị phân với các tiêu đề được lưu trữ trong
$url = '//example.org/api';
$header = array['Content-Type: multipart/form-data'];
$fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]];
$token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m';
$resource = curl_init[];
curl_setopt[$resource, CURLOPT_URL, $url];
curl_setopt[$resource, CURLOPT_HTTPHEADER, $header];
curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1];
curl_setopt[$resource, CURLOPT_POST, 1];
curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields];
curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token];
$result = json_decode[curl_exec[$resource]];
curl_close[$resource];
4.Đưa tệp lại cho người dùng
Hãy cùng tiếp tục về cách cung cấp lại tệp cho người dùng. Bạn có thể lưu trữ tệp trên máy chủ và cung cấp cho người dùng một URL vào tệp hoặc bạn chỉ có thể để PHP xử lý tất cả những thứ đó một cách nhanh chóng và chỉ cần nhắc người dùng lưu tệp.
Đây là cách tôi đã làm điều đó:
$file_array = explode["\n\r", $file, 2];
$header_array = explode["\n", $file_array[0]];
foreach[$header_array as $header_value] {
$header_pieces = explode[':', $header_value];
if[count[$header_pieces] == 2] {
$headers[$header_pieces[0]] = trim[$header_pieces[1]];
}
}
header['Content-type: ' . $headers['Content-Type']];
header['Content-Disposition: ' . $headers['Content-Disposition']];
echo substr[$file_array[1], 1];
- Trên dòng 1, tôi tách tiêu đề khỏi phần còn lại của tệp.line 1 I separate the header from the rest of the file.
- Trên dòng 2-8 Tôi phân tích nội dung tiêu đề và đặt chúng vào một mảng để tôi có thể dễ dàng tham khảo các yếu tố tôi cần.line 2-8 I parse the header contents and put them in an array so I can easily reference the elements I need.
- Trên dòng 9 & 10 Tôi nói với PHP loại nội dung là gì và tệp nên được gọi là gì.line 9 & 10 I tell PHP what the content type is and what the file should be called.
- Trên dòng 11 Tôi xuất ra tất cả các nội dung nhị phân. Cùng với tiêu đề, nó nhắc người dùng lưu tệp [hoặc hiển thị nó trong trình duyệt nếu nó là một hình ảnh, chẳng hạn].line 11 I output all of the binary contents. Together with the header, it prompts the user to save the file [or displays it in the browser if it’s an image, for example].
Tôi muốn chạm vào hàm trên dòng 11:
$url = '//example.org/api';
$header = array['Content-Type: multipart/form-data'];
$fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]];
$token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m';
$resource = curl_init[];
curl_setopt[$resource, CURLOPT_URL, $url];
curl_setopt[$resource, CURLOPT_HTTPHEADER, $header];
curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1];
curl_setopt[$resource, CURLOPT_POST, 1];
curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields];
curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token];
$result = json_decode[curl_exec[$resource]];
curl_close[$resource];
5Trong trường hợp của tôi, tệp nhị phân có thêm không gian ở đầu tệp. Hàm
$url = '//example.org/api';
$header = array['Content-Type: multipart/form-data'];
$fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]];
$token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m';
$resource = curl_init[];
curl_setopt[$resource, CURLOPT_URL, $url];
curl_setopt[$resource, CURLOPT_HTTPHEADER, $header];
curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1];
curl_setopt[$resource, CURLOPT_POST, 1];
curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields];
curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token];
$result = json_decode[curl_exec[$resource]];
curl_close[$resource];
6 loại bỏ điều đó. Tôi không chắc chắn liệu không gian đó đến từ API hay từ $url = '//example.org/api';
$header = array['Content-Type: multipart/form-data'];
$fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]];
$token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m';
$resource = curl_init[];
curl_setopt[$resource, CURLOPT_URL, $url];
curl_setopt[$resource, CURLOPT_HTTPHEADER, $header];
curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1];
curl_setopt[$resource, CURLOPT_POST, 1];
curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields];
curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token];
$result = json_decode[curl_exec[$resource]];
curl_close[$resource];
7 trên dòng 1, vì vậy nếu điều này không hoạt động cho bạn, hãy thử thay đổi dòng đó thành: $url = '//example.org/api';
$header = array['Content-Type: multipart/form-data'];
$fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]];
$token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m';
$resource = curl_init[];
curl_setopt[$resource, CURLOPT_URL, $url];
curl_setopt[$resource, CURLOPT_HTTPHEADER, $header];
curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1];
curl_setopt[$resource, CURLOPT_POST, 1];
curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields];
curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token];
$result = json_decode[curl_exec[$resource]];
curl_close[$resource];
8Hy vọng rằng thông tin này sẽ làm sáng tỏ cách đăng và truy xuất các tệp ở định dạng nhị phân. Nếu bạn có bất kỳ câu hỏi, hãy để chúng trong một bình luận dưới đây.
Hình ảnh nổi bật của Alexander Sinn.
Trước đây được đăng trong WordPress và chuyển sang Ghost.
Maheshmay 14, 2013 lúc 6:28 sáng
May 14, 2013 at 6:28 am
Xin chào ,Tôi muốn tìm nạp một hình ảnh bằng API Curl và muốn hiển thị trực tiếp trong hộp ưa thích, nhưng nó luôn hiển thị ở định dạng nhị phân. Ngay cả tôi đã thêm tiêu đề ở đó.
Mã tương tự đang hoạt động nếu tôi không sử dụng FancyBox.
Bạn có thể giúp tôi không.
Ryan Sechrestmay 23, 2013 lúc 7:53 tối Sechrest
May 23, 2013 at 7:53 pm
Bạn đã thử lưu trữ hình ảnh trong một tệp tạm thời, để bạn có thể nhúng nó vào hộp ưa thích chưa?
Devmay 31, 2013 lúc 1:16 chiều
May 31, 2013 at 1:16 pm
Xin chào, bạn có thể gợi ý cho tôi về cách tôi có thể xác minh rằng tệp của tôi được tải lên chính xác lên máy chủ không? 1] Tôi có thể gửi một số loại tổng kiểm tra tệp đến máy chủ bằng Curl không? để máy chủ cũng tính toán tổng kiểm tra trên tệp đã nhận và so sánh hai tổng kiểm tra và trả lời với mã phản hồi thích hợp.
Can you suggest me on how can I verify that my file is uploaded correctly to the server?
1] Can I send some kind of file checksum to the server using CURL? so that the server also calculates the checksum on received file and compares two checksums and reply with proper response code.Làm thế nào để làm điều đó trong Curl?
Ryan Sechrestmay 31, 2013 lúc 2:25 chiều Sechrest
May 31, 2013 at 2:25 pm
Bạn có thể tạo một tập lệnh trên máy chủ mong đợi hai giá trị: tổng kiểm tra và tên tệp. Sau đó, bạn có thể đăng hai giá trị đó bằng cách sử dụng Curl. Sau đó, máy chủ sẽ tính toán tổng kiểm tra của tệp hiện có và so sánh nó với những gì bạn đã gửi. Nếu nó phù hợp, bạn có thể trả về một cái gì đó như9 và nếu nó không, bạn có thể trả lại$url = '//example.org/api'; $header = array['Content-Type: multipart/form-data']; $fields = array['file' => '@' . $_FILES['file']['tmp_name'][0]]; $token = 'NfxoS9oGjA6MiArPtwg4aR3Cp4ygAbNA2uv6Gg4m'; $resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HTTPHEADER, $header]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_POST, 1]; curl_setopt[$resource, CURLOPT_POSTFIELDS, $fields]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $result = json_decode[curl_exec[$resource]]; curl_close[$resource];
0 [và tùy chọn xóa tệp]. Vì vậy, yêu cầu đầu tiên tải lên tệp và yêu cầu thứ hai xác minh nó.$result = json_decode[curl_exec[$resource]];
Bharat Masimukkudecember 20 tháng 12 năm 2013 lúc 2:22 sáng
December 20, 2013 at 2:22 am
Xin chào ryanTôi có yêu cầu sau đây. Tải lên hình ảnh định dạng JPG lên máy chủ jpegmini và nhận hình ảnh nén dưới dạng phản hồi.
Vui lòng tham khảo tài liệu JPEGMini dưới đây:
Phương pháp:
1$result = json_decode[curl_exec[$resource]];
URL:
2$result = json_decode[curl_exec[$resource]];
Cơ thể: Dữ liệu của ảnh JPEG nguồn
Lệnh:
3$result = json_decode[curl_exec[$resource]];
Nếu chúng ta phá vỡ lệnh trên:
4 - Chỉ định phương thức bài HTTP$result = json_decode[curl_exec[$resource]];
5 - Chỉ định nội dung cơ thể là JPEG$result = json_decode[curl_exec[$resource]];
6 - Gửi$result = json_decode[curl_exec[$resource]];
7 làm dữ liệu của yêu cầu$result = json_decode[curl_exec[$resource]];
8 - Lưu trữ phản hồi trong$result = json_decode[curl_exec[$resource]];
9 [thay vì stdout]$result = json_decode[curl_exec[$resource]];
Xin lưu ý rằng URL JPEGMini là một ví dụ AWS. Tôi đang dừng trường hợp khi không sử dụng nó. Nếu bạn muốn tôi chạy trường hợp, xin vui lòng cho tôi biết.
Tôi muốn thực hiện yêu cầu Curl này và nhận phản hồi bằng PHP.
Hãy giúp tôi ra.
Ryan Sechrestdecember 20 tháng 12 năm 2013 lúc 4:26 chiều
December 20, 2013 at 4:26 pm
Bạn đã thử lệnh Curl của mình thông qua dòng lệnh và nó có cung cấp cho bạn phản hồi mà bạn đang tìm kiếm không? Nếu vậy, bạn đã thử chuyển đổi nó thành PHP và không thành công? Nếu vậy, hãy đăng mã PHP bạn đã thử trong một ý chính để tôi có thể xem nó.
Manishmarch 11, 2014 lúc 9:00 sáng
March 11, 2014 at 9:00 am
Hello,Khi bạn xác định trong blog của mình, tôi có cùng các bước trên để tải lên và tải xuống các tệp bằng Curl, nhưng nó không hoạt động nữa. Bạn có thể xác định bằng các ví dụ. Vì vậy, tôi có thể hiểu dễ dàng.
Cảm ơn trong Arora Advancemanish
Manish Arora
Ryan Sechrestmarch 11, 2014 lúc 9:09 sáng
March 11, 2014 at 9:09 am
Tôi sẽ cần thêm một chút thông tin. Những gì cụ thể là làm việc và bạn đang nhận được phản hồi nào? Khi bạn nói rằng nó không hoạt động nữa, nó có hoạt động cho bạn trước đây không?
Manishmarch 12, 2014 lúc 2:57 sáng
March 12, 2014 at 2:57 am
Xin chào ryan,Tôi sử dụng mã của bạn và như bạn nói rằng tải xuống Popup sẽ hiển thị trên trình duyệt khách, nhưng nó không hiển thị và chỉ hiển thị nội dung của tệp.
Vì vậy, làm thế nào để tải xuống tập tin, vui lòng mô tả nó ở đây.
Cảm ơn trong sự tiến bộ
Manish
Ryan Sechrestmarch 12, 2014 lúc 9:13 sáng
March 12, 2014 at 9:13 am
Đầu tiên, tôi sẽ lặp lại0 và$resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HEADER, 1]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_BINARYTRANSFER, 1]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $file = curl_exec[$resource]; curl_close[$resource];
1 để đảm bảo những điều đó là đúng. Thứ hai, bạn đã thử lặp lại$resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HEADER, 1]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_BINARYTRANSFER, 1]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $file = curl_exec[$resource]; curl_close[$resource];
2 mà không cần sử dụng$resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HEADER, 1]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_BINARYTRANSFER, 1]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $file = curl_exec[$resource]; curl_close[$resource];
3 chưa? Thứ ba, để thử nghiệm, hãy lưu tệp vào đĩa, tải xuống và sau đó mở nó để xác minh tệp được truyền lại cho bạn đúng cách.$resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HEADER, 1]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_BINARYTRANSFER, 1]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $file = curl_exec[$resource]; curl_close[$resource];
PHPDeveloperMay 7, 2014 lúc 10:16 sáng
May 7,
2014 at 10:16 am
Ryan,Cảm ơn về bài đăng hữu ích. Tôi đã đập đầu vào vấn đề này khi tải lên một biểu mẫu bằng tệp bằng cách sử dụng Curl nhưng chỉ đơn giản là có thể tìm ra những gì sai với mã của tôi.
Đây là mã của tôi:
$cfile = new CURLFile['/home/xyz/myimge.jpg', 'image/jpeg', 'mymage.jpg'];
$params = array[
"userid_id" => "some id #",
"file" => $cfile,
"name" => "test_file",
"gallery" => "myalbum"
];
$uri = '//myserver.com/somedir/';
$ch = curl_init[];
curl_setopt[$ch, CURLOPT_URL, $uri];
curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true ];
curl_setopt[$ch, CURLOPT_POST, true ];
curl_setopt[$ch, CURLOPT_POSTFIELDS, $params];
$response_data = curl_exec[$ch];
var_dump[curl_getinfo[$ch]];
var_dump[$response_data];
curl_close[ $ch ];
unset[ $ch ];
Nhưng khi tôi thấy đầu ra của mình từ4, tôi thấy loại nội dung đó vẫn là$resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HEADER, 1]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_BINARYTRANSFER, 1]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $file = curl_exec[$resource]; curl_close[$resource];
5, trong đó tất cả các tài liệu tôi đã thấy cho thấy rằng, một khi bạn thêm một tệp vào trường sau, Curl sẽ tự động chuyển đổi loại nội dung thành$resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HEADER, 1]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_BINARYTRANSFER, 1]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $file = curl_exec[$resource]; curl_close[$resource];
2. Tôi nhận được dữ liệu biểu mẫu khác nhưng không nhận được dữ liệu tệp nơi tôi đang đăng dữ liệu của mình.
Không chắc tôi đang làm gì sai ở đây. Bất kỳ ý tưởng?
Tôi đang ở trên Php 5.5, vì vậy việc thêm
6 vào đường dẫn tệp không hoạt động, vì nó không được chấp nhận.Array [ [file] => Array [ [name] => Array [ [0] => 400.png ] [type] => Array [ [0] => image/png ] [tmp_name] => Array [ [0] => /tmp/php5Wx0aJ ] [error] => Array [ [0] => 0 ] [size] => Array [ [0] => 15726 ] ] ]
Ryan Sechrestmay 7, 2014 lúc 11:59 sáng
May 7, 2014 at 11:59 am
@phpdeveloperTôi đã không sử dụng lớp Curlfile, nhưng cú pháp của bạn trông đúng.
Hãy thử đặt thủ công tiêu đề thành
2 bằng tùy chọn
9:$resource = curl_init[]; curl_setopt[$resource, CURLOPT_URL, $url]; curl_setopt[$resource, CURLOPT_HEADER, 1]; curl_setopt[$resource, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$resource, CURLOPT_BINARYTRANSFER, 1]; curl_setopt[$resource, CURLOPT_COOKIE, 'apiToken=' . $token]; $file = curl_exec[$resource]; curl_close[$resource];
$header = array['Content-Type: multipart/form-data'];
curl_setopt[$ch, CURLOPT_HTTPHEADER, $header];
Ngoài ra, liên quan đến việc bạn không nhận được tệp, bạn đã kiểm tra4 và nó trống?
PHPDeveloperMay 7, 2014 lúc 1:22 chiều
May 7, 2014 at 1:22 pm
Ryan,Tôi đã thử cài đặt thủ công Content_Type thành Multipart/Form dữ liệu nhưng nó không có tác dụng.
Như thế này:
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
0Vâng,4 là trống.
Ryan Sechrestmay 7, 2014 lúc 5:04 chiều
May 7, 2014 at 5:04 pm
OK, vì vậy tôi đã thiết lập một môi trường cục bộ, chạy PHP 5.5.12 và Curl 7.19.7, thiết lập thử nghiệm sau:
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
1Trong đó2 chứa những điều sau:$file_array = explode["\n\r", $file, 2]; $header_array = explode["\n", $file_array[0]]; foreach[$header_array as $header_value] { $header_pieces = explode[':', $header_value]; if[count[$header_pieces] == 2] { $headers[$header_pieces[0]] = trim[$header_pieces[1]]; } } header['Content-type: ' . $headers['Content-Type']]; header['Content-Disposition: ' . $headers['Content-Disposition']]; echo substr[$file_array[1], 1];
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
2Và tôi đã nhận được đầu ra sau:
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
3Hãy thử mã và xem bạn có nhận được kết quả khác không. Nếu điều này không hoạt động, hãy đảm bảo các quyền hình ảnh là chính xác, hãy thử một hình ảnh khác [có lẽ nhỏ hơn] và đảm bảo PHP có thể ghi vào thư mục3. Tôi về cơ bản nghĩ rằng nó có một cái gì đó khác với mã của bạn.$file_array = explode["\n\r", $file, 2]; $header_array = explode["\n", $file_array[0]]; foreach[$header_array as $header_value] { $header_pieces = explode[':', $header_value]; if[count[$header_pieces] == 2] { $headers[$header_pieces[0]] = trim[$header_pieces[1]]; } } header['Content-type: ' . $headers['Content-Type']]; header['Content-Disposition: ' . $headers['Content-Disposition']]; echo substr[$file_array[1], 1];
Tái bút: Tôi nhận thấy
4 đã bị sai chính tả, vì vậy hãy chắc chắn rằng có một tệp theo tên đó [thiếu chữ cái ‘một hình ảnh trong hình ảnh].$file_array = explode["\n\r", $file, 2]; $header_array = explode["\n", $file_array[0]]; foreach[$header_array as $header_value] { $header_pieces = explode[':', $header_value]; if[count[$header_pieces] == 2] { $headers[$header_pieces[0]] = trim[$header_pieces[1]]; } } header['Content-type: ' . $headers['Content-Type']]; header['Content-Disposition: ' . $headers['Content-Disposition']]; echo substr[$file_array[1], 1];
PHPDeveloperMay 8, 2014 lúc 9:55 sáng
May 8, 2014 at 9:55 am
Ryan,Cảm ơn bạn đã giúp đỡ.
Mã của bạn trông giống như của tôi và Yetl Tôi nhận được kết quả khác nhau. Tôi tự hỏi nếu nó có liên quan đến khung tôi đang sử dụng. Tôi đang sử dụng Kohana 3.3 và nắm bắt đối tượng yêu cầu trong API của mình để lấy các biến bài đăng. Tôi sẽ xem nếu có một số vấn đề trên mặt trận đó. Xin vui lòng cho tôi biết nếu bạn có bất kỳ kinh nghiệm nào với Kohana.
PHPDeveloperMay 8, 2014 lúc 11:44 sáng
May 8, 2014 at 11:44 am
Ryan,Tôi bắt đầu từ đầu, xóa tất cả mã của mình. Sau đó sao chép mã của bạn và kiểm tra nó, và nó đã hoạt động.
Có vẻ như tôi đã có một cái gì đó trong mã khiến nó không hoạt động đúng. Không chắc nó là gì mặc dù. Cảm ơn rất nhiều cho sự giúp đỡ của bạn.
Thanks a lot for your help.
Ryan Sechrestmay 8, 2014 lúc 11:49 sáng
May 8, 2014 at 11:49 am
Tuyệt vời, rất vui khi nghe [trừ phần mà chúng tôi không biết những gì thực sự gây ra vấn đề].
Brian Andersondecember tháng 1 năm 2014 lúc 4:50 chiều
December 14, 2014 at 4:50 pm
Ryan, tôi hy vọng bạn vẫn đang theo dõi chủ đề này. Cảm ơn bạn trước vì đã xem xét điều này! Tôi cảm thấy khá ngu ngốc về điều này và sẵn sàng trả tiền cho người khác thông minh về một thỏa thuận tư vấn.
I hope you’re still monitoring this thread.
Thank you in advance for reviewing this!
I’m feeling pretty stupid about this and am willing to pay for somebody else’s smarts on a consulting deal.Tôi đang cố gắng viết một máy thu cho dòng lệnh Curl sau:
5$file_array = explode["\n\r", $file, 2]; $header_array = explode["\n", $file_array[0]]; foreach[$header_array as $header_value] { $header_pieces = explode[':', $header_value]; if[count[$header_pieces] == 2] { $headers[$header_pieces[0]] = trim[$header_pieces[1]]; } } header['Content-type: ' . $headers['Content-Type']]; header['Content-Disposition: ' . $headers['Content-Disposition']]; echo substr[$file_array[1], 1];
Đây là mã người gửi của tôi
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
4Đây là mã nhận của tôi:
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
5Các biến của tôi được trả về là:
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
6Ryan Sechrestdecember tháng 15 năm 2014 lúc 3:08 sáng
December 15, 2014 at 3:08 am
Chao Brian,Bạn có thể mô tả những gì bạn đang cố gắng thực hiện và vấn đề nào bạn đang gặp phải không?
Ikramapril 3, 2015 lúc 2:23 chiều
April 3,
2015 at 2:23 pm
Chào Ryan,Tôi đang cố gắng sử dụng phương thức PUT để gửi 2 tệp đến API REST. Tôi đang sử dụng mã sau:
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
7Máy chủ đang tạo lỗi.
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
8Xin vui lòng, hướng dẫn
Jignesh Borichajune 17, 2015 lúc 9:14 sáng
June 17, 2015 at 9:14 am
Chào Ryan,Tôi đang cố gắng sử dụng phương thức PUT để gửi 2 tệp đến API REST. Tôi đang sử dụng mã sau:
Máy chủ đang tạo lỗi.
Thank you
Xin vui lòng, hướng dẫn
September 14, 2015 at 8:58 pm
Jignesh Borichajune 17, 2015 lúc 9:14 sáng
Cảm ơn bạn đã giải thích ngắn gọn của bạn. Nó đã cứu ngày của tôi. Các đồng đội của tôi đã có rất nhiều vấn đề nhưng bài đăng của bạn mà tôi đã thấy đã cứu họ rất nhiều. Chúng tôi rất biết ơn bạn.
February 8, 2018 at 12:25 am
Trân trọng. Cảm ơn bạnDaisyseptember ngày 14 tháng 12 năm 2015 lúc 8:58 tối
Cảm ơn rất nhiều. Bạn thật tuyệt vời. Nó hoạt động như mong đợi.
But it’s not work in ” PUT ”
$uploadfile = file_get_contents[$_FILES['userfile']['tmp_name']];
9HITESHFEBRIMER THÁNG 8, 2018 lúc 12:25 sáng
How to send file in HTTP ” PUT” method
and How to to get it on server side.Hii thưa ông
Cần giúp tôi
August 27, 2019 at 1:05 pm
Trong việc gửi tệp thành công trong http post post yêu cầu, nó không hoạt động trong phạm vi
Bạn có thể cho tôi biết để gửi tệp trong phương thức HTTP, đặt phương thức và cách để có được nó ở phía máy chủ.
April 22, 2020 at 12:02 pm
Cảm ơn bạn
Vijaysinh Parmaraugust 27, 2019 lúc 1:05 chiều
April 22, 2020 at 12:05 pm
Tôi đang cố gắng tạo mã để tải xuống tệp thành trình duyệt, dữ liệu của tôi ở DB được tải lên dưới dạng tệp nhị phân bằng cách sử dụng chức năng tải lên .. Tôi có thể tải xuống các tệp như6,$file_array = explode["\n\r", $file, 2]; $header_array = explode["\n", $file_array[0]]; foreach[$header_array as $header_value] { $header_pieces = explode[':', $header_value]; if[count[$header_pieces] == 2] { $headers[$header_pieces[0]] = trim[$header_pieces[1]]; } } header['Content-type: ' . $headers['Content-Type']]; header['Content-Disposition: ' . $headers['Content-Disposition']]; echo substr[$file_array[1], 1];
7,$file_array = explode["\n\r", $file, 2]; $header_array = explode["\n", $file_array[0]]; foreach[$header_array as $header_value] { $header_pieces = explode[':', $header_value]; if[count[$header_pieces] == 2] { $headers[$header_pieces[0]] = trim[$header_pieces[1]]; } } header['Content-type: ' . $headers['Content-Type']]; header['Content-Disposition: ' . $headers['Content-Disposition']]; echo substr[$file_array[1], 1];
8 nhưng các tệp hình ảnh không mở sau khi tải xuống .. có thể bất kỳ ai xin vui lòng giúp đỡ?$file_array = explode["\n\r", $file, 2]; $header_array = explode["\n", $file_array[0]]; foreach[$header_array as $header_value] { $header_pieces = explode[':', $header_value]; if[count[$header_pieces] == 2] { $headers[$header_pieces[0]] = trim[$header_pieces[1]]; } } header['Content-type: ' . $headers['Content-Type']]; header['Content-Disposition: ' . $headers['Content-Disposition']]; echo substr[$file_array[1], 1];
Viper503April 22, 2020 lúc 12:02 tối
May 10, 2020 at 4:16 am
Cảm ơn bạn rất nhiều người đàn ông, tùy chọn chuyển nhị phân đã bị thiếu trong mã của tôi và điều đó khiến tôi bị mắc kẹt trong khoảng 3 giờ cho đến khi tôi đến đây. Cuối cùng tôi đã kết nối với API của mình và thành công nhận được phản hồi, tôi không có lời để cảm ơn bạn. Lời chào hỏi!
0Ryan Sechrestapril 22, 2020 lúc 12:05 tối