Php ini включение библиотеки. Подключение GD2 к PHP. Подключение GD2 к PHP под FreeBSD

Предлагаю немного поговорить о языке программирования PHP, а конкретно затронуть тему расширения CURL , т.е. возможность взаимодействовать с различными серверами по различным протоколам из самого скрипта PHP.

Перед тем как приступить к рассмотрению curl хочу напомнить, что язык PHP мы с Вами уже затрагивали, например, в материале про выгрузку в Excel на PHP или возможность аутентификации на PHP , а теперь давайте поговорим о возможности посылать запросы на PHP.

Что такое CURL?

CURL – это библиотека функций PHP, с помощью которой можно посылать запросы, например, HTTP, из PHP скрипта. CURL поддерживает такие протоколы как HTTP, HTTPS, FTP и другие. Посылать HTTP запросы можно методами GET, POST, PUT.

CURL может пригодиться в случаях когда необходимо вызвать удаленный скрипт и получить результат или просто сохранить HTML код вызываемой страницы, в общем каждый может найти свое применение но смысл один это то что можно послать запросы в процессе выполнения скрипта.

Подключение библиотеки CURL в PHP

Для того чтобы использовать библиотеку CURL ее соответственно нужно подключить.

Примечание! В качестве примера мы будем использовать PHP 5.4.39 на Windows 7, а в качестве Web-сервера у нас будет выступать Apache 2.2.22.

Первое что нужно сделать, это скопировать библиотеки ssleay32.dll, libeay32.dll, libssh2.dll они расположены в директории с PHP, в системный каталог Windows, а именно в C:\Windows\System32 .

Затем в php.ini подключить библиотеку php_curl.dll, т.е. раскомментировать следующую строку

Библиотека не подключена

;extension=php_curl.dll

Библиотека подключена

Extension=php_curl.dll

Все, перезапускаем Apache, вызываем функцию phpinfo() и в случае успешного подключения у Вас должен появиться раздел curl


Если его нет, то это означает только одно, что библиотека не загрузилась, самая распространенная причина этого небыли скопированы вышеперечисленные DLL в системный каталог Windows.

Пример CURL – запрашиваем удаленную страницу для вывода на экран

В данном примере мы просто запросим удаленную страницу по протоколу HTTP методом GET и выведем ее содержимое на экран.

У нас имеется каталог test в нем 2 PHP файла это test_curl.php и test.php, где test_curl.php и есть скрипт где мы будем использовать curl, а test.php удаленный скрипт который мы будем вызывать. Код я подробно прокомментировал.

Код test_curl.php

Код test.php

Заголовок 1"; break; case 2: echo "<Н2>Заголовок 2"; break; case 3: echo "<Н3>Заголовок 3"; break; } } ?>

В итоге если вы запустите test_curl.php у Вас выведется на экран надпись «Заголовок 1», можете поэкспериментировать с передачей параметров id (в данном случае 2 или 3 ).

Пример CURL – вызываем удаленный скрипт и получаем результат

Сейчас давайте попробуем вызвать скрипт и получить результат, для того чтобы потом его обработать, для примера давайте использовать метод POST. Названия файлов оставим такими же.

Код test_curl.php

Код test.php

И если мы запустим test_curl.php то на экран у нас выведется 111, т.е. 1.11 полученное в результате обращения к удаленному скрипту, умноженное на 100.

А теперь давайте поговорим о функциях и константах к ним.

Часто используемые функции CURL и константы

  • curl_init - Инициализирует сеанс;
  • curl_close - Завершает сеанс;
  • curl_exec - Выполняет запрос;
  • curl_errno - Возвращает код ошибки;
  • curl_setopt - Устанавливает параметр для сеанса, например:
    • CURLOPT_HEADER – значение 1 означает, что необходимо вернуть заголовки;
    • CURLOPT_INFILESIZE — параметр для указания ожидаемого размера файла;
    • CURLOPT_VERBOSE — значение 1 означает что CURL будет выводить подробные сообщения о всех производимых операциях;
    • CURLOPT_NOPROGRESS – отключение индикатора прогресса операции, значение 1;
    • CURLOPT_NOBODY – если Вам не нужен документ, а нужны только заголовки, то поставьте значение 1;
    • CURLOPT_UPLOAD — для закачки файла на сервер;
    • CURLOPT_POST – выполнить запрос методом POST;
    • CURLOPT_FTPLISTONLY — получение списка файлов в директории FTP сервера, значение 1;
    • CURLOPT_PUT — выполнить запрос методом PUT, значение 1;
    • CURLOPT_RETURNTRANSFER — возвратить результат, не выводя в браузер, значение 1;
    • CURLOPT_TIMEOUT – максимальное время выполнения в секундах;
    • CURLOPT_URL – указание адреса для обращения;
    • CURLOPT_USERPWD — строка с именем пользователя и паролем в виде :;
    • CURLOPT_POSTFIELDS – данные для POST запроса;
    • CURLOPT_REFERER — задает значение HTTP заголовка «Referer: »;
    • CURLOPT_USERAGENT — задает значение HTTP заголовка «User-Agent: »;
    • CURLOPT_COOKIE — содержимое заголовка «Cookie: », который будет отправлен с HTTP запросом;
    • CURLOPT_SSLCERT- имя файла с сертификатом в формате PEM;
    • CURLOPT_SSL_VERIFYPEER – значение 0, для того чтобы запретить проверку сертификата удаленного сервера (по умолчанию 1);
    • CURLOPT_SSLCERTPASSWD — пароль к файлу сертификата.
  • curl_getinfo - Возвращает информацию об операции, вторым параметром может выступать константа для указания, что именно нужно показать, например:
    • CURLINFO_EFFECTIVE_URL — последний использованный URL;
    • CURLINFO_HTTP_CODE — последний полученный код HTTP;
    • CURLINFO_FILETIME — дата модификации загруженного документа;
    • CURLINFO_TOTAL_TIME — время выполнения операции в секундах;
    • CURLINFO_NAMELOOKUP_TIME — время разрешения имени сервера в секундах;
    • CURLINFO_CONNECT_TIME — время, затраченное на установку соединения, в секундах;
    • CURLINFO_PRETRANSFER_TIME — время, прошедшее от начала операции до готовности к фактической передаче данных, в секундах;
    • CURLINFO_STARTTRANSFER_TIME — время, прошедшее от начала операции до момента передачи первого байта данных, в секундах;
    • CURLINFO_REDIRECT_TIME — время, затраченное на перенаправление, в секундах;
    • CURLINFO_SIZE_UPLOAD — количество байт при закачке;
    • CURLINFO_SIZE_DOWNLOAD — количество байт при загрузке;
    • CURLINFO_SPEED_DOWNLOAD — средняя скорость закачки;
    • CURLINFO_SPEED_UPLOAD — средняя скорость загрузки;
    • CURLINFO_HEADER_SIZE — суммарный размер всех полученных заголовков;
    • CURLINFO_REQUEST_SIZE — суммарный размер всех отправленных запросов;
    • CURLINFO_SSL_VERIFYRESULT — результат проверки SSL сертификата, запрошенной с помощью установки параметра CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD — размер загруженного документа, прочитанный из заголовка Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD — размер закачиваемых данных;
    • CURLINFO_CONTENT_TYPE — содержимое полученного заголовка Content-type, или NULL в случае, когда этот заголовок не был получен.

Подробнее о функциях CURL и константах к ним можете посмотреть на официальном сайте PHP —

По умолчанию, расширение для работы с MySQL (библиотека php_mysql.dll) не подключено к PHP и соответствующие функции недоступны. Для подключения библиотеки необходимо внести изменения в конфигурационный файл php.ini и скопировать дополнительные библиотеки в директорию c:/windows/system32.

1. Укажите PHP (Apache) где находится php.ini (только для Apache 2.x)

