Проверить пустой ли файл php

Обновлено: 02.07.2024

У нас будет несколько переменных, которые будут иметь разное значение ив том числе будут пустыми, не существовать, либо иметь внутри пробел.

Переменные для проверки на пустоту в php

Если - $primer не существует.

Если $primer ="Здесь есть текст";

Перечислим все проверки, которые будут проходить переменные на пустоту в том числе :

Первым -> мы получим var_dump переменной, тип и значение - это самый надежный способ узнать, что же внутри перменной!

isset -> определяет, установлена ли переменная

empty -> Проверяет, пуста ли переменная

if($primer)-> если переменная, часто употребляемая проверка

if(trim($primer))-> тоже самое, что и предыдущий пункт, только добавим "trim"

if($primer == false)-> если переменная равна false по значению

if($primer === false)-> если переменная равна false по значению и по типу

if($primer == true)-> если переменная равна true по значению

if($primer === true)-> если переменная равна true по значению и по типу

Проверим переменную если она ничему не равна

В первом пункте, с жими проверками на пустоту, разложим все по пунктам и сделаем вывод, что это значит. Для остальных путов, приведем только результат!

Выше мы перечислили все возможные проверки, которые только можно придумать, чтобы понять, что же вернет та или иная конструкция на разные переменные, о которых мы говорили в самом начале.

Первая по списку, это переменная, которую можно назвать пустой. Которая равна "ничему".

Результаты проверок, на пустоту, если в переменной ничего нет

пустая переменная, как бы странно это не звучало, но имеет тип string и значение 0 isset нам говорит, что переменная существует. функция физически не может вам сказать, пустая или не пустая переменная! проверка по условие "есть ли" говорит, что переменная пустая. при использовании, результат аналогичен предыдущему, здесь это не видно, но в примере 2 эти два пункта будут отличаться! если проверим пустую переменную на false, то она действительно пустая а вот по типу, пустая переменная это не false - это string проверка на true. и по типу и по значению не true, т.е. действительно переменная пустая.

Проверка на пустоту переменной если она равна пробелу

Если вас спросить пробел в переменной это пустота или нет!? Если смотреть со стороны, кто не имеет понятия о программировании, то скорее всего он скажет, что пробел - это ничего, т.е. переменная пустая!

Тест проверки переменной на пустоту, если в ней есть пробел

переменная не пустая empty

переменная не пустая is primer

переменная не пустая false

переменная не пустая false2

переменная не пустая true

Вывод из теста на проверку переменной с пробелом :

Только вариант 5 после проверки переменной на пустоту, говорит, что там действительно пустота!

А как же вариант 9 -> true по значению, но false по типу(т.е. там, на самом деле должно было быть написано, что переменная с пробелом это не true )

Проверить на пустоту, если переменная не существуют

Следующий тест проверки на пустоту -> если переменная не существует!

переменная не существует isset

переменная не пустая false2

Вывод теста проверки на пустоту отсутствующей переменной

Здесь, как говорится не нужно слов! Тест проверки на пустоту сработал как и ожидалось, кроме строки №7 -> этот пункт перекликается с поведением c true в предыдущем пункте(строка №9) -> зеркальная ситуация.

Проверим на пустоту переменную, если она существует!

И для нашего успокоения давайте проверим на пустоту, если в переменная не пустая -> пусть это будет текст:

string(30) "Здесь есть текст" var_dump

переменная не пустая empty

переменная не пустая is primer

переменная не пустая trim

переменная не пустая false

переменная не пустая false2

переменная не пустая true

Вывод о результатах проверки если переменная не пустая:

Можно было столько проверок не делать - но мне, самому было интересно. что возвратит каждая проверка.

Что же касается проверки на пустоту, то самое правильное на мой взгляд это вариант

if(trim($primer))<> В данном случае: Эту конструкцию можно прочитать - если переменная не пустая. то -> действие

!$_FILES отбрасывает если вообще не сработало. а могло сработтаь, но с ошибкой загрузки и тд, и это будет зафиксировано в массиве $_FILES и в такой случает массив н ебудет пустым и проверка не срабооает корректно.

лучше всего установить код и проверить))

большой разницы в скорость работы между обоими вариантам нету))

bimbo, на оф-сайте все расписано

или как писали выше

а что у вас такое

вообще не понятно, откуда это

проверять размер, если больше нуля, то что-то есть )

У меня 2 поля на сайте в редактирвоании профиля с загрузками файлов.

<input type="file" name="filename"> и <input type="file" name="file[]" multiple="true" />

когда юзер редактирует,но ничего не загружает,надо чтобы не срабатывала команда на добавление в бд.Но что-то не робит sizeof

