простой вопрос по ПХП
Форумы Автоклуба ИЖ.2126.ru
07 Февраля 2026, 01:12:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: С 1-го августа 2013 объявляется бессрочный месячник по борьбе с матом
   Начало   Главная Поиск Правила Камасутра Блоги Чат (1) Галерея Политика конфиденциальности Войти Регистрация  
Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: простой вопрос по ПХП  (Прочитано 2029 раз)
0 Пользователей и 1 Гость смотрят эту тему.
OVA
Moдератор

*****

Карма +1563/-118
Offline Offline

Пол: Мужской
Сообщений: 14788

Тула


Нормозавр 21261-070 (был). Нынче Фабула.



Тула
ИЖ 21261-030
« Ответ #15 : 27 Января 2026, 19:46:52 »

Цитировать
Требования объявлять функции раньше появления ссылки на функции — нет, за исключением условного определения функции, как показывают два следующих примера.
https://www.php.net/manual/ru/functions.user-defined.php
Но я не проверял.
Записан

P.S. Василий.  Еще один из беглых ижевчан.
---
(ОКПП, ГБО, ЭСП), поборол электричество, "бустера" дворников нет
Paramedic

*******

Карма +1539/-10
Offline Offline

Пол: Мужской
Сообщений: 20053

Иваново


Тиран и Диктатор

WWW

Иваново
Megane III Expression, МКПП5, +ESP (Был ИЖ-2126-30)
« Ответ #16 : 27 Января 2026, 21:25:53 »


Проверил. Всё работает.

Код:
<?php

echo foo();

function 
foo()
{
    return 
"Hello World!";
}

Проверял и на 5.6 и на 8.4 В режиме CLI.

Прямо в командной строке php test.php

Записан

Это сейчас мода такая — задавать глупые вопросы с невинным видом, типа, "всё совсем не так, как вам кажется"?

tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #17 : 27 Января 2026, 23:38:34 »

Дай-ка почитать.
А так пж-ста, из интерактивной справки (для версии 5.5.х):
Примерно то же написано для версии >=7 на родном языке в офиц-ной он-лайнке на php . org (или net ?) --  2 часа назад читал
Цитировать
Функции, определяемые пользователем
Приведем пример синтаксиса, используемого для описания функций:
....... тра-ля-ля ля-ля ля-ля
Функции не обязаны быть определены до их использования, исключая тот случай, когда функции определяются условно, как это показано в двух последующих примерах.

В случае, когда функция определяется в зависимости от какого-либо условия, например, как это показано в ......  Это про то, когда боди внутри IF{  }, но это понятно и мне не интересно.

Теперь уже кажется понял причину.
Оказалось, когда в конце использовал инклуд с функцией, вот тогда и получал
Цитировать
Fatal error: Call to undefined function  имя-функции   in  имя-файла on line   номер-строки

Стоит только воткнуть боди в конец исходника непосредственно, то работает. Судя по всему, новое ИМЯ в инклуде -- это уже вторая итерация для парсинга, и до неё он не добирается. Что-то вроде того.

А может быть есть настройка, регулирующая глубину вложенности парсинга?
« Последнее редактирование: 27 Января 2026, 23:49:07 от tim123 » Записан
tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #18 : 27 Января 2026, 23:47:52 »

Проверил. Всё работает.
Ну вот, а если в инклуде, то нет. И тоже в CLI.
файл any . php
Код:
<?php
##  php  any.php >log  ##

echo foo();
include_once( 
'any.inc');
?>

файл any . inc
Код:
<?php
##  php  any.php >log  ##
function foo()
{
    return 
"Hello World!";
}  
?>
Цитировать
Fatal error: Call to undefined function foo() in ..........\php\Any.php on line 4
Записан
tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #19 : 28 Января 2026, 00:03:12 »

Но именно вы и помогли с простым примером.
Записан
OVA
Moдератор

*****

Карма +1563/-118
Offline Offline

Пол: Мужской
Сообщений: 14788

Тула


