Предлагаю немного поговорить о языке программирования PHP, а конкретно затронуть тему расширения CURL , т.е. возможность взаимодействовать с различными серверами по различным протоколам из самого скрипта PHP.
Перед тем как приступить к рассмотрению curl хочу напомнить, что язык PHP мы с Вами уже затрагивали, например, в материале про выгрузку в Excel на PHP или возможность аутентификации на PHP , а теперь давайте поговорим о возможности посылать запросы на PHP.
CURL – это библиотека функций PHP, с помощью которой можно посылать запросы, например, HTTP, из PHP скрипта. CURL поддерживает такие протоколы как HTTP, HTTPS, FTP и другие. Посылать HTTP запросы можно методами GET, POST, PUT.
CURL может пригодиться в случаях когда необходимо вызвать удаленный скрипт и получить результат или просто сохранить HTML код вызываемой страницы, в общем каждый может найти свое применение но смысл один это то что можно послать запросы в процессе выполнения скрипта.
Для того чтобы использовать библиотеку 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.
В данном примере мы просто запросим удаленную страницу по протоколу HTTP методом GET и выведем ее содержимое на экран.
У нас имеется каталог test в нем 2 PHP файла это test_curl.php и test.php, где test_curl.php и есть скрипт где мы будем использовать curl, а test.php удаленный скрипт который мы будем вызывать. Код я подробно прокомментировал.
Код test_curl.php
Код test.php
Заголовок 1Н1>"; break; case 2: echo "<Н2>Заголовок 2Н2>"; break; case 3: echo "<Н3>Заголовок 3Н3>"; break; } } ?>
В итоге если вы запустите test_curl.php у Вас выведется на экран надпись «Заголовок 1», можете поэкспериментировать с передачей параметров id (в данном случае 2 или 3 ).
Сейчас давайте попробуем вызвать скрипт и получить результат, для того чтобы потом его обработать, для примера давайте использовать метод POST. Названия файлов оставим такими же.
Код test_curl.php
Код test.php
И если мы запустим test_curl.php то на экран у нас выведется 111, т.е. 1.11 полученное в результате обращения к удаленному скрипту, умноженное на 100.
А теперь давайте поговорим о функциях и константах к ним.
Подробнее о функциях CURL и константах к ним можете посмотреть на официальном сайте PHP —
Пара очков...
В 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, которая будет заботиться обо всем этом для вас.
Некоторые примеры:
(не в любом порядке, только те, которые приходят на ум)
При условии, что вы использовали стандартный подход использования RPM или аналогичный для управления скомпилированными в аспектах PHP и расширений, тогда хорошая надежная структура позаботится о включении всего вашего дополнительного кода библиотеки PHP, который вам нужен.
В чем заключается конечный результат: вы сосредоточены на доставке продукта, а не на всю инфраструктуру, которую вам в противном случае пришлось бы изучать и изобретать.
Страница php.ini анализируется и запускается при запуске PHP (каждый раз для командной строки, один раз на сервер запускается в apache). Он определяет множество настроек, включает в себя множество модулей, настраивает эти модули и т.д.
Фактически вы можете переопределить некоторые параметры в php.ini с помощью функции ini_set() в PHP. Однако это действует только для некоторых настроек. Другие должны быть установлены до запуска script.
При работе под apache вы можете добавлять строки в директивы.htaccess и
(пожалуйста, исправьте мой синтаксис и удалите эту заметку, если это неверно)
Страница В ответ на ваш вопрос № 6 о вашей собственной библиотеке и лучший способ его упаковки я предлагаю вам сначала оценить необходимость библиотеки. И если вы действительно что-то делаете, узнайте наиболее распространенный способ, которым люди это делают. Если это простая библиотека, то достаточно файла.php с хорошим веб-сайтом.
Страница Может быть, немного бессвязно, но я надеюсь, что это укажет вам в правильном направлении.
Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!
Доброго времени суток всем читателям блога Site on! Последние 2 месяца моя работа на компанию тесно связана с чистым PHP (на использование фреймворков и CMS - табу), уже забыл что такое Joomla:) поэтому как никогда уместно будет продолжить писать и выше.
Сегодня мы поговорим о том, как устроено подключение файлов в PHP. Как вы могли заметить, любой движок для сайта (Joomla, Wordpress, OpenCart, DLE и все, все, все) состоит из тысяч.php (и не только php) файлов и все они взаимодействуют между собой, что собственно, и образует механизм работы сайта.
А теперь забудьте о движках и представьте себе другой пример: у нас есть множество страниц на сайте, в каждой из них одинаковое меню, шапка сайта и подвал. Естественно, мы не будет копировать одно и то же из файла в файл, иначе это бы получился древний HTML-сайт образца 90-х. Как минимум, мы разобьём всё на 4 файла:
Кроме главной страницы (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 выдаст ошибку типа 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) используется только для визуального удобства и никаких функциональных отличий в себе не несёт. Но визуальное удобство тоже очень важно, поэтому старайтесь всё и всегда структурировать и делать в одном стиле.
Помните ключевое слово ? Так вот в PHP есть такая дикая вещь, как return внутри include. Я никогда этим не пользовался и никогда не видел, чтобы это использовали другие, но такая возможность есть, держите пример some.php:
Подключаем some.php:
// Выводит строку: PHP ?>
Спасибо всем за внимание и отличных выходных!
По умолчанию, расширение для работы с MySQL (библиотека php_mysql.dll) не подключено к PHP и соответствующие функции недоступны. Для подключения библиотеки необходимо внести изменения в конфигурационный файл php.ini и скопировать дополнительные библиотеки в директорию c:/windows/system32.
Если вы используете 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().
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.
Директива extension_dir указывает директорию, в которой располагаются библиотеки расширений php, в том числе и библиотека php_mysql.dll. Если вы установили php в директорию c:/php, то библиотеки расширений, как правило, располагаются в поддиректорию ext (c:/php/ext). Проверьте так ли это и установите правильное значение директивы extension_dir.
Extension_dir = "c:/php/ext"
Для этого найдите в php.ini строчку:
;extension=php_mysql.dll
И снимите с нее символ комментария – точку с запятой.
Extension=php_mysql.dll
Если PHP у Вас подключен к Apache в качестве модуля, то для подключения расширения MySQL необходимо скопировать дополнительную библиотеку libmysql.dll из директории c:/php в директорию c:/windows/system32. Если php подключен к Apache, как CGI-приложение, то копирования дополнительной библиотеки не требуется.
Чтобы все внесенные изменения вступили в силу перезагрузите Apache.
Чтобы удостовериться, что библиотека для работы с MySQL успешно подключилась к PHP выполните функцию phpinfo(). Просмотрите «фиолетовые таблицы» и найдите в них раздел с именем 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.
$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. В противном случае, на экран будут выведены описания произошедших ошибок.
Все ошибки содержащие фразу «Call to undefined function» указывают, на неподключенное расширение PHP. Если такие ошибки возникают при работы с фунциями MySQL, то это значит, что не подключена библиотека PHP для работы с MySQL – php_mysql.dll
Пример сообщения об ошибках:
Fatal error: Call to undefined function mysql_connect()
Для решения этой проблемы обратитесь к началу статьи.
Если все сделано правильно, но расширение для работы с MySQL не подключается и даже отсутствует блок MySQL в выводе функции phpinfo(), то проверьте версию библиотеки libmysql.dll, расположенную в c:/windows/system32.
Одноименная библиотека libmysql.dll поставляется также вместе с сервером MySQL. Однако, это разные библиотеки и если в директории c:/windows/system32 будет лежать именно библиотека от MySQL, то PHP не сможет подключить расширение. Библиотека libmysql.dll может быть автоматически скопирована в c:/windows/system32 при установке сервера MySQL. Наличие в системной директории библиотека от старой версии PHP также может стать препятствием.
В качестве скрипта для проверки взаимодействия PHP c MySQL на нашем сайте часто используется скрипт, приведенный в листинге ниже. Его отличия от аналогичного php-скрипта, приведенного в начале статьи, – символы @ перед вызовом функций mysql_connect() и mysql_select_db(). Эти символы используются для подавления вывода ошибок в браузер. Их полезно применять на работающем сайте в Интернете чтобы предотвратить вывод в браузер конфиденциальной информации, но при отладке скриптов запрет вывода ошибок не нужен, т.к. он может затруднить диагностику проблемы.
$dblocation
=
"127.0.0.1"
;
$dbname
=
"test"
;
$dbuser
=
"root"
;
$dbpasswd
=
""
;
$dbcnx
= @
mysql_connect
($dblocation
,
$dbuser
,
$dbpasswd
);
К сожалению, не доступен сервер mySQL К сожалению, не доступна база данных Ошибка в запросе
if (!
$dbcnx
)
{
echo
"
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. Чтобы более точно диагностировать проблему проведите следующую последовательность действий.
Если при выполнении проверочного 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».
Наличие следующей ошибки:
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 и библиотек расширений .
Игорь Гузей
Это не точная и окончательная инструкция к действию использующая правильные термины и оптимальные варианты. Это скорее лог текущей проблемы.
Как обычно начинаем тренироваться на локальном компьютере, а он, конечно, работает под виндами. Точнее Windows XP SP2. Далее подключим GD2 в PHP, настроенном через порты или собранным вручную под FreeBSD.
Находим в дистрибутиве:
\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" - Не найден указанный модуль."
Точнее не только PHP, но вообще всё (php, MySQL, Apache, ...) было настроено с помощью портов.
# cd /usr/ports/lang/php4-extensions # make config добавляем галочку: "GD library support" # make deinstall # make reinstall # apachectl -k graceful мягкий перезапуск или # apachectl restart грубый перезапуск
В этом случае требуется предварительная работа по подготовке JPEG и ZLIB
Возможны варианты
KEY | VAL $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
Попытка подготовить все модули отдельно и точно указать на них.
11region-rp.ru - Беспроводные сети - Настройка. Безопасность. Устройства. Программы