Если вы используете Apache версии 2 и выше, то обязательно добавьте в конфигурационный файл Apache (httpd.conf) директиву PHPIniDir, которая позволяет точно указать месторасположение файла php.ini. После добавления директивы перезагрузите Apache и удостоверьтесь, что запуск прошел успешно.

PHPIniDir “c:/php”

Примечание

Обратите внимание, что при записи пути используются прямые слеши /, что нехарактерно для Windows, в которой используются обратные слеши \\. Дело в том, что и Apache и PHP изначально были созданы для работы на unix-системах, где используются именно прямые слеши. Во избежание возможных трудно-диагностируемых проблем настоятельно рекомендуем использовать в конфигурационных файлах Apache и PHP прямые слеши в unix-формате.

Здесь подразумевается, что конфигурационный файл php.ini хранится в директории c:/php. Чтобы окончательно удостовериться, что Apache нашел конфигурационный файл php.ini выполните функцию phpinfo().

Вывод конфигурационной информации PHP

echo phpinfo ();
?>

Найдите в полученных фиолетовых таблицах значение строки «Configuration File (php.ini) Path» . В ней должен быть указан путь к используемому файлу php.ini, включая сам файл . Если в этой строке указана только директория, то это значит, что Apache не смог найти файл php.ini.

C:/php/php.ini // Правильно – php.ini найден и используется
C:/windows/ // Неправильно – php.ini не обнаружен

Примечание

В Apache более ранних версий директивы PHPIniDir не было и вследствие этого возникало очень много ошибок, связанных с неправильным расположением файла php.ini. Для Apache версии 1.3 php.ini обязательно должен быть расположен в системной директории Windows, обычно: c:/Windows. Использование директивы PHPIniDir в Apache версии 2 позволяет кардинально решить данную проблему.

После того, как Вы удостоверились, что Apache использует правильный php.ini можно приступать к его редактированию для подключения расширения работы с MySQL.

2. Настройте в PHP.INI директиву extension_dir

Директива extension_dir указывает директорию, в которой располагаются библиотеки расширений php, в том числе и библиотека php_mysql.dll. Если вы установили php в директорию c:/php, то библиотеки расширений, как правило, располагаются в поддиректорию ext (c:/php/ext). Проверьте так ли это и установите правильное значение директивы extension_dir.

Extension_dir = "c:/php/ext"

3. Подключите расширение для работы с MySQL

Для этого найдите в php.ini строчку:

;extension=php_mysql.dll

И снимите с нее символ комментария – точку с запятой.

Extension=php_mysql.dll

4. Скопируйте дополнительную библиотеку libmysql.dll в c:/windows

Если PHP у Вас подключен к Apache в качестве модуля, то для подключения расширения MySQL необходимо скопировать дополнительную библиотеку libmysql.dll из директории c:/php в директорию c:/windows/system32. Если php подключен к Apache, как CGI-приложение, то копирования дополнительной библиотеки не требуется.

5. Перезагрузите Apache

Чтобы все внесенные изменения вступили в силу перезагрузите Apache.

6. Проверьте установку расширения

Чтобы удостовериться, что библиотека для работы с MySQL успешно подключилась к PHP выполните функцию phpinfo(). Просмотрите «фиолетовые таблицы» и найдите в них раздел с именем MySQL. Если такой раздел существует, то значит, что расширение успешно подключилось.

Проверка взаимодействия PHP c MySQL

1. Проверьте запущен ли у Вас сервер MySQL.

Перед тем, как приступить к проверке взаимодействия PHP c MySQL убедитесь, что сервер MySQL у Вас работает. Это можно сделать, открыв список служб Windows: «Пуск» | «Панель Управления» | «Администрирование» | «Службы» . Найдите службу с именем MySQL и убедитесь, что она находится в состоянии работы (третий столбец таблицы).

Второй способ убедится, что сервер MySQL работает: нажмите кнопки «Crtl» + «Alt» + «Del» и на вкладке «Процессы» найдите процесс с именем mysqld.exe. Вместо процесса mysqld.exe также могут работать процессы: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Выполните проверочный php-скрипт

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "root" ;
$dbpasswd = "" ;

