В PHP версиях до 7.1, в некоторых скриптах используется команда Eval, позволяющая выполнить переданный на входе текст, как команду PHP. В последующих версия PHP, данная команда помечена как Deprecated. При апргрейде, соответственно часть скриптов перестают работать. Вот моё решение по замене:
function eval($str){
file_put_content("tmp.php",$str);
include 'tmp.php';
}
P.S. Совсем если честно не понял зачем было удалять эту команду из за «безопасности», если тому кому нужно вполне заменят её подобным костылём как у меня. Моё мнение: любое обновление не должно ломать старый код, исключения — крайние случаи. Этот случай явно не крайний.
Ситуация: после обновления с RedOS 7.3 до RedOS 8.0, обновился и интерпретатор PHP с 7.4. до 8.1, что к сожалению сломало работу сайта на Bitrix. Нужна установка PHP 7.4 на RedOS 8.0
Задача: сделать даунгрейд PHP 8.1 на PHP 7.4
Решение: Штатным образом в RedOS 8.0 отсутствует возможность установки PHP 7.4, Но! так как RedOS по сути своей совместим с RedHat/CentOS, значит возможно использовать сторонние репозитарии http://rpms.remirepo.net.
Создадим в папке /etc/yum.repos.d файл remi.repo с содержимым:
# This repository only provides PHP 7.4 and its extensions
# NOTICE: common dependencies are in "remi-safe"
[remi-php74]
name=Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - $basearch
baseurl=http://rpms.remirepo.net/enterprise/7/php74/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Задача: Есть некая очень захламленная сторонними элементами страница в разметке html. Необходимо преобразовать находящуюся на ней таблица в массив данных.
Решение: сначала вычленим «грязное» содержимое таблицы между тегами <tbody></tbody>, затем преобразуем его в DOM документ, а далее уже распарсим его обходами и разложим элементы в массив.
Получилось что-то вроде:
//вычленяю таблицу
$t1=explode("<tbody>",$res);
$t2=explode("</tbody>",$t1[1]);
$tbody="<html><head><meta charset='UTF-8'></head><body><table><tbody>".$t2[0]."</tbody></table></body></html>";
$mass=[];
$dom = new domDocument('1.0', 'utf-8');
@$dom->loadHTML($tbody);
$tables= $dom->getElementsByTagName('table');
foreach ($tables as $table) {
$trs= $table->getElementsByTagName('tr');
foreach ($trs as $tr) {
$tds=$tr->getElementsByTagName('td');
$info=[];
foreach ($tds as $td) {
$info[]=$td->textContent;
};
$mass[]=$info;
}
}
В одном из проектов, скрипт парсит сайт на bitrix. С какого то момента, при установке параметров таблицы отдаваемой по ajax, стала выводиться ошибка «Request is not XHR». Быстрый гуглинг решения не дал. Стал кропотливо сравнивать заголовки которые отдаются запросом в браузере и заголовки который отдавал в скрипте. Отличие нашлось относительно быстро, страница на сайте добавляла дополнительный заголовок «Bx-ajax:true». В результате модифицировал скрипт следующим образом:
Для начала прочитаем содержимое архива (чтение архива zip на php). Во встречающихся на просторах интернета примерах, зачастую игнорируется тот факт, что имена файлов могут быть в кириллице.В результате пользователи видят «крякозябры». А zip хранит имена файлов, указывая их не в кодировке UTF-8, а в кодировке cp866 (видимо из соображения совместимости). По крайне мере на Windows. Поэтому имена файлов перед употреблением, нужно переформатировать в UTF-8.