Tôi thực hiện một số xác thực biểu mẫu để đảm bảo rằng tệp mà người dùng đã tải lên đúng loại. Nhưng việc tải lên là tùy chọn, vì vậy tôi muốn bỏ qua xác thực nếu anh ấy không tải lên bất kỳ thứ gì và gửi phần còn lại của biểu mẫu. Làm thế nào tôi có thể kiểm tra xem anh ta đã tải lên một cái gì đó hay không? Liệu $_FILES['myflie']['size'] <=0
có hoạt động không?Cách kiểm tra xem người dùng đã tải lên một tệp bằng PHP chưa?
Trả lời
Bạn có thể sử dụng is_uploaded_file()
:
if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) {
echo 'No upload';
}
Từ các tài liệu:
trả về true nếu tập tin được đặt tên bởi filename đã được tải lên thông qua HTTP POST. Điều này hữu ích để giúp đảm bảo rằng người dùng độc hại không cố gắng lừa tập lệnh làm việc trên các tệp khi mà tập lệnh không hoạt động - cho thể hiện,/etc/passwd.
này loại séc đặc biệt quan trọng nếu có bất kỳ cơ hội mà bất cứ điều gì thực hiện với các tập tin được tải lên có thể tiết lộ nội dung của họ cho người dùng , hoặc thậm chí để những người dùng khác trên cùng một hệ thống .
EDIT: Tôi đang sử dụng này trong lớp FileUpload của tôi, trong trường hợp nó giúp:
public function fileUploaded()
{
if(empty($_FILES)) {
return false;
}
$this->file = $_FILES[$this->formField];
if(!file_exists($this->file['tmp_name']) || !is_uploaded_file($this->file['tmp_name'])){
$this->errors['FileNotExists'] = true;
return false;
}
return true;
}
@ karim79 có câu trả lời đúng, nhưng tôi đã phải viết lại ví dụ của mình để phù hợp với mục đích của tôi. Ví dụ của anh ta giả định rằng tên của trường đã gửi được biết và có thể được mã hóa cứng. Tôi đã tiến thêm một bước và tạo một hàm sẽ cho tôi biết nếu có bất kỳ tệp nào được tải lên mà không cần phải biết tên của trường tải lên.
/**
* Tests all upload fields to determine whether any files were submitted.
*
* @return boolean
*/
function files_uploaded() {
// bail if there were no upload forms
if(empty($_FILES))
return false;
// check for uploaded files
$files = $_FILES['files']['tmp_name'];
foreach($files as $field_title => $temp_name){
if(!empty($temp_name) && is_uploaded_file($temp_name)){
// found one!
return true;
}
}
// return false if no files were found
return false;
}
mọi lần trả lại false me this if (empty ($ _ FILES)) .... – Phoenix
Mã này làm việc cho tôi. Tôi đang sử dụng nhiều tệp tải lên nên tôi cần kiểm tra xem có bất kỳ tải lên nào không. phần
HTML:
<input name="files[]" type="file" multiple="multiple" />
PHP phần:
if(isset($_FILES['files'])){
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){
if(!empty($_FILES['files']['tmp_name'][$key])){
// things you want to do
}
}
Tôi đã kiểm tra mã của bạn và nghĩ rằng bạn nên thử điều này:
if(!file_exists($_FILES['fileupload']['tmp_name']) || !is_uploaded_file($_FILES['fileupload']['tmp_name']))
{
echo 'No upload';
}
else
echo 'upload';
is_uploaded_file()
là tuyệt vời để sử dụng, đặc biệt cho kiểm tra xem đó là tệp được tải lên hay tệp cục bộ (vì mục đích bảo mật).
Tuy nhiên, nếu bạn muốn kiểm tra xem người dùng đã tải lên tệp hay chưa, hãy sử dụng $_FILES['file']['error'] == UPLOAD_ERR_OK
.
Xem hướng dẫn sử dụng PHP trên file upload error messages. Nếu bạn chỉ muốn kiểm tra không có tệp nào, hãy sử dụng UPLOAD_ERR_NO_FILE
.
<!DOCTYPE html>
<html>
<body>
<form action="#" method="post" enctype="multipart/form-data">
Select image to upload:
<input name="my_files[]" type="file" multiple="multiple" />
<input type="submit" value="Upload Image" name="submit">
</form>
<?php
if (isset($_FILES['my_files']))
{
$myFile = $_FILES['my_files'];
$fileCount = count($myFile["name"]);
for ($i = 0; $i <$fileCount; $i++)
{
$error = $myFile["error"][$i];
if ($error == '4') // error 4 is for "no file selected"
{
echo "no file selected";
}
else
{
$name = $myFile["name"][$i];
echo $name;
echo "<br>";
$temporary_file = $myFile["tmp_name"][$i];
echo $temporary_file;
echo "<br>";
$type = $myFile["type"][$i];
echo $type;
echo "<br>";
$size = $myFile["size"][$i];
echo $size;
echo "<br>";
$target_path = "uploads/$name"; //first make a folder named "uploads" where you will upload files
if(move_uploaded_file($temporary_file,$target_path))
{
echo " uploaded";
echo "<br>";
echo "<br>";
}
else
{
echo "no upload ";
}
}
}
}
?>
</body>
</html>
tham khảo http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/
Nhưng hãy tỉnh táo. Người dùng có thể tải lên bất kỳ loại tệp nào và cũng có thể hack máy chủ hoặc hệ thống của bạn bằng cách tải lên tệp độc hại hoặc tệp php.Trong tập lệnh này, cần có một số xác nhận hợp lệ. Cảm ơn bạn.
Bạn nên sử dụng $_FILES[$form_name]['error']
. Nó trả về UPLOAD_ERR_NO_FILE
nếu không có tệp nào được tải lên. Danh sách đầy đủ: PHP: Error Messages Explained
function isUploadOkay($form_name, &$error_message) {
if (!isset($_FILES[$form_name])) {
$error_message = "No file upload with name '$form_name' in form.";
return false;
}
$error = $_FILES[$form_name]['error'];
// List at: http://php.net/manual/en/features.file-upload.errors.php
if ($error != UPLOAD_ERR_OK) {
switch ($error) {
case UPLOAD_ERR_INI_SIZE:
$error_message = 'The uploaded file exceeds the upload_max_filesize directive in php.ini.';
break;
case UPLOAD_ERR_FORM_SIZE:
$error_message = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.';
break;
case UPLOAD_ERR_PARTIAL:
$error_message = 'The uploaded file was only partially uploaded.';
break;
case UPLOAD_ERR_NO_FILE:
$error_message = 'No file was uploaded.';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$error_message = 'Missing a temporary folder.';
break;
case UPLOAD_ERR_CANT_WRITE:
$error_message = 'Failed to write file to disk.';
break;
case UPLOAD_ERR_EXTENSION:
$error_message = 'A PHP extension interrupted the upload.';
break;
default:
$error_message = 'Unknown error';
break;
}
return false;
}
$error_message = null;
return true;
}
- 1. Cách kiểm tra xem người dùng đã chọn một tệp để tải lên chưa?
- 2. Cách xác định xem người dùng đã chọn tệp để tải tệp lên chưa?
- 3. Cách kiểm tra xem tài liệu đã sẵn sàng chưa?
- 4. kiểm tra xem tải xuống đã hoàn tất chưa
- 5. Kiểm tra xem người dùng đã trượt xong trên UISlider liên tục chưa?
- 6. Kiểm tra xem người dùng đã tồn tại trong drupal
- 7. Kiểm tra xem tệp javascript đã được tải
- 8. Làm cách nào để kiểm tra xem người dùng đã đăng nhập vào trang web Drupal thông qua JavaScript chưa?
- 9. Python: Kiểm tra xem tệp đã tải lên có phải là jpg
- 10. Cách kiểm tra tải lên nhiều tệp bằng Cucumber/Capybara?
- 11. Làm thế nào để kiểm tra xem hình ảnh đã được tải bằng Javascript chưa?
- 12. Tải lên tệp PHP - hình ảnh chỉ kiểm tra
- 13. Cách để xem tất cả các tệp đã được người dùng kiểm tra trong Visual SourceSafe?
- 14. Cách kiểm tra kích thước tệp khi tải lên
- 15. Làm cách nào để kiểm tra xem người dùng đó đã được xác thực từ ngon chưa?
- 16. Kiểm tra xem tên người dùng có tồn tại bằng cách sử dụng PHP PDO
- 17. Cách kiểm tra xem WaitHandle đã được đặt chưa?
- 18. Đơn vị Kiểm tra tệp tải lên, làm cách nào?
- 19. PHP sắp xếp ảnh đã tải lên
- 20. Tải lên hai tệp bằng PHP
- 21. Tải lên nhiều tệp bằng kiểm tra md5 trước khi tải lên
- 22. Kiểm tra xem e-mail đã được nhập đúng chưa
- 23. Tệp tải lên PHP
- 24. kiểm tra xem jquery đã được tải chưa, sau đó tải nó nếu sai
- 25. Cách kiểm tra tệp đã tải lên cho dù đó là hình ảnh hay tệp khác?
- 26. Kiểm tra xem hằng số đã được xác định chưa
- 27. Kiểm tra xem người dùng đã đăng nhập có thích Trang Facebook của tôi không
- 28. Cách kiểm tra xem virtualenv đã được tạo bằng '--no-site-packages' chưa?
- 29. Kiểm tra xem giá trị nguyên đã tăng chưa?
- 30. Cách xem tệp sau khi tải tệp lên App_Data/Tải lên trong MVC 3 bằng Razor?
Ayman, bạn cần cung cấp cho nó 'tmp_name'. Từ tài liệu: Để làm việc đúng, hàm is_uploaded_file() cần một đối số như $ _FILES ['userfile'] ['tmp_name'] – karim79
@ Click Upvote - Thêm bit file_exists() vào đầu, tôi thực sự đang sử dụng vì vậy tôi biết nó hoạt động. Thôi buông đi. – karim79
My bad - mảng $ _FILES, như Greg B đã chỉ ra, nên được kiểm tra bằng trống() – karim79