$dbcnx = mysql_connect ($dblocation , $dbuser , $dbpasswd );
if (! $dbcnx )
{
echo "" ;
exit();
}
if (!

{
echo "" ;
exit();
}

if(! $ver )
{
echo "

Ошибка в запросе

" ;
exit();
}
echo
mysql_result ($ver , 0 );
?>

Если тест прошел успешно, то на экран будет выведен номер версии сервера MySQL. В противном случае, на экран будут выведены описания произошедших ошибок.

Ошибки при подключении расширения для работы с MySQL

Ошибки вида: Call to undefined function

Все ошибки содержащие фразу «Call to undefined function» указывают, на неподключенное расширение PHP. Если такие ошибки возникают при работы с фунциями MySQL, то это значит, что не подключена библиотека PHP для работы с MySQL – php_mysql.dll

Пример сообщения об ошибках:

Fatal error: Call to undefined function mysql_connect()

Для решения этой проблемы обратитесь к началу статьи.

Нет блока MySQL в phpinfo()

Если все сделано правильно, но расширение для работы с MySQL не подключается и даже отсутствует блок MySQL в выводе функции phpinfo(), то проверьте версию библиотеки libmysql.dll, расположенную в c:/windows/system32.

  1. Сравните размер библиотеки libmysql.dll, которая находится в c:/windows/system32 с размером одноименной библиотеки, которая установилась вместе с PHP. Они должны быть равны.
  2. Проведите библиотеки libmysql.dll по директории c:/windows и всем поддиректориям. Удалите все найденные дубли и оставьте только одну нужную библиотеку – ту, которая была скопирована из директории c:/php.

Примечание

Одноименная библиотека libmysql.dll поставляется также вместе с сервером MySQL. Однако, это разные библиотеки и если в директории c:/windows/system32 будет лежать именно библиотека от MySQL, то PHP не сможет подключить расширение. Библиотека libmysql.dll может быть автоматически скопирована в c:/windows/system32 при установке сервера MySQL. Наличие в системной директории библиотека от старой версии PHP также может стать препятствием.

Чистая страница проверочного скрипта

В качестве скрипта для проверки взаимодействия PHP c MySQL на нашем сайте часто используется скрипт, приведенный в листинге ниже. Его отличия от аналогичного php-скрипта, приведенного в начале статьи, – символы @ перед вызовом функций mysql_connect() и mysql_select_db(). Эти символы используются для подавления вывода ошибок в браузер. Их полезно применять на работающем сайте в Интернете чтобы предотвратить вывод в браузер конфиденциальной информации, но при отладке скриптов запрет вывода ошибок не нужен, т.к. он может затруднить диагностику проблемы.

PHP-скрипт, проверяющий взаимодействие PHP с сервером MySQL

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "root" ;
$dbpasswd = "" ;

$dbcnx = @ mysql_connect ($dblocation , $dbuser , $dbpasswd );
if (! $dbcnx )
{
echo "

К сожалению, не доступен сервер mySQL

" ;
exit();
}
if (!@
mysql_select_db ($dbname , $dbcnx ))
{
echo "

К сожалению, не доступна база данных

"
;
exit();
}
$ver = mysql_query ("SELECT VERSION()" );
if(! $ver )
{
echo "

Ошибка в запросе

"
;
exit();
}
echo
mysql_result ($ver , 0 );
?>

Если в результате выполнения данного скрипта выводится чистая страница, то, как правило, это значит, что к PHP не подключена библиотека php_mysql.dll. Чтобы более точно диагностировать проблему проведите следующую последовательность действий.

  1. Убедитесь, что выполняются другие PHP-скрипты, не использующие базу данных MySQL.
  2. Уберите символ @ перед вызовом функции mysql_connect и mysql_select, который используется для подавления вывода ошибок в браузер. После этого в браузер будет выдана более полная информация об ошибках, что поможет решению проблемы.

Ошибка: Can"t connect to MySQL server on "127.0.0.1" (10061)

Если при выполнении проверочного php-скрипта выдается ошибка подобная следующей:


Can"t connect to MySQL server on "127.0.0.1" (10061)
in C:\www\panel\htdocs\test.php on line 7

Это свидетельствует о том, что не работает сервер базы данных MySQL. Более точная диагностика этой проблемы приведена выше в пункте 1 подраздела «Проверка взаимодействия PHP c MySQL».

Ошибка: Access denied for user "root"@"localhost" (using password: YES)

Наличие следующей ошибки:

Warning: mysql_connect() :
Access denied for user "root"@"localhost" (using password: YES)
in C:\www\panel\htdocs\test.php on line 7

Свидетельствует о том, что Вы пытаетесь подключиться к базе данных MySQL c неправильным паролем. Проверьте значение переменной $dbpasswd в проверочном скрипте. По умолчанию сервер MySQL устанавливается с пустым паролем пользователя root. Если Вы самостоятельно установили пользователю root пароль, то пропишите его в переменную $dbpasswd проверочного скрипта.

Любые возникающие вопросы по подключению к PHP расширения для работы с вы можете задать на нашем форуме посвященном установке и настройке Apache, PHP и библиотек расширений .

Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!

Доброго времени суток всем читателям блога Site on! Последние 2 месяца моя работа на компанию тесно связана с чистым PHP (на использование фреймворков и CMS - табу), уже забыл что такое Joomla:) поэтому как никогда уместно будет продолжить писать и выше.

Сегодня мы поговорим о том, как устроено подключение файлов в PHP. Как вы могли заметить, любой движок для сайта (Joomla, Wordpress, OpenCart, DLE и все, все, все) состоит из тысяч.php (и не только php) файлов и все они взаимодействуют между собой, что собственно, и образует механизм работы сайта.

А теперь забудьте о движках и представьте себе другой пример: у нас есть множество страниц на сайте, в каждой из них одинаковое меню, шапка сайта и подвал. Естественно, мы не будет копировать одно и то же из файла в файл, иначе это бы получился древний HTML-сайт образца 90-х. Как минимум, мы разобьём всё на 4 файла:

  • index.php – основная часть страницы, этот файл будет меняться
  • menu.php – меню сайта
  • header.php – шапка сайта
  • footer.php – подвал сайта

Кроме главной страницы (index.php) у нас, например, ещё могут быть страницы с перечнем товаров (category.php) и страницы самих товаров (product.php). К этим страницам будет удобно подключать файлы menu.php, header.php, footer.php. Благодаря такому подходу в случае, если у нас добавиться новый пункт меню, то мы добавим его всего один раз (в menu.php), а не 3 раза (в index.php, product.php, category.php).

Следовательно, возникает вопрос: "Как в PHP присоединить файл?" . Для этих целей в PHP существует 2 инструкции:

И их производные:

Обращаю ваше внимание на то, что include и require – это не функции, это так называемые языковые конструкции, поэтому скобочки не нужны.

В чём разница include и require

include и require – это абсолютно одно и тоже, с одной только разницей, что при ошибке (например, если указанного файла не существует и его невозможно подключить) include выдаст ошибку типа Warning , после чего сайт продолжит работу, а require при этом выдаст , которая полностью остановит дальнейшую загрузку страницы.

То есть инструкция require – более радикальная и жёсткая. Что лучше использовать – решать вам, по большому счёту рекомендуют всегда выбирать более строгий вариант, то есть require, но лично мне слово include приятнее печатать:)

include_once и require_once – делают тоже, что и include (подключают файл), но при этом они следят, чтобы каждый файл был подключён не больше одного раза. Их особенно удобно использовать, если над проектом работают несколько человек и вам нужно проследить, чтобы какой-то файл не добавили несколько раз.

Внимание:

include_once и require_once – работают медленнее и потребляют больше оперативной памяти, чем include и require. Это логично и связано с тем, что им приходится запоминать все файлы, которые были подключены и каждый раз при подключении проверять: а не был ли этот файл уже подключён.

Давайте я наглядно проиллюстрирую как работает подключение файлов в PHP:

При подключении файлов (любых, например: html, txt, php, xml и тд.) PHP скрипт их содержимое тупо вставляется на место include. Другими словами include (а также я подразумеваю require, так как это одно и то же) – это всё равно, что вы скопировали откуда-то код (CTRL+C) и вставили (CTRL+V) в файл (например, в product.php), а затем сохранили и запустили как обычно: http://ваш_сайт.net/product.php

Для того чтобы различать основные файлы, такие как product.php от тех, которые мы к нему подключаем (menu.php, header.php, footer.php), подключаемые файлы переименовывают так: menu.inc.php, header.inc.php, footer.inc.php. Благодаря этому, когда мы зайдём в папку, мы сразу увидим – где основные файлы, а где вспомогательные.

Внимание:

Этот приём (дописывать inc) используется только для визуального удобства и никаких функциональных отличий в себе не несёт. Но визуальное удобство тоже очень важно, поэтому старайтесь всё и всегда структурировать и делать в одном стиле.

include с возвратом значения

Помните ключевое слово ? Так вот в PHP есть такая дикая вещь, как return внутри include. Я никогда этим не пользовался и никогда не видел, чтобы это использовали другие, но такая возможность есть, держите пример some.php:

Подключаем some.php:

// Выводит строку: PHP ?>

Ещё немного фактов

  • Подключать файлы можно в любом месте PHP кода, в том числе и внутри ;
  • Подключение (include) срабатывает во время исполнения скрипта, заранее в подключаемых файлах ничего не происходит;
  • Подключённый файл имеет туже , которую имеет строка, где объявлен include. То есть если где-то по среди файла, то глобальную область видимости, а если внутри функции, то локальную. Ещё раз подчеркну, что include это тоже самое, если бы вы взяли и скопировали код в файл на место include.

Спасибо всем за внимание и отличных выходных!

Пара очков...

В PHP нет встроенной инфраструктуры импорта, такой как python, java или.net. Существует несколько способов использования библиотек в PHP.

    скомпилировать их в двоичный файл PHP. Это самый продвинутый способ, и обычно это не желательно, если у вас нет особых потребностей.

    Установите их как модули PHP на сервере и включите их в PHP.ini. С точки зрения программиста PHP эти расширения являются частью PHP - всегда доступны. Это просто проще добавлять и удалять, не перестраивая сам PHP.

    Установите PHP-код на сервере где-нибудь и включите() его в свой PHP script.

    Сохраните копию библиотеки в свой проект и включите ее в свой PHP script.

Страница На базовом уровне код является либо частью интерпретатора (статического или динамического), либо это простой старый PHP-код, который включает() ed в ваш проект.

В ваших целях я могу только предложить вам придерживаться стандартного дистрибутива PHP (выбрать хорошую ОС Linux и использовать его PHP). Тогда почти все библиотеки, которые вам понадобятся на уровне интерпретатора, доступны как дополнительные пакеты, и сложность этого остается за теми, кто делает это каждый день.

В RedHat/Centos вы можете запустить:

yum install php php-memcached php-gd php-pecl

Страница Что касается всех других библиотек, которые вы, возможно, захотите использовать, скорее всего, лучше всего использовать хорошую фреймворк PHP, которая будет заботиться обо всем этом для вас.

Некоторые примеры:

  • Zend Framework
  • CakePHP
  • Codeigniter
  • Etc...

(не в любом порядке, только те, которые приходят на ум)

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

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

Страница php.ini анализируется и запускается при запуске PHP (каждый раз для командной строки, один раз на сервер запускается в apache). Он определяет множество настроек, включает в себя множество модулей, настраивает эти модули и т.д.

Фактически вы можете переопределить некоторые параметры в php.ini с помощью функции ini_set() в PHP. Однако это действует только для некоторых настроек. Другие должны быть установлены до запуска script.

При работе под apache вы можете добавлять строки в директивы.htaccess и , которые полностью переопределяют PHP.ini для этого каталога/виртуального хоста.

(пожалуйста, исправьте мой синтаксис и удалите эту заметку, если это неверно)

ServerName www.example.com DocumentRoot /home/joe/site/docroot php_value include_path "/home/joe/site/php-code"

Страница В ответ на ваш вопрос № 6 о вашей собственной библиотеке и лучший способ его упаковки я предлагаю вам сначала оценить необходимость библиотеки. И если вы действительно что-то делаете, узнайте наиболее распространенный способ, которым люди это делают. Если это простая библиотека, то достаточно файла.php с хорошим веб-сайтом.

Страница Может быть, немного бессвязно, но я надеюсь, что это укажет вам в правильном направлении.

Игорь Гузей

Это не точная и окончательная инструкция к действию использующая правильные термины и оптимальные варианты. Это скорее лог текущей проблемы.

Задача: Добавить в PHP поддержку/модуль GD2

Как обычно начинаем тренироваться на локальном компьютере, а он, конечно, работает под виндами. Точнее Windows XP SP2. Далее подключим GD2 в PHP, настроенном через порты или собранным вручную под FreeBSD.

Подключение GD2 к PHP под Windows

Находим в дистрибутиве:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
библиотеку php_gd2.dll, т.е. версию 2.
и копируем php_gd2.dll в c:\windows
в файле c:\windows\php.ini находим строку extension=php_gd2.dll и убираем комментарий.
Перегружаем Апач. Всё.

Если наивным образом сначала убрать в php.ini комментарий и думать, что этого достаточно, то после перезагрузки Апача появится диагностика:
"Unable to load dynamic library "./php_gd.dll" - Не найден указанный модуль."

Подключение GD2 к PHP под FreeBSD

PHP уже инсталлирован из портов

Точнее не только PHP, но вообще всё (php, MySQL, Apache, ...) было настроено с помощью портов.

# cd /usr/ports/lang/php4-extensions # make config добавляем галочку: "GD library support" # make deinstall # make reinstall # apachectl -k graceful мягкий перезапуск или # apachectl restart грубый перезапуск

PHP собран вручную

В этом случае требуется предварительная работа по подготовке JPEG и ZLIB

Установка поддержки JPEG

Возможны варианты

JPEG из порта
# cd /usr/ports/graphics/jpeg # make получили директорию work/jpeg-6b не делать make install
JPEG из дистрибутива
# cd /usr/dist/ # wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz # gunzip -c jpegsrc.v6b.tar.gz | tar xf - # cd /usr/dist/jpeg-6b # ./configure # make

Надо установить поддержку zlib

Из порта
# cd /usr/ports/archivers/php4-zlib # make Libraries have been installed in: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Собираем PHP

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd без указания директории инсталлируется встроенная в PHP библиотека GD. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b , если jpeg из порта или /usr/dist/jpeg-6b , если jpeg из дистрибутива --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # make install && make clean

Тестирование

gif.php: png.php jpg.php: gd_info.php:
KEYVAL $val) echo "
$key$val"; ?>



Пройденные ошибки

При установке библиотеки JPEG после "make" была сделана команда "make install" с расчётом, что новые файлы лягут в /usr/local и потом автоматически будут там найдены

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd --with-jpeg-dir --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Но почему-то JPEG не подключился. Не было никакой отрицательной диагностики и нет результата.

По глупости я тыкался как слепой котёнок пытаясь поставить то так, то этак. То через всё встроенное, то через скаченное, то из портов. Всё это безобразие сопровождалось лишними инсталляциями от чего произошли накладки из-за которых в момент инсталляции PHP были ошибки:

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Thank you for using PHP. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: undefined reference to `gdImageRotate" при этом вроде директория для GD указывается, но диагностика ссылается на встроенную директорию. # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules Thank you for using PHP. # make install ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: undefined reference to `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd/gd.c:1151: undefined reference to `gdImageRotate" *** Error code 1

Попытка подготовить все модули отдельно и точно указать на них.

Похожие публикации