[ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ] После некоторых проблем с последним кодом, вот чистый. Надеюсь, что это может кому-нибудь помочь.
// - HTML -
// - Использованиеname = "image []" во входном файле не работает.// - Лучше, если вы используете name = "image1", name = "image2", name = "image3" и т. Д.
<div class="container">
<label for="title">Title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image1" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image2" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image3" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image4" id="upload_file_pc" required><br /><br />
</div>
<button type="submit" name="form_upload_file" class="btn btn-primary">Envoyer</button>
// - PHP -
foreach($_FILES as $file){
$filesname = ($file["name"]); //-- Client file name
$target_dir = "upload/"; //-- Here you can add after the " /" something for recognize the file up.
$target_file = $target_dir . basename($filesname);
$filestmp = ($file["tmp_name"]);
$filessize = ($file["size"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if the image file is an actual image or fake image
if(isset($_POST["submit"])){
$check = getimagesize($filessize);
if($check !== false) {
$messagemerci = "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
}
else {
$messagemerci = "File is not an image.";
$uploadOk = 0;
}
}
// Check if the file already exists
if (file_exists($target_file)) {
$messagemerci = "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($filessize > 500000) {
$messagemerci = "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType !="jpeg" && $imageFileType != "gif" && $imageFileType != "pdf" ) {
$messagemerci = "Sorry, only JPG, JPEG, PNG, GIF & PDF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
$messagemerci = "Sorry, your file was not uploaded.";
// if everything is ok, try to upload the file
}
else {
if (move_uploaded_file($filestmp, $target_file)) {
$messagemerci = "The file ". basename( $filesname). " has been uploaded.";
}
else {
$messagemerci = "Sorry, there was an error uploading your file.";
}
}
};
Теперь я сделаю некоторый процесс безопасности внутри него, и это будет не так уж плохо.
Спасибо за ваше время.
BK201
// - Начало -
Я не понимаю, как загрузить несколько файлов из HTML-формы с помощью PHP.
Iне хочу использовать это: <input type="file" name="" multiple>
Один вход для нескольких файлов - это не то, что я хочу использовать на данный момент.
Итак, начнем:
Я могу загрузить один файл с этим кодом:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload the file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Но как я могу загрузить несколько файлов?
Я думалМне нужно было:
foreach ($_FILES["image”]["tmp_name"] as $index){
//--something
}
Но ничего ...
Я видел этот ответ от Okonomiyaki3000 здесь (кстати, arigatô, с вашим ответом я видел надежду :)...)
$files = array_map('RemapFilesArray'
(array) $_FILES['attachments']['name'],
(array) $_FILES['attachments']['type'],
(array) $_FILES['attachments']['tmp_name'],
(array) $_FILES['attachments']['error'],
(array) $_FILES['attachments']['size']
);
function RemapFilesArray($name, $type, $tmp_name, $error, $size)
{
return array(
'name' => $name,
'type' => $type,
'tmp_name' => $tmp_name,
'error' => $error,
'size' => $size,
);
}
Я понимаю процесс, но он не работает для меня ...
Я пытаюсь все, но я не понимаю, как зацикливать каждый $ _files [POST]
Возможно, я допустил ошибку, которую не вижу, потому что я новичок.
Я также проверяю другие решения и, наконец, прихожу сюда из-за вашей репутации.
Итак, вот полный пример того, что я пробовал перед тем, как спросить.
//-- In this case, I want to upload multiple files with an HTML form and a PHP action.
//-- I don't understand how to loop with each file in $_Files.
//-- I made 3 examples, working for 1 file upload but not for 4 files.
//-- Anyone can explain to me how it works. NOT JUST WRITING THE RIGHT WAY PLEASE.
<html>
<body>
<h4>Documents justificatifs:</h4>
<form action="upload_file_pc.php" name="upload_file_pc" method="post" enctype="multipart/form-data">
<div class="container">
<label for="title">Title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image[]" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image[]" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image[]" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image[]" id="upload_file_pc" required><br /><br />
</div>
<button type="submit" name="form_upload_file" class="btn btn-primary">Envoyer</button>
</form>
</body>
</html>
//-- Exemple 1:
<?php
function reArrayFiles(&$file_post) {
$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);
for ($i=0; $i<$file_count; $i++) {
foreach ($file_keys as $key) {
$file_ary[$i][$key] = $file_post[$key][$i];
}
}
return $file_ary;
}
if ($_FILES['upload']) {
$file_ary = reArrayFiles($_FILES['image']);
foreach ($file_ary as $file) {
print 'File Name: ' . $file['name'];
print 'File Type: ' . $file['type'];
print 'File Size: ' . $file['size'];
}
}
?>
//-- Exemple 2:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["image"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["image"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload the file
} else {
if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["image"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
//-- Exemple 3:
<?php
// Settings
$allowedExtensions = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif');
$maxSize = 2097152;
$storageDir = 'a/b/c/tmp_images';
// Result arrays
$errors = $output = array();
if (!empty($_FILES['image'])){
// Validation loop (I prefer for loops for this specific task)
for ($i = 0; isset($_FILES['image']['name'][$i]); $i++) {
$fileName = $_FILES['image']['name'][$i];
$fileSize = $_FILES['image']['size'][$i];
$fileErr = $_FILES['image']['error'][$i];
$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
// Validate extension
if (!in_array($fileExt, $allowedExtensions)) {
$errors[$fileName][] = "Format $fileExt in image $fileName is not accepted";
}
// Validate size
if ($fileSize > $maxSize) {
$errors[$fileName][] = "$fileName excedes the maximum file size of $maxSize bytes";
}
// Check errors
if ($fileErr) {
$errors[$fileName][] = "$fileName uploaded with error code $fileErr";
}
}
// Handle validation errors here
if (count($errors) > 0) {
die("Errors validating uploads: ".print_r($errors, TRUE));
}
// Create the storage directory if it doesn't exist
if (!is_dir($storageDir)) {
if (!mkdir($storageDir, 0755, TRUE)) { // Passing TRUE as the third argument creates recursively
die("Unable to create storage directory $storageDir");
}
}
// File move loop
for ($i = 0; isset($_FILES['image']['name'][$i]); $i++) {
// Get base info
$fileBase = basename($_FILES['image']['name'][$i]);
$fileName = pathinfo($fileBase, PATHINFO_FILENAME);
$fileExt = pathinfo($fileBase, PATHINFO_EXTENSION);
$fileTmp = $_FILES['image']['tmp_name'][$i];
// Construct destination path
$fileDst = $storageDir.'/'.basename($_FILES['image']['name'][$i]);
for ($j = 0; file_exists($fileDst); $j++) {
$fileDst = "$storageDir/$fileName-$j.$fileExt";
}
// Move the file
if (move_uploaded_file($fileTmp, $fileDst)) {
$output[$fileBase] = "Stored $fileBase OK";
} else {
$output[$fileBase] = "Failure while uploading $fileBase!";
$errors[$fileBase][] = "Failure: Can't move uploaded file $fileBase!";
}
}
// Handle file move errors here
if (count($errors) > 0) {
die("Errors moving uploaded files: ".print_r($errors, TRUE));
}
}
?>
[РЕДАКТИРОВАТЬ] Спасибо NiMusco за его помощь.Теперь я лучше понимаю, как посмотреть, что загружено в $ _FILES, но когда я помещаю $ _FILES ['name'] в "$ data" и выводю "$ data", я получаю "Array" ...
Я попробовал что-то простое, возможно, я сделал это неправильно, но для меня это работа, но я не понимаю, чего я ожидаю.
Здесь:
?php
if(!empty($_FILES))
{
foreach($_FILES as $file)
{
$namefile = $file['name'];
echo $namefile;
}
}
?>".
But what I get is " Array ".... not the file name. here what I get when I do:
print_r($_FILES) :" Array
(
[image] => Array
(
[name] => Array
(
[0] => img_1.jpg
[1] => img_2.jpg
[2] => img_3.jpg
[3] => img_4.jpg
)
[type] => Array
(
[0] => image/jpeg
[1] => image/jpeg
[2] => image/jpeg
[3] => image/jpeg
)" etc...."
Я думаю, что «Массив» относится к этому: «[имя] => Массив» print_r ...
Может быть, мне нужно идтивернуться к изучению PHP с самого начала.Я что-то пропустил наверняка.
[EDIT] Я НАШЕЛ РЕШЕНИЕ С ПОМОЩЬЮ NiMusco.
Так вот мой полный код, который работает для меня:
// - HTML -
<div class="container">
<label for="title">Title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image[]" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image[]" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image[]" id="upload_file_pc" required><br /><br />
<label for="title">title:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input type="file" class="form-control" name="image[]" id="upload_file_pc" required><br /><br />
</div>
<button type="submit" name="form_upload_file" class="btn btn-primary">Envoyer</button>
// - PHP -
foreach($_FILES as $file){
$filesname = ($file["name"]);
$target_dir = "upload/";
$target_file = $target_dir . basename($filesname);
$filestmp = ($file["tmp_name"]);
$filessize = ($file["size"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if the image file is an actual image or fake image
if(isset($_POST["submit"])){
$check = getimagesize($filessize);
if($check !== false) {
$messagemerci = "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
}
else {
$messagemerci = "File is not an image.";
$uploadOk = 0;
}
}
// Check if the file already exists
if (file_exists($target_file)) {
$messagemerci = "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($filessize > 500000) {
$messagemerci = "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType !="jpeg" && $imageFileType != "gif" && $imageFileType != "pdf" ) {
$messagemerci = "Sorry, only JPG, JPEG, PNG, GIF & PDF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
$messagemerci = "Sorry, your file was not uploaded.";
// if everything is ok, try to upload the file
}
else {
if (move_uploaded_file($filestmp, $target_file)) {
$messagemerci = "The file ". basename( $filesname). " has been uploaded.";
}
else {
$messagemerci = "Sorry, there was an error uploading your file.";
}
}
};
Спасибо за ваше время.
BK201