if (empty($password))
<
$query = "UPDATE clubs SET mail='$mail' ,name='$name' ,phone='$phone' ,adress='$adress' ,type_music='$type_music' ,indiv='$indiv' ,info='$info', logo='$logo', gallery_dir='$gallery_dir' WHERE ";
$result = mysql_query($query)
or die ('Не могу занести данные в таблицу');>

<
$query = "UPDATE clubs SET password='$password',mail='$mail' ,name='$name' ,phone='$phone' ,adress='$adress' ,type_music='$type_music' ,indiv='$indiv' ,info='$info', gallery_dir='$gallery_dir' WHERE ";
$result = mysql_query($query)
or die ('Не могу занести данные в таблицу');>

elseif (sizeof($_FILES['file'])!=0)
<
$query = "UPDATE clubs SET password='$password',mail='$mail' ,name='$name' ,phone='$phone' ,adress='$adress' ,type_music='$type_music' ,indiv='$indiv' ,info='$info', logo='$logo' WHERE ";
$result = mysql_query($query)
or die ('Не могу занести данные в таблицу');>


elseif (empty($password) and sizeof($_FILES['filename'])!=0)
<
$query = "UPDATE clubs SET mail='$mail' ,name='$name' ,phone='$phone' ,adress='$adress' ,type_music='$type_music' ,indiv='$indiv' ,info='$info', gallery_dir='$gallery_dir' WHERE ";
$result = mysql_query($query)
or die ('Не могу занести данные в таблицу');>

elseif (empty($password) and sizeof($_FILES['file'])!=0)
<
$query = "UPDATE clubs SET mail='$mail' ,name='$name' ,phone='$phone' ,adress='$adress' ,type_music='$type_music' ,indiv='$indiv' ,info='$info', logo='$logo' WHERE ";
$result = mysql_query($query)
or die ('Не могу занести данные в таблицу');>

elseif (sizeof($_FILES['filename'])!=0 and sizeof($_FILES['file'])!=0)
<
$query = "UPDATE clubs SET password='$password', mail='$mail' ,name='$name' ,phone='$phone' ,adress='$adress' ,type_music='$type_music' ,indiv='$indiv' ,info='$info' WHERE ";
$result = mysql_query($query)
or die ('Не могу занести данные в таблицу');>

Короче этот говнокод. Между <> идет определенныйпосыл запроса в бд. Но не работают толи проверки толи if конструкция не верна

Данная функция похожа на функцию file() с той лишь разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до length байт. В случае неудачи, file_get_contents() вернёт false .

Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.

Замечание:

Если вы открываете URI, содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode() .

Список параметров

Имя читаемого файла.

Замечание:

Можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path. Только помните, что если вы используете строгую типизацию, то так сделать не получится, поскольку FILE_USE_INCLUDE_PATH имеет тип int . В таком случае используйте true .

Корректный ресурс контекста, созданный с помощью функции stream_context_create() . Если в использовании особого контекста нет необходимости, можно пропустить этот параметр передав в него значение null .

Смещение, с которого начнётся чтение оригинального потока. Отрицательное значение смещения будет отсчитываться с конца потока.

Поиск смещения ( offset ) не поддерживается при работе с удалёнными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но результат будет непредсказуемым, так как функция работает на буферизованном потоке.

Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.

Возвращаемые значения

Функция возвращает прочтённые данные или false в случае возникновения ошибки.

Эта функция может возвращать как логическое значение false , так и значение не типа boolean, которое приводится к false . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.

Ошибки

Будет сгенерирована ошибка уровня E_WARNING в случаях, если не удастся найти filename , задан length меньше нуля, или поиск по смещению offset в потоке завершится неудачно.

Когда file_get_contents() вызывается в каталоге, в Windows ошибка генерируется E_WARNING , а с PHP 7.4 также в других операционных системах.

Список изменений

Версия Описание
7.1.0 Добавлена поддержка отрицательных значений offset .

Примеры

<?php
// Если включены строгие типы, то есть объявлено (strict_types=1);
$file = file_get_contents ( './people.txt' , true );
// Иначе
$file = file_get_contents ( './people.txt' , FILE_USE_INCLUDE_PATH );
?> <?php
// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents ( './people.txt' , FALSE , NULL , 20 , 14 );
var_dump ( $section );
?>

Результатом выполнения данного примера будет что-то подобное:

<?php
// Создаём поток
$opts = array(
'http' =>array(
'method' => "GET" ,
'header' => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);

$context = stream_context_create ( $opts );

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых обёрток URL, их возможности, замечания по использованию и список предопределённых констант в разделе Поддерживаемые протоколы и обёртки.

Ниже приведен код, в котором $obj хранятся данные XML. Как я могу проверить, пусто оно или нет?

Вы можете преобразовать в массив, а затем проверить, пуст он или нет

Была такая же ошибка при загрузке плагина WordPress, похоже, они также используют старую версию PHP. empty не проверяет, пуст ли массив, что empty($var) эквивалентно (!isset($var) || !$var) . Вы можете заменить свои empty($arr) s на !$arr с array() == FALSE Причина, по empty((array) $obj) которой не работает PHP 5.4+, не имеет ничего общего с приведением типов в одну строку. Вы получаете ошибку, потому что empty() принимает ссылку на переданные ему переменные, и он не может получить ссылку при приведении типов, если вы сначала не сохраните эту переменную с типом в другой переменной. Это происходит из-за того, что я описал в моем предыдущем комментарии. Довольно неприятно, что это принятый ответ, поскольку он может заставить людей поверить в то, что empty() проверяет, является ли массив «пустым», что не соответствует действительности - это просто побочный эффект того, что он на самом деле делает.

Изменить : я не понимал, что они хотели специально проверить, пуст ли объект SimpleXMLElement. Я оставил старый ответ ниже

Обновленный ответ (SimpleXMLElement) :

Если под пустым вы имеете в виду, что у него нет свойств:

Если SimpleXMLElement имеет глубину на один уровень, и под пустым вы фактически подразумеваете, что у него есть только свойства, которые PHP считает ложными (или отсутствие свойств):

Если SimpleXMLElement имеет глубину более одного уровня, вы можете начать с преобразования его в чистый массив:

Старый ответ (простой объект) :

Если вы хотите проверить, является ли простой объект (тип stdClass ) полностью пустым (без ключей / значений), вы можете сделать следующее:

Изменить : добавлен пример

Не работает в PHP7.2: PHP Warning: Uncaught Error: Call to undefined method stdClass::count() @ juha-untinen Решение с ->count() специально предназначено для экземпляров, SimpleXMLElement а не для экземпляров stdClass . Я считаю, что все это все еще работает в PHP7.2.

Вы можете преобразовать свой объект в массив и проверить его количество следующим образом:

Представьте, что если объект не пустой и довольно большой, зачем вам тратить ресурсы на преобразование его в массив или сериализацию .

Это очень простое решение, которое я использую в JavaScript. В отличие от упомянутого решения, которое преобразует объект в массив и проверяет, является ли он пустым, или кодирует его в JSON, эта простая функция очень эффективна в отношении используемых ресурсов для выполнения простой задачи.

Решение работает очень просто: он вообще не войдет в цикл foreach, если объект пуст, и он вернется true . Если он не пустой, он войдет в foreach цикл и сразу вернется false , не пройдя через весь набор.

Использование empty() не будет работать как обычно при использовании его с объектом, потому что __isset() вместо него будет вызван метод перегрузки, если он объявлен.

Поэтому вы можете использовать count() (если объект является счетным ).

Или используя get_object_vars() , например,

Другое возможное решение, которое не требует приведения array :

нет уникального безопасного способа проверить, пуст ли объект

php count () сначала приводит к массиву, но приведение может создать пустой массив, в зависимости от того, как реализован объект (эти проблемы часто затрагивают объекты расширений)

в вашем случае вы должны использовать $ obj-> count ();

Если вы приведете что-либо в PHP как (bool), он сразу скажет вам, является ли элемент объектом, примитивным типом или нулем. Используйте следующий код:

неправильно. $ x = новый \ stdClass (); var_dump ((bool) $ x); печатает true; В вашем случае simpleXml в некоторых случаях может возвращать false Верный. new stdClass () - допустимый объект, поэтому это правда. В руководстве по PHP написано: simplexml_load_file (): «Возвращает объект класса SimpleXMLElement со свойствами, содержащими данные, хранящиеся в XML-документе, или FALSE в случае ошибки». Итак, если вы приведете (bool) simplexml_load_file (), оно будет истинным (потому что функция вернула объект), но ложным (потому что функция вернула ложь).

Является ли объект «пустым» или нет - это вопрос определения, и поскольку это зависит от природы объекта, который представляет класс, определение этого класса принадлежит классу.

Сам PHP считает каждый экземпляр класса непустым.

Для «пустого» объекта не может быть общего определения. В приведенном выше примере вы можете возразить, что результат empty() должен быть true , потому что объект не представляет никакого контента. Но как узнать PHP? Некоторые объекты никогда не предназначены для представления контента (например, фабрики мысли), другие всегда представляют значимую ценность (думайте new DateTime() ).

Короче говоря, вам нужно будет придумать свои собственные критерии для конкретного объекта и соответственно протестировать их либо извне объекта, либо с помощью самописного isEmpty() метода в объекте.

Читайте также: