У меня есть некоторый критический PHP-код. И у меня возникла проблема с этим.Недопустимый аргумент, предоставленный для foreach(), при загрузке изображения
Некоторые фотографии, которые я могу загрузить, а некоторые не могут. Я не знаю почему.
Когда я не могу загрузить pictuer, он показывает сообщение об ошибке:
Warning: Invalid argument supplied for foreach() in...
Я не знаю, почему, нужна помощь
PHP
<?php
session_start();
$valid_formats = array("jpg", "png", "gif", "JPG", "PNG", "GIF");
$max_file_size = 1024*3000; //3 MB
$path = "uploads/"; // Upload directory
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
// Loop $_FILES to exeicute all files
foreach ($_FILES['files']['name'] as $f => $name) {
if ($_FILES['files']['error'][$f] == 4) {
continue; // Skip file if any error found
}
if ($_FILES['files']['error'][$f] == 0) {
if ($_FILES['files']['size'][$f] > $max_file_size) {
$message[] = "$name is too large!.";
continue; // Skip large files
}
elseif(! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)){
$message[] = "$name is not a valid format";
continue; // Skip invalid file formats
}
else{ // No error found! Move uploaded files
$kaboom = explode(".",$name);
$fileExt = end($kaboom);
$target_file = "uploads/$name";
$thumbnail = "uploads/thumb_$name";
$image_info = getimagesize($_FILES['files']['tmp_name'][$f]);
$image_width = $image_info[0];
$image_height = $image_info[1];
$canvas = imagecreatetruecolor('1000', '800');
$current_image = imagecreatefromjpeg($_FILES['files']['tmp_name'][$f]);
imagecopy($canvas, $current_image, 0, 0, $width/2, $height/2, '1000', '800');
imagejpeg($canvas, $path.$name.'_cropped.jpg', 100);
}
}
}
}
?>
Когда я положил :
echo '<pre>'; var_dump($_FILES); echo '</pre>';
это шоу:
array(1) {
'files' =>
array(5) {
'name' =>
array(2) {
[0] =>
string(12) "IMG_1281.JPG"
[1] =>
string(12) "IMG_1282.JPG"
}
'type' =>
array(2) {
[0] =>
string(0) ""
[1] =>
string(10) "image/jpeg"
}
'tmp_name' =>
array(2) {
[0] =>
string(0) ""
[1] =>
string(23) "D:\wamp\tmp\phpF735.tmp"
}
'error' =>
array(2) {
[0] =>
int(1)
[1] =>
int(0)
}
'size' =>
array(2) {
[0] =>
int(0)
[1] =>
int(453437)
}
}
}
'эхо«
»,' и посмотреть, если он выдает что-нибудь? Если это так, отредактируйте свой вопрос, чтобы включить вывод. –Обратите внимание, что 'if (isset ($ _ POST))' не очень полезен. Он всегда будет возвращать true; более полезной проверкой будет: 'if (! empty ($ _ POST))'. –
Пока вы на нем, пожалуйста, также разместите HTML-разметку, которую вы используете, чтобы загрузить файл. У него есть атрибут 'enctype =" multipart/form-data "' установлен правильно? –