Решение ошибки «PDOException «could not find driver»»

Заметил как-то следующую ошибку:

PDOException «could not find driver»

Причиной может быть не активированный pdo_mysql либо не установлено php5-mysql.
Посмотрим информацию о PDO:

php -i|grep PDO

В php.ini или подключенных файлах конфигурации должны быть строки:

extension=pdo.so
extension=pdo_mysql.so

Посмотрим информацию о php5-mysql:

dpkg --get-selections | grep php5-mysql

Если не установлен, то установим, в Ubuntu это можно сделать например так:

sudo apt-get install php5-mysql
sudo apt-get install php-mysql
sudo /etc/init.d/apache2 restart
sudo service apache2 restart

Как установить PHP 5.6 в Ubuntu 16

В Ubuntu 16 при установке PHP командой apt-get install php устанавливается PHP версии 7, по этому чтобы установить PHP 5.6, можно добавить сторонний репозиторий.

Если в системе установлен PHP 7, то удалить все его компоненты можно например так:

sudo apt-get purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`

Теперь добавим сторонний источник:

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php

И установим из него PHP 5.6:

sudo apt-get update
sudo apt-get install php5.6

Аналогично можно установить модули, например:

sudo apt-get install php5.6-mysql php5.6-mcrypt php5.6-mbstring php5.6-xml

Для проверки установленной версии PHP выполним:

sudo php -v

Смотрите также мою статью:
Повышение версии PHP в Ubuntu 14.04

Как включить короткие теги PHP?

Понадобилось недавно включить короткие теги PHP так как код сайта который я переносил на другой сервер был написан с их использованием.
По умолчанию они отключены.
Например обычные теги выглядят так:

<?php  код  ?>

А короткие так:

<? код ?>

Чтобы включить короткие необходимо в файле конфигурации php.ini найти параметр short_open_tag и указать его значение в On, например:

short_open_tag=On

php.ini обычно находится в директории /etc/php5/, если используется cpanel, то в /usr/local/lib/php.ini.

Необходимо перезагрузить веб сервер чтобы применить изменение, в Ubuntu apache2 перезагружается командой:

sudo service apache2 restart

Решение ошибки «Расширение mysqli|mysql не найдено»

Заметил как-то на одном из новых Ubuntu серверов ошибку при открытии phpMyAdmin — «Расширение mysqli|mysql не найдено».

Читать далее «Решение ошибки «Расширение mysqli|mysql не найдено»»

Как понизить версию PHP?

На примере буду понижать версию PHP в Ubuntu 18.04, в которой по умолчанию устанавливается версия 7.2. Я не рекомендую понижать версию PHP, так как новые версии производительнее и закрывают уязвимости, но бывают случаи когда нужно запустить старый скрипт или движок, который не работает на новых версиях PHP, а исправить код очень трудоемко из-за того что много файлов.

Читать далее «Как понизить версию PHP?»

Решение ошибки «PHP Deprecated: Function split() is deprecated in»

Данная ошибка может возникнуть после обновления PHP на более новую версию.

Собственно функция split() является устаревшей с PHP 5.3.x и её необходимо заменить в коде на preg_split()

Все.

Как сохранить POST запрос в файл

Приведу пару примеров сохранения данных приходящего POST запроса в файл:

Вариант 1

$s = implode('|', $_POST);
exec('echo $s >> file.txt');

Вариант 2

file_put_contents('file.txt', json_encode($_POST));

Пример варианта 2 с указанием конкретного параметра:

file_put_contents('file.txt', json_encode($_POST['parameter']));

Проверка WMID (PHP)

Проверка WMID реализованная на языке веб-программирования PHP.
Автор: © Сергей eLRiz Козлов
Исходный код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>Проверка WMID</title>

</head>

<body>

<?php

    if( isset( $_GET['wmid'] ) AND is_numeric( $_GET['wmid'] ) == TRUE AND strlen( $_GET['wmid'] ) == 12 )

    {

        $url = iconv( 'windows-1251', 'UTF-8', file_get_contents( 'http://passport.webmoney.ru/asp/certcard.asp?id='. $_GET['wmid'] ) );

        preg_match_all( "|</[^>]+>(.*)<[^>]+>|U", $url, $out, PREG_PATTERN_ORDER );

        if( isset( $out[0][4] ) )

            echo 'WMID#: '. $_GET['wmid'] .'<br />'.

                  strip_tags( $out[0][4] ) .'<br />

                  Бизнес-уровень: '. strip_tags( $out[0][8] ) .'<br />

                  Претензий: '. strip_tags( $out[0][10] ) .'<br />

                  <form action="http://arbitrage.webmoney.ru/asp/newclaims.asp" method="get">

                    <input type="submit" value="Оставить отзыв или претензию" />

                    <input type="hidden" name="procwmid" value="'. $_GET['wmid'] .'" />

                  </form>';

        else

            echo '<font color="#FF0000"><b>Ошибка! Такой WM-идентификатор незарегистрирован</b></font><br />';

        echo '<a href="wmid.php">Назад</a>';

    }

    else

        echo '<form action="wmid.php" method="get">

                WMID#: <br />

                <input type="text" name="wmid" maxlength="12" /><br />

                <input type="submit" value="Найти" /><br />

            </form>';

?>

</body>

</html>

Запуск shell сценария из php

Функция shell_exec позволяет выполнять команды на сервере.
В конфиге php.ini может стоять запрет на ее выполнение. Также стоит быть аккуратным в написании php кода с ее использованием, дабы не предоставить злоумышленникам доступ к выполнению команд на сервере.

Приведу краткий пример php кода:

<?php
$result = shell_exec('uptime');
echo "<pre>$result</pre>";
?>

Теги pre позволят сохранить форматирование текста.

Аналогично выполняются и файлы, запускаемый файл должен иметь права на запуск.
Разрешаем запуск:

chmod a+x file.sh

Аналогичный php код:

<?php
$result = shell_exec('/dir/file.sh');
echo $result;
?>