Я столкнулся с головоломкой и задавался вопросом, может ли кто-нибудь дать мне прямой ответ. Поэтому я построил сценарий загрузки фотографий с использованием PHP / MySQL. Внутри сценария фотографии изменяются и присваиваются временное имя при загрузке. Я тестировал его, используя несколько снимков (размер файла 220 КБ | 960 x 720), и все было отлично. Затем я попытался загрузить несколько фотографий с моей цифровой камеры (размер файла 2,47 МБ | 3000 х 4000), и внезапно я получил эту ошибку:
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in /php_parsers/photo_system.php on line 94 Warning: Cannot modify header information - headers already sent by (output started at /php_parsers/photo_system.php:94) in /php_parsers/photo_system.php on line 96
Я проверил stackoverflow для сообщения с аналогичной проблемой и натолкнулся на него, но он, похоже, не применим к сценарию, который я испытываю.
Вот применимый код для «photo_system.php». Я прокомментировал оскорбительные строки 94 и 96. Любая помощь / идеи, которые вы могли бы дать, были бы очень признательны!
<?php if (isset($_FILES["photo"]["name"]) && isset($_POST["gallery"])){ $sql = "SELECT COUNT(id) FROM photos WHERE user='$log_username'"; $query = mysqli_query($db_conx, $sql); $row = mysqli_fetch_row($query); if($row[0] > 79){ header("location: ../message.php?msg=The system allows only 80 pictures total"); exit(); } $gallery = preg_replace('#[^az 0-9,]#i', '', $_POST["gallery"]); $fileName = $_FILES["photo"]["name"]; $fileTmpLoc = $_FILES["photo"]["tmp_name"]; $fileType = $_FILES["photo"]["type"]; $fileSize = $_FILES["photo"]["size"]; $fileErrorMsg = $_FILES["photo"]["error"]; $kaboom = explode(".", $fileName); $fileExt = end($kaboom); $db_file_name = date("DMjGisY")."".rand(1000,9999).".".$fileExt; // WedFeb272120452013RAND.jpg list($width, $height) = getimagesize($fileTmpLoc); //Offending Line 94 if($width < 10 || $height < 10){ header("location: ../message.php?msg=ERROR: That image has no dimensions"); //Offending Line 96 exit(); } if($fileSize > 4194304) { header("location: ../message.php?msg=ERROR: Your image file was larger than 4mb"); exit(); } else if (!preg_match("/\.(gif|jpg|png)$/i", $fileName) ) { header("location: ../message.php?msg=ERROR: Your image file was not jpg, gif or png type"); exit(); } else if ($fileErrorMsg == 1) { header("location: ../message.php?msg=ERROR: An unknown error occurred"); exit(); } $moveResult = move_uploaded_file($fileTmpLoc, "../user/$log_username/$db_file_name"); if ($moveResult != true) { header("location: ../message.php?msg=ERROR: File upload failed"); exit(); } include_once("../php_includes/image_resize.php"); $wmax = 800; $hmax = 600; if($width > $wmax || $height > $hmax){ $target_file = "../user/$log_username/$db_file_name"; $resized_file = "../user/$log_username/$db_file_name"; img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt); } $sql = "INSERT INTO photos(user, gallery, filename, uploaddate) VALUES ('$log_username','$gallery','$db_file_name',now())"; $query = mysqli_query($db_conx, $sql); mysqli_close($db_conx); header("location: ../photos.php?u=$log_username"); exit(); } ?><?php if (isset($_POST["delete"]) && $_POST["id"] != ""){ $id = preg_replace('#[^0-9]#', '', $_POST["id"]); $query = mysqli_query($db_conx, "SELECT user, filename FROM photos WHERE id='$id' LIMIT 1"); $row = mysqli_fetch_row($query); $user = $row[0]; $filename = $row[1]; if($user == $log_username){ $picurl = "../user/$log_username/$filename"; if (file_exists($picurl)) { unlink($picurl); $sql = "DELETE FROM photos WHERE id='$id' LIMIT 1"; $query = mysqli_query($db_conx, $sql); } } mysqli_close($db_conx); echo "deleted_ok"; exit(); } ?>
Хорошо, все. Я понял, в чем проблема. Надеюсь, это поможет кому-то в будущем. Поэтому я проверил свой phpinfo () и обнаружил, что upload_max_filesize установлен только на 2M. Я добавил php.ini в каталог повреждающего файла и включил:
upload_max_filesize = 250M post_max_size = 250M max_execution_time = 300 date.timezone = "America/Los_Angeles"
Мне пришлось добавить date.timezone, потому что моей системе не понравился тот факт, что я не определил ее. В любом случае это решило проблему.