Нормозавр 21261-070 (был). Нынче Фабула.



Тула
ИЖ 21261-030
« Ответ #20 : 28 Января 2026, 08:34:44 »

Include если вперёд вызова вынести, imho, получится без ошибок
Записан

P.S. Василий.  Еще один из беглых ижевчан.
---
(ОКПП, ГБО, ЭСП), поборол электричество, "бустера" дворников нет
Paramedic

*******

Карма +1539/-10
Offline Offline

Пол: Мужской
Сообщений: 20053

Иваново


Тиран и Диктатор

WWW

Иваново
Megane III Expression, МКПП5, +ESP (Был ИЖ-2126-30)
« Ответ #21 : 28 Января 2026, 10:22:29 »

Ну вот, а если в инклуде, то нет. И тоже в CLI.

Смотри, php сначала берёт файл, потом его парсит. Давай проверим.

Код:
<?php
##  php  any.php >log  ##
echo foo();
include_once(
'any.inc');

echo 
"This will break"   // ← нет точки с запятой — синтаксическая ошибка


Поместим синтаксическую ошибку в самый конец файла. На выходе получаем:

Код:
C:\DEV\PHP\5.6.40\php.exe C:\Projects\untitled\any.php

Parse error: syntax error, unexpected end of file, expecting ',' or ';' in C:\Projects\untitled\any.php on line 8


Process finished with exit code 255

Так и написано: ошибка парсинга.

Вот в момент парсинга PHP регистрирует все функции и классы.

Но PHP парсит только один файл. Но не лезет парсить второй. include - это динамическая загрузка. Подключение идёт на этапе выполнения.

Поэтому просто перенеси include выше места вызова функции. А ещё часто используют подобную конструкцию:

Код:
<?php
include_once('any.inc');

if (
function_exists('foo')) {
    echo 
foo();
} else {
    echo 
"Function foo() not found";
}

И сейчас не рекомендуется использовать символ # для комментариев. Т.к. с 8-й версии в PHP используются атрибуты, и они как раз начинаются с этого символа. А также не рекомендуется закрывать файл ?>

Иначе вот такая конструкция

Код:
include 'config.php';
header('Location: /home');

не сможет работать, если config.php будет закрыт
Записан

Это сейчас мода такая — задавать глупые вопросы с невинным видом, типа, "всё совсем не так, как вам кажется"?

OVA
Moдератор

*****

Карма +1563/-118
Offline Offline

Пол: Мужской
Сообщений: 14788

Тула


Нормозавр 21261-070 (был). Нынче Фабула.



Тула
ИЖ 21261-030
« Ответ #22 : 28 Января 2026, 11:56:42 »

Да, лучше отказаться от краткого и использовать полный синтаксис обрамления кода php. Подтверждаю.
Записан

P.S. Василий.  Еще один из беглых ижевчан.
---
(ОКПП, ГБО, ЭСП), поборол электричество, "бустера" дворников нет
Paramedic

*******

Карма +1539/-10
Offline Offline

Пол: Мужской
Сообщений: 20053

Иваново


Тиран и Диктатор

WWW

Иваново
Megane III Expression, МКПП5, +ESP (Был ИЖ-2126-30)
« Ответ #23 : 28 Января 2026, 12:25:53 »

Здесь речь про закрывающий тэг. Его применение сейчас стандартом не одобряется. Пример привёл чуть выше. Закрывающий тэг следует использовать только там, где без него не обойтись. Например, в спагетти html и php
Записан

Это сейчас мода такая — задавать глупые вопросы с невинным видом, типа, "всё совсем не так, как вам кажется"?

tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #24 : 28 Января 2026, 19:32:37 »

Да ладно уж, 8я версия мне не грозит (скорее всего), у мне 7я даже пока не хочет работать, проблемы с  этой, redistributable дээлэлью. Они есть, но они какие-то неправильные, хотя из мозиллы. Так что остаются версии, где использ. crt v11. И тчк.

