воскресенье, 30 декабря 2012 г.

Решение "Fatal error: Call to undefined method mysqli_stmt::get_result()"


После установки на сервер(Debian  squeeze, apache2, php, mysql) своего сайта с удивлением обнаружил, что скрипты отказываются работать, выдавая такую ошибку: "Fatal error: Call to undefined function mysqli_stmt_get_result()". Оказалось, что для работы mysqli_stmt_get_result() Нужен mysqlnd, хотя в той же убунте он идет с php по умолчанию(по крайней мере в самой свежей). Пришлось пересобирать.

Вот решение:

Сначала подключаем репозитории с www.dotdeb.org

nano /etc/apt/sources.list

Добавляем

deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all


Потом выполняем эти команды:

wget http://www.dotdeb.org/dotdeb.gpg

cat dotdeb.gpg | sudo apt-key add -

apt-get update

apt-get upgrade

apt-get install dpkg-dev

apt-get install php5-dev

cd /tmp

apt-get source php5

cd  /tmp/php5-5.3.20/ext/mysqlnd

mv config9.m4 config.m4

sed -ie "s{ext/mysqlnd/php_mysqlnd_config.h{config.h{" mysqlnd_portability.h

phpize

./configure

cd /tmp/php5-5.3.20/ext/mysql

phpize

./configure --with-mysql=mysqlnd

make && make install

cd /tmp/php5-5.3.20/ext/mysqli

phpize

./configure --with-mysqli=mysqlnd

make && make install



После этого у меня всё заработало =).

Установка apache, php, mysql на Ubuntu(Debian)

 Что то зачастил я на vds серваки поднимать, по этому вот такой не большой мануал. Все команды выполняются из под root.

Обычно, конечно на вдс апач уже установлен, но да ладно
Установка:
sudo apt-get install apache2

Запуск,остановка и перезапуск сервера
invoke-rc.d apache2 start  
invoke-rc.d apache2 stop
invoke-rc.d apache2 restart

Установка PHP
sudo apt-get install php5 libapache2-mod-php5

Установка MySQL
sudo apt-get install mysql-server

Не забываем включить mod_rewrite
sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
invoke-rc.d apache2 restart

Ну и phpmyadmin под конец
sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin

доступ http://mysite.com/phpmyadmin

среда, 26 декабря 2012 г.

Создание виртуальных хостов apache windows

Добавляем в

C:/WINDOWS/system32/drivers/etc/hosts

127.0.0.1    my_new_host.localhost

В apache\conf\httpd.conf

<VirtualHost *:80>
ServerAdmin webmaster@serv1.ru
ServerName my_new_host.localhost
DocumentRoot E:\web\my_new_host
ScriptAlias /cgi/ "E:\web\my_new_host"
</VirtualHost>

Затем перезагружаем апач и готово.

mysql Создание пользователя

Создание пользователя в mysql через командную строку(cmd) в windows
Предополагается что директория mysql\bin уже добавлена в переменную окружения PATH.

Заходим в mysql:

mysql -u root -p

Создаем пользователя:

create user 'my_user'@'localhost' identified by 'my_password';

Даём ему права на базу данных:

 grant all privileges on my_database.* to 'my_user'@'%';

mysql HeidiSQL

Нашёл шикарный бесплатный клиент для mysql, взамен внезапно оказавшемуся платным, навикату. HeidiSQL. Супер удобный, даже удобнее навиката. К тому же постоянно обновляется.

среда, 26 сентября 2012 г.

Склонение слов php

Когда надо получить слово, склоненное в зависимости от числа, можно использовать эту функцию:

// $nouns = array('результат','результата','результатов');
function declension_nouns_number($nouns, $num)
{
    $num = sprintf('%02s', $num);
    
    if(substr($num, -2, 1) == 1) // если число от 10 до 19
    {
        return $nouns[2];
    }
    else
    {
        switch (substr($num, -1, 1))
        {
            case 1:
            {
                return $nouns[0];
            }
            case 2: case 3: case 4:
            {
                return $nouns[1];
            }
            default:
            {
                return $nouns[2];
            }
        }
    }
}

понедельник, 9 апреля 2012 г.

javascript ajax validate remote php

Допустим нам понадобилось проверить наличие email который ввел пользователь при регистрации, или любую другую информацию, для проверки которой не требуется перезагружать страницу, но нужно отправить запрос на сервер. Для этого используются плагин jquery validate метод remote.

 Для начала надо подключить jquery, jquery.form и jquery.validate

