Здравствуйте. Увидел в одном сайте (заголовок "Проверки") интересный (новый для меня) вид проверки с помощью условия "if" (т.е. "иначе" просто пропускается): PHP: function(){ if (0 < $_FILES['file']['error']) die("Error: ".$_FILES['file']['error']); if ($_FILES['file']['size'] < 1024 && $_FILES['file']['size'] > 1*1024*1024) die("От 1Кб до 1Мб."); //действия после проверки } Вроде, всё логично: код читается сверху вниз, и если условие не выполняется, то код дальше перестаёт выполняться. Если нет - идет дальше. Поставил это на свой код, так как таким образом код становится чище и понятнее, нежели вставнять условия в условия несколько раз. Вроде, когда проверял в первый раз - проверка работала. А теперь заметил, что не работает. Правильно ли делать такие проверки? И почему такой код у меня перестал работать (проверял только на размер файла)?
А теперь посмотрите повнимательней на ваше условие: размер файла должен быть меньше 1024 И больше 1048576 одновременно. Такое условие никогда не выполнится, поменяйте местами знаки <>.
мне такой подход лично не нравится например функцию возвращающую результат вы так не сделаете для простых линейных алгоритмов еще худо бедно пойдет.. но для более сложных.... использующих функции, ООП и прочее - не стоит
@Griffter, @Sergey_Tsarev, спасибо! Заменил на "или". Как-то случайно этот знак поставил. Всё работает. @ADSoft, а почему нельзя использовать в функциях, возвращающих результат? Сейчас я такие проверки использую при принятии файла и изменении размера с помощью сторонней функции (конечно, не в функции, а в условии). Так всё же работает: PHP: function resizeToHeight ($filename, $height, $outImg) { $img = imagecreatefromjpeg($filename); $origWidth = imagesx($img); $origHeight = imagesy($img); $ratio = $height / $origHeight; $width = $origWidth * $ratio; $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $img, 0, 0, 0, 0, $width, $height, $origWidth, $origHeight); $img = $new_image; imagejpeg($img, $outImg, 75); } $types = array('image/gif', 'image/png', 'image/jpeg'); if (isset($_FILES['file']['tmp_name'])) { if (0 < $_FILES['file']['error']) die("Error: ".$_FILES['file']['error']); if (!in_array($_FILES['file']['type'], $types)) die("Только форматы изображений GIF, PNG, JPEG."); if ($_FILES['file']['size'] < 10*1024 or $_FILES['file']['size'] > 10*1024*1024) die("От 10Кб до 10Мб."); $rasIsem = basename($_FILES['file']['name']); $rasMiniIsem = str_replace('.jpg', '_mini.jpg', $rasIsem); move_uploaded_file($_FILES['file']['tmp_name'], "images/".$rasIsem); resizeToHeight ("images/".$rasIsem, 200, "images/".$rasMiniIsem); echo "<span class='code'><img class='rasemUrta' src='images/".$rasMiniIsem."' height='200' alt='' title=''></span>"; } В таком коде можно использовать подобную проверку?
Секцию else можно опускать в php, если при невыполненном условии ничего не нужно делать. Это нормально, обсуждать тут нечего вообще. @ADSoft наверное про die внутри функции. Функция должна либо возвращать код ошибки, либо бросать исключение. Вызывая функцию, я обычно не ожидаю, что она мне завершит процесс, поэтому не стоит этого делать. Если функция встретила ошибку и кинула исключение, а я его не поймал, процесс тоже завершится, но в логах будет запись "непойманное исключение такое-то, брошенное в строке такой-то", и стек вызовов, по которому я могу найти, что привело к ошибке. Если будет die - это нигде в логах не отразиться.