Я полагаю, что 2-3 диеза вполне будут работать как комментарий, если, конечно, его полностью не запретят. А у меня автоматизм на двойное повторение символа. Пошло ещё со времён ТОЙ страны, в МС Барсике, там одиночная кавычка, и её иной раз не увидать не то что на распечатке, а даже на экране она слишком тонкая, вот я и дублирую всегда и везде. Этой привычке уже десятки лет. А заодно, когда их много, они ещё визуально выделяются. Так же как и две косые палки.
Записан
tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #25 : 28 Января 2026, 19:42:52 »

А ещё.
Из-за того, что 7я версия у мне не работает, нужна утилита, к-рая записывает канвасу в бмп формат. Чтобы её вызывать из пхп. Встроенная ф-ция появилась только в в.7.2.

Или готовую самоделку в пхп для в.5.5.

Меня не устроил (ff mpeg). Он вписывает название своего кодека, а его иностранцы, оказалось, не любят. Разбираться, как там у него и что настраивается, слишком муторно.
Такие дела.
Записан
Paramedic

*******

Карма +1539/-10
Offline Offline

Пол: Мужской
Сообщений: 20053

Иваново


Тиран и Диктатор

WWW

Иваново
Megane III Expression, МКПП5, +ESP (Был ИЖ-2126-30)
« Ответ #26 : 28 Января 2026, 21:15:16 »

Переформулируй задачу. Картинками в PHP занимается модуль GD, но он не пишет в bmp. Либо гугли в сторону ImageMagic, либо ищи/пиши что-то самописное. BMP простой, как валенок
Записан

Это сейчас мода такая — задавать глупые вопросы с невинным видом, типа, "всё совсем не так, как вам кажется"?

tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #27 : 28 Января 2026, 22:28:16 »

Э-эх, чем вы все только читаете?..  всё торопятся куда-то...
А ещё.
Из-за того, что 7я версия у мне не работает, нужна утилита, ....
Встроенная ф-ция появилась только в в.7.2.

Или готовую самоделку в пхп для в.5.5.

Такие дела.
Об  GD и речь.  
image2bmp() -- так в их хелпе

Не такой уж и валенок, особенно новый. Простой -- это когда ты можешь на бумажке, никуда не заглядывая.
« Последнее редактирование: 28 Января 2026, 22:31:22 от tim123 » Записан
Paramedic

*******

Карма +1539/-10
Offline Offline

Пол: Мужской
Сообщений: 20053

Иваново


Тиран и Диктатор

WWW

Иваново
Megane III Expression, МКПП5, +ESP (Был ИЖ-2126-30)
« Ответ #28 : 29 Января 2026, 07:49:29 »

Э-эх, чем вы все только читаете?
Глазами Smile Ты сумбурно пишешь.

Встроенная ф-ция появилась
Это не встроенная функция. Это функция из расширения.

Как я писал выше, используй ImageMagick. Ставишь утилиту в ОС (не знаю, что у тебя там), подключаешь расширение imagick, пользуешься

https://www.php.net/imagick
Записан

Это сейчас мода такая — задавать глупые вопросы с невинным видом, типа, "всё совсем не так, как вам кажется"?

tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #29 : 29 Января 2026, 19:47:12 »

А разве ф-ция не встроена в расширение?

К этому всегда ответы сводились - купи новый ноут, установи новую винду и т.д. Здесь по крайней мере она 100% легальная. А могу ещё графический редактор использовать. У него в менюшке можно делать пакетные преобразования  и не париться. Да-да, и вызывать это всё из командной строки - ведь бред же. На дворе не та дата, чтобы самому как 30 лет назад за всё браться.

Я же пишу:
про блемы с версией пхп, оно же с обоими магиками. Не вариант это, это всё надо на другом компе. И ИмМаг там есть, но он огромный пакет, и он сюда не портабелен.

Ладно, хорош, если наткнётесь на готовое, но маленькое, плз, дайте знать. Только строго не в почту.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines

Яндекс.Метрика
×