Не работает parse_str() после обновления на PHP 8.1

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.631
Реакции
1.137
  • Автор темы
  • Модер.
  • #1
Всем привет, потребовалось сервер до 8.1 PHP, часть проблем уже решил, а по этой проблеме не смог ничего внятного нагуглить. Написано что второй параметр нужен обязательно.
Код:
Optional parameter $activeSelector declared before required parameter $value is implicitly treated as a required parameter in
ругается на строку первую этой функции
Код:
    private function InitSelector(
        $activeSelector = '',
        $value,
        $arraySelectors = []
    ) {
        ksort($arraySelectors);
и ещё ошибка
Код:
parse_str(): Passing null to parameter #1 ($string) of type string is deprecated in
на строку ругается
Код:
parse_str($this->iframeSelect, $parse_str);
Подскажите что в этих строках не так на 8,1?
 
чел, не сильно описал подачу данных ты тут), попробуй так обойти пустоту второго параметра
parse_str($this->iframeSelect, ($parse_str? : []));
Типо недолжно null приходить.
 
Последнее редактирование:
Так а в чем проблема-то исправить? Вроде простые же примеры
В первом кейсе обязательный параметр $value должен быть в списке параметров первым, до необязательных
Во втором кейсе нельзя без параметров вызывать parse_str(), смысла в этом нет
В третьем тоже самое - первый параметр не может быть нулл, должен быть строкой, как вариант можно так решить:
PHP:
parse_str($this->iframeSelect ?: '', $parse_str);
Но лучше отдельно проверку добавить
 
  • Автор темы
  • Модер.
  • #4
и так и так ругается потом:
Код:
Stack trace:
#0 C:\OSPanel\domains\aаа\engine\ajax\iframePlayer.php(33): IframePlayer->initPlayer()
#1 {main}
  thrown in C:\OSPanel\domains\aаа\engine\classes\iframePlayerClass.php on line 105
[24-Feb-2025 14:15:12 Europe/Moscow] PHP Deprecated:  Optional parameter $activeSelector declared before required parameter $value is implicitly treated as a required parameter in C:\OSPanel\domains\aаа\engine\classes\iframePlayerClass.php on line 232
33 строка это просто вывод итога:
Код:
echo $iframePlayer->initPlayer();
105 строка:
Код:
        parse_str($this->iframeSelect ?: '', $parse_str);
в первом варианте так же ошибка на эту строку идёт, и без правок так же.
232 строка:
Код:
    private function InitSelector(
        $activeSelector = '',
        $value,
        $arraySelectors = []
    ) {
        ksort($arraySelectors);

Вчера пробовал это ?: '' ставить и в таком виде ?? '' как на многих сайтах написано, но ничего не меняется, ошибки те же самые идут.


PS странно что уведомление об ответе в теме не пришло мне.....
 
  • Автор темы
  • Модер.
  • #6
дальше сразу на это ругается: PHP Parse error: syntax error, unexpected token "foreach", expecting "function" or "const" in C:\OSPanel\domains\ааааа\engine\classes\iframePlayerClass.php on line 242

PHP:
        foreach ($arraySelectors as $keys => $val) {
            $checked = ($keys == $value) ? " selected" : "";

            switch ($activeSelector) {
            case 'source':
                $title = $this->sourceList[$keys];
                break;

            case 'series':
                $title = $keys . $this->iframeLang['txt_6'];
                break;

            default:
                $title = $this->dubbingList[$keys];
                break;
            }

            $select .= "<option value=\"{$keys}\"{$checked}>{$title}</option>";
        }

        return "<select name=\"{$activeSelector}\" onchange=\"IframePlayer.frontend.initPlayer('{$this->postId}', $( '.selectors select' ).serialize());\">" . $select . "</select>";
    }
 
скинь ИИ файлы и ошибки, он мигом поправит.
Код:
Ошибка `syntax error, unexpected token "foreach"` в PHP обычно возникает, если перед `foreach` ожидается определение функции или переменной, но синтаксис нарушен. Возможные причины: 

### 1. **Отсутствие объявления метода в классе** 
Убедитесь, что `foreach` находится внутри метода класса. Например, если он находится в классе `iframePlayerClass`, убедитесь, что он объявлен в методе: 
```php
class iframePlayerClass {
    public function generateSelector($arraySelectors, $value, $activeSelector) {
        $select = "";

        foreach ($arraySelectors as $keys => $val) {
            $checked = ($keys == $value) ? " selected" : "";

            switch ($activeSelector) {
                case 'source':
                    $title = $this->sourceList[$keys];
                    break;

                case 'series':
                    $title = $keys . $this->iframeLang['txt_6'];
                    break;

                default:
                    $title = $this->dubbingList[$keys];
                    break;
            }

            $select .= "<option value=\"{$keys}\"{$checked}>{$title}</option>";
        }

        return "<select name=\"{$activeSelector}\" onchange=\"IframePlayer.frontend.initPlayer('{$this->postId}', $( '.selectors select' ).serialize());\">" . $select . "</select>";
    }
}
```
Если `foreach` был написан просто в классе, но вне функции, PHP выдаст ошибку. 

### 2. **Повреждённый код выше `foreach`** 
Посмотрите на строку **241** (перед `foreach`). Возможные проблемы: 
- Забыта `}` перед объявлением метода. 
- Используется `foreach` вне функции в классе. 

Если перед `foreach` в классе нет метода, его надо обернуть в функцию. 

### 3. **Проверка версии PHP** 
Если используется старая версия PHP (<5.3), убедитесь, что синтаксис поддерживается. 

Попробуйте обновить PHP до последней версии. 

### 4. **Файл имеет BOM или невидимые символы** 
Попробуйте открыть файл в редакторе (например, Notepad++) и убедитесь, что он сохранён в **UTF-8 без BOM**. 

### Итог 
Ошибка, скорее всего, вызвана тем, что `foreach` находится вне метода. Добавьте его внутрь функции, как показано в примере выше.
 
дальше сразу на это ругается: PHP Parse error: syntax error, unexpected token "foreach", expecting "function" or "const" in C:\OSPanel\domains\ааааа\engine\classes\iframePlayerClass.php on line 242

Совсем код поломан. Это файл класса. Там внутри самого класса должны содержаться константы или функции, а уже внутри функций - код.

PHP:
class CEpirCorporate{
        const ID = 34;

        public static function set_log($type="log", $path="log_file", $arMess=array())
        {
            foreach ($type as $k) {
                ....
            }
        }
}
 
Назад
Сверху