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

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

Решается она естественно установкой расширения следующей командой:

sudo apt-get install php5-mysql

После чего перезагрузим веб-сервер чтобы применить изменения:

sudo service apache2 restart

Все.

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

На примере буду понижать версию PHP в Ubuntu.

Если PHP установлен в системе, то полностью удалим его:

sudo apt-get remove php5-gd php5-curl php5-common
sudo apt-get remove --purge php5*

Обновим систему и установим необходимые компоненты чтобы в дальнейшем можно было вручную скомпилировать любую версию PHP:

sudo apt-get update
sudo apt-get install build-essential openssl libssl-dev openssl-blacklist-extra bison autoconf automake libtool libmysqlclient-dev re2c libxslt1-dev libxml2-dev flex libssl-dev libsqlite0-dev libdb5.1-dev libncurses5-dev libbz2-dev libldap2-dev libjpeg-dev libt1-dev libc-client2007e-dev libXpm-dev libfreetype6-dev libcurl4-openssl-dev libgmp3-dev libmcrypt-dev libmhash-dev libt1-dev libsnmp-dev freetds-dev libpcre3-dev zlib1g-dev libmysqlclient-dev openssl-blacklist git unixODBC-dev libpng12-dev libaspell-dev libreadline6-dev librecode-dev libtidy-dev

Теперь скачем архив с нужной версией PHP с официального сайта <noindex><a href="http://in1.php.net/releases/" target="_blank" rel="nofollow">http://in1.php.net/releases/</a></noindex>, распакуем его, и перейдем в директорию с распакованными файлами:
sudo -i
wget http://museum.php.net/php5/php-5.3.4.tar.bz2
tar -xvf php-5.3.4.tar.bz2
cd php-5.3.4

Ну и собственно сконфигурируем, скомпилируем и установим:

./configure
make
make install

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

./configure --with-config-file-path=/etc/php5/apache2 -with-pear=/usr/share/php -with-bz2=/usr -with-mysqli -with-mysql

После установки добавим в конфигурационный файл /etc/apache2/apache2.conf следующую строку:

AddType application/x-httpd-php .php

И подключим PHP к apache2 выполнив команду:

sudo a2enmod php5
sudo service apache2 restart

Если при выполнении команды make возникнет ошибка следующего вида:

/root/php-5.3.3/php-5.3.4/ext/dom/node.c:1903:21: error: dereferencing pointer to incomplete type
    ret = buf->buffer->use;
                     ^
In file included from /root/php-5.3.3/php-5.3.4/main/php.h:38:0,
                 from /root/php-5.3.3/php-5.3.4/ext/dom/node.c:26:
/root/php-5.3.3/php-5.3.4/ext/dom/node.c:1905:40: error: dereferencing pointer to incomplete type
     RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
                                        ^
/root/php-5.3.3/php-5.3.4/Zend/zend_API.h:545:20: note: in definition of macro ‘ZVAL_STRINGL’
   const char *__s=(s); int __l=l;  \
                    ^
/root/php-5.3.3/php-5.3.4/ext/dom/node.c:1905:5: note: in expansion of macro ‘RETVAL_STRINGL’
     RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
     ^
make: *** [ext/dom/node.lo] Ошибка 1

то нужно применить патч php_patch, файл из архива положим в директорию с исходниками PHP /ext/patch.patch, перейдем в директорию ext и применим патч (после чего команда make должна будет выполнится без этой ошибки):

cd /ext/
git apply -v patch.patch 
cd ..

Решение ошибки «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']));

Как включить cURL

Для включения расширения cURL в Linux Ubuntu/Debian необходимо сначала его установить командой:

sudo apt-get install php-curl

Либо так для старой версии PHP5:

sudo apt-get install php5-curl

Активировать/деактивировать модуль можно так:

sudo phpenmod curl
sudo phpdismod curl

Перезагрузим Apache2 чтобы применить изменения:

sudo /etc/init.d/apache2 restart

Посмотрим активирован ли curl:

php -i | grep -i curl

В Windows системах cURL обычно идет в комплекте с PHP и для включения необходимо раскомментировать строку extension=php_curl.dll в файле php.ini. После чего перезагрузить службу Apache2.

Проверка 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;
?>