<script src="jquery.js" type="text/javascript"></script> 
<script src="jquery.form.js" type="text/javascript"></script> 
<script src="jquery.validate.js" type="text/javascript"></script> 
 
После инициализации валидации надо добавить правило валидации для поля.
 
$("mail").rules("add",
 {
  remote:{
   url: "checkmail.php", //скрипт на который будут отправлены данные
   type: "post", //метод отправки
   data: { // дополнительные данные
   dopValue: function() {
    return false;
       }
     }
   },
 messages : {
    remote: 'Поле обязательно для заполнения' 
//сообщение при неверном значении поля
  }
});

Основное значение поля отправляется по умолчанию, по этому в данном
случае никаких дополнительных значений нам отправлять не нужно.
Проверка будет осуществлятся каждый раз при снятии выбора с поля.
Скрипт php должен возвращать
true - в случае, если поле прошло валидацию
false - в случае, если не прошло
Вроде бы все просто =)

суббота, 17 марта 2012 г.

Генерация pdf из php

Для генерации pdf файла из php существует класс fpdf . www.fpdf.org И всё бы хорошо, но он не поддерживает русский язык.

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

Подключаем ufpdf

require_once 'ufpdf/ufpdf.php';

 из него уже подключается fpdf и все. Дальше по туториалам.


Считаю что туториалы для fpdf вполне хорошие и понятные. Единственно с чем пришлось повозиться, дак это с генерацией шрифтов (через ufpdf\tools\ttf2ufm.exe). Но оно тоже вполне хорошо описано в тех же туториалах. Если кому то надо будет. Напишу дополнительно.

среда, 11 января 2012 г.

Настройка PHP

 Редактируем php.ini

1) Установите вывод ошибок
error_reporting = E_ALL | E_STRICT

2) Найдите строку:
post_max_size = 8M
Увеличьте максимальный размер данных принимаемых методом POST, изменив ее на:
post_max_size = 100M

3) Раскомментируйте
extension_dir = "I:\php5.3.8\ext"

4) Раскомментируйте и укажите в значении путь для временных загружаемых файлов, и создайте эту папку:
upload_tmp_dir = "I:\php5.3.8\upload"

5) Увеличьте максимально допустимый размер загружаемых файлов:
upload_max_filesize = 100M

6) Подключите, расскомментировав, данные библиотеки расширений:
extension=php_bz2.dll
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll

7) Найдите строку:
;date.timezone =
Раскомментируйте и установите значением часовой пояс вашего местоположения (список часовых поясов можно найти в документации): date.timezone = "Europe/Moscow"

8) Найдите строку:
;session.save_path = "/tmp"
Создайте папку tmp и замените значение на
session.save_path = "I:\php5.3.8\tmp"
Это папка для хранения временных файлов сессий.

9) output_buffering = 4096 меняем на output_buffering = off
Отключение буферизации вывода

Настройка Apache

Редактируем файл conf/httpd.conf

1) Для работы модуля mod_rewrite раскоментируем:
LoadModule rewrite_module modules/mod_rewrite.so

2) Для загрузки PHP интерпретатора, в конец блока загрузки модулей добавим(если, конечно, php распакован в папку php5.3.8 как, у меня сейчас. У вас скорее всего будет уже другая версия):
LoadModule php5_module ../php5.3.8/php5apache2_2.dll

3) Определим каталог содержащий конфигурационный файл PHP:
PHPIniDir ../php5.3.8

4) Найдём строку ServerName www.example.com:80
и заменим на:
ServerName localhost:80

5) Найдём строку:
DocumentRoot "c:/Apache2/htdocs"
Назначим корневую директорию относительно папки апача (если буква диска изменится, он не заметит. Папку web конечно надо создать, а то апач не запустится):
DocumentRoot ../web

6) Найдём блок:
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

Заменим на:
<Directory />
    Options Includes Indexes FollowSymLinks
    AllowOverride All
    Allow from all
</Directory>

7) Изменим первоначальный блок управления директориями:
<Directory "c:/Apache2/htdocs">
    Options Includes Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

На:
<Directory ../web>
    Options Includes Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

8) Найлём блок:
<IfModule dir_module>
   DirectoryIndex index.html
</IfModule>

Заменим его на:
<IfModule dir_module>
   DirectoryIndex index.php index.html index.htm index.shtml
</IfModule>



9) Скажем апачу, что файлы .php надо выполнять.
В блок
<IfModule mime_module>
Вставим
AddType application/x-httpd-php .php

10) Для того что бы апач откликался только с локалхоста изменим Listen на:
Listen 127.0.0.1:80