Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ошибка типа данных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Perun
Отправлено: 20 Марта, 2019 - 22:57:40
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Я так понимаю. что дебагер ругается именно из за того, что нет явного указания/приведения переменной $dir к типу данных - массив?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         $dir=scandir($_SERVER['DOCUMENT_ROOT']);
  3.         $count=count($dir);
  4.         echo $count;
  5.         echo '<br><pre>'.print_r($dir,1).'</pre>';
  6. foreach($dir as $k => $v){
  7.         echo(is_dir($v))?'<a href="#">'.$v.'</a>.'.'<br>':$v.'<br>';
  8.         }
  9.  
  10. ?>



CODE (html):
скопировать код в буфер обмена
  1. 1<br><pre></pre>PHP Warning:  scandir(): Directory name cannot be empty in C:\OSPanel\domains\214th\test.php on line 2
  2. PHP Warning:  count(): Parameter must be an array or an object that implements Countable in C:\OSPanel\domains\214th\test.php on line 3
  3. PHP Warning:  Invalid argument supplied for foreach() in C:\OSPanel\domains\214th\test.php on line 6
  4.  
  5. Process finished with exit code 0


Но вывод на экран при этом работает корректно..

Ругалось на неправильные данные, пока явно не привел $dir к типу массив, хотя вывод на экран в обоих случаях работает корректно.

А вот с первой ошибкой не понял - что имеется в виду пустое значение? Или это глобальная переменная интерпретируется как пустая? Она же не пустая, да и вывод на экран это показывает. Как поступать с этой ошибкой?

(Отредактировано автором: 20 Марта, 2019 - 23:15:03)

 
 Top
andrewkard
Отправлено: 22 Марта, 2019 - 13:49:31
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Как запускаете? Интересная ошибка
Perun пишет:
Process finished with exit code 0
 
 Top
Perun
Отправлено: 22 Марта, 2019 - 16:29:02
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




andrewkard пишет:
Как запускаете? Интересная ошибка
Perun пишет:
Process finished with exit code 0

Я так понимаю, что у меня что-то не работает/я неправильно делаю. Запускаю прямо в PHP Storm, но если открыть в браузере, то в браузере ошибки не видно. Я совсем запутался в связке PHP Storm - OpenServer.
Скрипт у меня получается запустить без запуска сервера внутри самого PHP Storm, открыть в браузере через PHP Storm, и запустив сервер так же открыть в самом PHP Storm и открыть через него в браузере. Во всех случаях разные результаты. и соответственно адресная строка в браузере отличается при запущенном сервере и не запущенном.
Я вообще не понимаю как одно связано с другим. и не знаю где почитать об этом/разобраться.
 
 Top
LIME
Отправлено: 22 Марта, 2019 - 17:08:11
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




andrewkard пишет:
Интересная ошибка
это как раз не ошибка
скрипты запущенные в командной строке (CLI) возвращают 0 в случае штатного завершения
отличные от 0 значения это как раз признаки ошибки
по крайней мере это хороший тон, так принято для консольных утилит и скриптов
Perun вот видимо и нашлась ошибка
скрипт запускается как консольный
то есть для него не существует $_SERVER['DOCUMENT_ROOT']
все следующие ошибки есть следствия первой
(Добавление)
$_SERVER формируется веб-сервером
 
 Top
Perun
Отправлено: 22 Марта, 2019 - 17:30:32
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




LIME пишет:

скрипт запускается как консольный

$_SERVER формируется веб-сервером

Можете объяснить чем отличается выполнения скрипта через консоль, и через локальный сервер? С локальным сервером не совсем понимаю, вернее - совсем не понимаю. PHP Storm запускает скрипт без опенсервера, и это работает через локальный сервер. и через запущенный опенсервер - тоже через локальный сервер. Надпись localhost я вижу в адресной строке только в варианте запуска в браузере через PHP Storm. И массивы $_SERVER отличаются при запуске через опернсервер и через PHP Storm(не через консоль, а в браузере)
 
 Top
LIME
Отправлено: 22 Марта, 2019 - 17:40:53
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Perun пишет:
Можете объяснить чем отличается выполнения скрипта через консоль, и через локальный сервер
скрипт можно запустить в терминале командой например
CODE (htmlphp):
скопировать код в буфер обмена
  1. php путь_к_скрипту.php

в этом случае не будет суперглобальных массивов формируемых веб-сервер
считай чистая программа без заранее подготовленных данных
в случае с PHP Storm скрипт запускается через встроенный в него локальный веб-сервер и что там в $_SERVER хз... могу чего угодно ожидать но точно не то что настроено в OpenServer
никогда не пользовался
в случае запуска в браузере через OpenServer все так как ты и ожидаешь
так и делай пока руку не набьешь и не разберешься получше
(Добавление)
Обрати внимание там порт другой прописан в url
То есть это другой веб сервер принимает
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB