Xpoint
   [напомнить пароль]

FAQ форума Программирование::PHP: История

Внимание! Данный интерфейс находится в стадии глубокой переделки. Наберитесь терпения.

Последнее изменение

11 лет назад Александр Галкин[досье] изменил текст:
Текст: %%(comment)Давайте его к человеческому (современному) виду приведём%%.¶

{{TOC}}¶
= Как правильно читать ман. Все перечитал -, а нужного не нашел...
[[http://tony2001.phpclub.net/faq/basics.manual.html Учимся читать ман]]¶
= Полезные ссылки¶
1. http://www.google.com. Это, без шуток, самая важная ссылка по PHP. При некотором умении в ней можно нейти ответ на любой вопрос. Но даже и не обладая особыми навыками в поиске, можно получать порясающиепотрясающие результаты. Например, просто введите в строку поиска ту ошибку, которую выдал РНР.¶
2. Языки программирования -- PHP на webclub.ru -- www.webclub.ru/content/programming_php. Ссылка оставлена в мемориальных целях...
3. [[http://www.php.net/manual/en/ Официальная документация по PHP]]. Самая главная, полная, подробная и актуальная, с комментариями пользователей.¶
4. Собрание ссылок на различные варианты документации, в том числе и русские переводы -- http://phpfaq.ru/docs¶
5. [[http://phpfaq.ru phpfaq.ru - Ответы на САМЫЕ ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ]]. Обязательно к прочтению. Вы обязательно столкнетесь с каждым из освещенных там вопросов.¶
6. Клуб российских PHP разработчиков -- http://www.phpclub.net/. Там же -- [[http://phpclub.net/talk/ самая мощная система форумов по PHP в России]].¶
7. Самый известный, наверное, российский ресурс -- [[http://php.spb.ru/ PHP по-русски]]. Во всяком случае, Яндекс, Гугль и я считаем именно так.
8. [[http://www.dklab.ru/ Сайт Дмитрия Котерова]], автора книги "«Самоучитель по РНР"», постоянного посетителя данного форума. Содержит значительное количество интересных материалов и оригинальных разработок, таких, как "Денвер", "Орфо". Недавно появился форум[[http://www.denwer.ru/ «Денвер»]] и [[http://dklab.ru/chicken/nablas/24.html «Орфо»]].
9. [[http://www.webscript.ru/ WebScript.Ru]] -- каталог Internet, в котором собраны преимущественно свободно распространяемые скрипты, документация по языкам программирования Perl и PHP. Неплохой форум.¶
10. [[http://spectator.ru/issues/161 - «Как сделать, чтобы URL в строке адреса был ясным и понятным, но без лишних заморочек». ЧПУ и PHP]] -- Дмитрий Смирнов пишет про ЧПУ (Человекопонятный УРЛ :-), в том числе -- и про обработку 404-й ошибки (запрашиваемый документкогда запрашиваемый документ не был найден).¶
11. [[http://phpclub.unet.ru/samples/167.phps Числа прописью.]]¶
12. [[http://detail.phpclub.net/ PHP в деталях]]. Собрание авторских статей на самые разные темы, посвященные РНР, и часто задаваемым вопросам по нему.¶
13. Помоги себе сам.: [[http://ln.com.ua/~openxs/articles/smart-questions-ru.html Каккак правильно задавать вопросы]]. Обширный текст, который реально может помочь с тем, как найти ответ на свой вопрос, и как правильно задать его в форуме. ¶

Некоторые западные ресурсы:¶

1. http://www.phpwizard.net/ -- ресурс, ориентированный на PHP. Проекты (такие как phpMyAdmin, phpChat), ссылки, руководства и т.п.¶
2. http://www.phpbuilder.com/ -- статьи. многоМного и умные.¶
3. http://www.zend.com/ - "- «Zend -- лидер в технологии PHP. Наша миссия -- в том, чтобы обеспечить коммерческую жизнеспособность и поддержку PHP решений для Web."»
4. http://www.soysal.com/PHPEd/ -- небольшой редактор, сделанный по подобию ~HomeSite, но для phpPHP.
5. http://www.hotscripts.com/PHP/ -- одно из самых больших собраний готовых скриптов.¶
6. http://sourceforge.net/ -- сервис для разработчиков, работающих по принципу Открытого Исходного Кода: форумы, исходники и т.п.¶
7. http://www.devshed.com/Server_Side/PHP/¶
8. ~WeberDev.com (англ.) - [[http://www.weberdev.com/ "... WeberDev.com]] (англ.) -- «…был задуман в качестве демонстрации примеров кода, так, чтобы это было более легко для программистов новичка в области php3..."php…»
9. [[http://www.boutell.com/gd/ Графическая библиотека GD]] (англ.): -- A graphics library for fast image creation - http://www.boutell.com/gd/

= Передача из формы параметров с множественным значением (коллекция SELECT multiple и т.п.)¶
При передаче данных из одного файла PHP далее для обработки, передается массив вида имя_элемента -=> значение.
Но есть некоторые элементы (например SELECT, select с опцией множественного выбора MULTIPLEmultiple), где в качестве значения фигурирует не одно, а группа (коллекция). Что делать в этом случае?¶

Такие элементы передаются в виде коллекции.¶
В
массива. Для этого в HTML коде подобного элемента в названии элемента=#name#= следует указать []¶
=#[]#=. Например:¶
<<<(html)¶
<select name="collect[]" multiple="yes"
<option value="one">one</option>¶
<option value="two">two</option>¶
<option value="three">three</option>¶
<option value="next">next</option>¶
</select>¶
>>>¶
В этом случае в принимающий PHP-скрипт попадет массив под именем =#$_REQUEST['collect']#=, содержащий все выбранные значения.¶

В этом случае, в качестве значения в принимающий PHP скрипт попадет массив под именем $collect и размерности, равной числу выбранных элементов!¶
Более того!
Подобный прием можно использовать для объединения в коллекцию и других параметров формы:¶
<<<(php)¶
<
//
!-- php скрипт, демонстрирующий получение коллекций
?
--
<html>¶
<head><title>Get Collection</title></head>¶
<body>¶
<form method="post" enctype="multipart/form-data" action="collection.php3">¶

<!--
элементы типа checkbox объединяются в коллекцию $массив collect1
-->¶
<input type="checkbox" name="collect1[]" value="chk1"> one<br>¶
<input type="checkbox" name="collect1[]" value="chk2"> two<br>¶
<input type="checkbox" name="collect1[]" value="chk3"> три¶

<p>¶
<!--
коллекция $
массив collect2 служит для передачи значения
SELECT с множественным выбором
-->¶

<select name="collect2[]" multiple="yes"
<option value="one">one</option>¶
<option value="two">two</option>¶
<option value="three">three</option>¶
<option value="next">next</option>¶
</select>¶

<p>¶
<input type="submit" name="Submit" value="post">¶
</form>¶
</body>¶
</html>¶

<?php
if(count($collect1) > 0)!empty($_REQUEST['collect1']))
echo "<p><b>Checkboxes:</b><br />";¶
for ($i=0; $i<count($collect1); $i++ foreach($_REQUEST['collect1'] as $i=>$value) {¶
echo $collect1[$i], "<br"$value<br />";¶

} ¶
if(count($collect2) > 0)!empty($_REQUEST['collect1']))
echo "<p><b>Selected:</b><br />";¶
for ($i=0; $i<count($collect2); $i++ foreach($_REQUEST['collect2'] as $i=>$value) {¶
echo $collect2[$i], "<br"$value<br />";¶


?>¶
</body>¶
</html>¶
>>>¶

= Как сделать upload картинки через форму?¶
ростойПростой HTML-код для организации закачки файла с машиныкомпьютера пользователя выглядит так:¶
<<<(php)¶
<html>¶
<head><title>Upload</title></head>¶
<body>¶
<!-- указание enctype="multipart/form-data" является обязательным!!! -->¶
<form method="post" action="upload.php3"¶
php" enctype="multipart/form-data">¶
<b>Файл:</b><br />
<input type="file" name="form_data" size=40¶
maxlength=255>¶
userfile"><br /
<input type="submit" name="sibmit" value="uploadЗакачать">¶
</form>¶
</body>
</html>¶
>>> ¶

Принимающий скрипт, выглядит примерно так:¶
<<<(php)¶
<? $data = fread(fopen($form_data, "r"), filesize($form_data));¶
// если надо класть файл в БД, то нужна предварительная операция:¶
// $data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));¶
php¶

// путь к директории, в которую будут сохраняться файлы¶
$path = "/repository/";¶
$fpwrite = fopen("$path$form_data_name", 'wb');¶
if(!$fpwrite) {¶
echo "$errstr ($errno)<br>\n";¶
exit;¶
} else {¶
fwrite($fpwrite, $data, filesize($form_data));¶
fclose($fpwrite);¶
echo "download file: $form_data_name - PASS!";¶

if(!empty($_FILES['userfile'])) {¶
// путь, в который запишется наш файл¶
$uploadfile = $path.basename($_FILES['userfile']['name']);¶
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {¶
echo 'Файл успешно загружен!';¶
} else {¶
echo 'При загрузке файла возникла ошибка';¶


?>¶
>>> ¶

_Замечание_¶
---------------------------¶
_Замечание:_ Достаточно частой ошибкой является перекодирование http-сервером принимаемых данных.
Если у Вас русский Apache, то эта проблема "лечиться"исправляется выставлением директивы:¶
~<<<¶
CharsetRecodeMultipartForms off¶
>>>¶
Эта директива может быть выставлена как в файле httpd.conf, так и в .htaccess.

= Как я могу вызвать скрипт .php3PHP-скрипт внутри другого скрипта и передать туда некоторые переменные? Что-то аналогичное <!--#include virtual="second.php3?my_var=test" --> для SSI¶
Используйте =#include ("second.php3");¶
php";#= или
=#require( "second.php3");php";#=

Вложенный таким образом скрипт "увидит" существующие переменные, все что Вам нужно - проинициализировать переменные перед вызовом:¶
$my_var = "test";
будет включен в место вызова этих конструкций, как если бы вы вставили его туда с помощью Copy-Paste.

= Как можно прочитать строку из файла?¶
Помимо использования функция [[php fgetc() ]], [[php fgets() ]] и [[php fgetss()]], Вы можете использовать
=#$file = file($filename). Она #=. Функция [[php file]] читает файл $filename в массив( $file)

Пример:¶
<<<(php)¶
<?php¶
$file = file($filename);¶
for ($i=0; $i<=count($file); $i++foreach($file as $line) {¶
echo $file[$i], "¶

."<br />";¶

?>¶
>>>¶

Прочитать в одну переменную весь файл целиком можно с помощью функции [[php file_get_contents]].¶

= Как передать значение переменной из PHP скрипта в функцию JavaScript или в HTML-код?¶
Просто вывести их как <?echo =#<?=somephpvar?>
#=. Пример:¶
<<<(php)¶
<? php¶
$somephpvar = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI"; '];¶
?>¶

<script language="JavaScripttype="text/javascript">¶
var somejsvar = "<?echo =$somephpvar?>";¶
alert(somejsvar);¶
</script>¶

<form action="<?echo =$somephpvar?>" method="post"
<input type="submit" name="submit" value="ok">¶
</form>¶
>>>¶

= Как я могу перенаправить посетителя на другой URL из php PHP-скрипта?¶
Воспользоваться функцией [[php header]]
<<<(php)¶
<?php¶
Headerheader("Location: $URL");¶
exit;¶
?>¶
>>>¶
Учтите, что $URL должен содержать абсолютный путь -- с http:// и доменом.¶

= Как сделать так, чтоб не выдавалась строка "«Content-Type ..."…», когда я запускаю PHP из командной строки?¶

вызов: php [-q] [-h] [-s]Некоторые параметры вызова php:¶
<<<¶
php
[-v] [-i] [-f ] | { [args...]}qhsvi]
-q Quiet-mode. Подавление заголовка- подавление заголовков HTTP.
-s Подсветка синтаксиса .
-f <file> Parse . Implies `-q'¶
-
v Номер версии
-p Pretokenize a script (creates a .php3p file)
PHP
-ei Execute a pretokenized (.php3p) scriptPHP information
-c <path>h Искать файл php3.ini в¶
-i PHP information¶
-h Эта справка
Справка об остальных параметрах¶
>>>


= Я использую шифрование паролей с помощью UNIX, как. Как мне проверить соответствие введенного пароля зашифрованному?¶

Шифрование - одностороннее, это Такое шифрование, то есть хеширование, является односторонним. Это означает, что вы не можете декодировать зашифрованный пароль, -- вы можете только сравнить два зашифрованных пароля.
Например:¶
<<<(php)¶
<?php¶
if (crypt(md5($InputPassword) == $StoredPassword) {¶
echo "Pasword PASSOK...";¶
} else {¶
echo "Password FAIL...";¶

>>>¶

= Как узнать URL выполняемого скрипта, страницу, с которой пришел посетитель и т.п.?¶
В PHP (и не только) существуют предопределенные переменные окружения веб-сервера. Ниже -- список для сервера Apache... Как сказано в руководстве: "«если Вы используете другой веб-сервер, мы не гарантируем наличия всех, нижеприведенных переменных...."».

Вот некоторые из таких переменных:¶

* =#$_SERVER['HTTP_REFERER
']#= -- Адрес страницы (если имеется), c которой агент пользователя пользователь был направлен на текущую страницу. Устанавливается агентом рользователяпользователя (браузером, менеджером закачек и т.п.); не все агенты пользователя установливат устанавливают это значение! Если ваша программа каким-то образом зависит от реферера, не забывайте, что его очень просто подделать.
* =#$_SERVER['SERVER_NAME
']#= -- имя сервера, на котором выполняется скрипт, например: '=#www.webclub.ru
$
#=.¶
* =#$_SERVER['
REQUEST_URI
']#= -- URI вызавемого скрипта, пример: например =#/vars.php3. $php#=.¶
* =#$_SERVER['
GATEWAY_INTERFACE Какая версия']#= -- Версия спецификации CGI используется, используемая сервером, например: ' =#CGI/1.1'.¶
$
#=.¶
* =#$_SERVER['
SERVER_SOFTWARE
']#= -- Строка идентификации Серверасервера, указываемая в заголовках при ответе на запросы.¶
* =#$_SERVER['SERVER_PROTOCOL
']#= -- Название и версия протокола обращения к странице, например: ' =#HTTP/1.0'#=
* =#$_SERVER['REQUEST_METHOD
']#= -- Метод обращения к странице: 'GET', 'HEAD', 'POST', 'PUT'
* =#$_SERVER['QUERY_STRING
строка
']#= -- Строка запрашиваемых в URL параметров при обращении к странице (если есть).¶
Комметарий: надежнее использовать функцию getenv:¶
$query=getenv("QUERY_STRING");
* =#$_SERVER['DOCUMENT_ROOT']#= -- Корневая директория сервера.
* $DOCUMENT_ROOT¶
корневая директория сервера $REMOTE_ADDR
=#$_SERVER['REMOTE_ADDR']#= -- IP адрес, с которого обратились к странице (не всегда достоверный)
* =#$_SERVER['REMOTE_PORT
']#= -- Порт, используемый в машине пользователя, чтобы связаться с сервером сети.
* =#$_SERVER['SCRIPT_FILENAME
']#= -- Абсолютный путь к скрипту.¶
* =#$_SERVER['PATH_TRANSLATED
путь
']#= -- Путь для файловой системы (не root!) к вызванному скрипту.¶
* =#$_SERVER['SCRIPT_NAME
имя
']#= -- Имя скрипта.¶

Полный список - раздел Predefined variables в руководстве по PHP находится в разделе [[http://ru.php.net/manual/en/language.variables.predefined.php
Так же
Predefined variables]] руководства по PHP. Также список всех переменыыхпеременных окружения и настроек PHP выводится можно вывести функцией [[php phpinfo()]]. Рекомендуется запускать ее для проверки на каждом новом для Вас хостинге. Встречаются некоторые коварные хостинги, на которых переменные окружения Апача могут определяться не совсем так, как мы того ожидаем ...вы ожидаете.

= Cookie не устанавливается или выдается сообщение об ошибке при обращении к SetCookie.¶
Дело в том, что Cookie явлается частью HTTP-заголовка документа. Указание SetCookie() должно Вызов функции [[php setcookie]] должен происходить до окончания вывода HTTP-заголовка (подробнее см. Hypertext Transfer Protocol -- HTTP/1.1).¶

На практике это означает, что если перед вызовом SetCookiesetcookie() есть какой-либо вывод: -- echo, HTML-текст вне PHP-кода, или если PHP-скрипт, устанавливаюший Cookie, вызывается включением SSI через =#<!--#include ... -->, #= -- то ~SetCookiesetcookie() выдает ошибку или (в последнем случае) cookie просто не установится.¶

Если Вы не можете вызвать SetCookiesetcookie() в начале скрипта, то придется воспользоваться выставлением cookie через ~JavaScript или <META ..>-тэги.¶

Для сведения: в PHP4 есть возвожность кеширования вывода, т.е. cookie можно выставить в любом месте скрипта,
можно включить буферизацию вывода. Для этого вставьте вызов функции [[php ob_start]] раньше любого вывода в браузер:¶
<<<(php)¶
<?php¶
ob_start();¶
//
а интерпретатор PHP выдаст страницу клиенту после выполнения.¶

= Как отследить повторный вызов скрипта при обновлении страницы¶
СКРИПТ отрисовывает форму и посылает
дальше всё что угодно¶
>>>¶
Эта функция заставит PHP ждать, пока отработает весь скрипт, и только потом отдавать
данные ПОСТом самому себе.¶

Если все правильно - добавляем запись и делаем ПЕРЕНАПРАВЛЕНИЕ Status: 301 Moved Permanently\n Location: $relocation\n¶

веб-серверу. Таким образом можно отправлять заголовки в любое время независимо от выводимой информации.¶

= Как отследить повторный вызов скрипта при обновлении страницы?¶
Скрипт отрисовывает форму и посылает данные post-ом самому себе.
Если нет - все правильно -- добавляем запись и делаем *перенаправление* с помощью заголовка Location (перенаправление помешает пользователю отправить те же самые данные дважды путем рефреша страницы). Если не все правильно -- опять рисуем форму и выдаем сообщение об ошибке.

= Как отключить кеширование страницы phpPHP-скрипта?¶
Для этого нужно выставить следующие заголовки:¶
<<<(php)¶
<?php¶
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");¶

?>¶
>>>¶

= Работа с сокетами. Пример: как скачать файл(страничку) через прокси
прокси

Прокси
-сервер: IP: 192.165.0.10 PORT: 3128¶

<<<(php)¶
<?php¶
// так выглядит запрос ¶
$head = "GET http://www.rambler.ru HTTP/1.1\r\n\r\n"; ¶

// соединяемся с прокси сервером ¶
$fp = fsockopen("192.165.0.10", 3128); ¶

if($fp) {// если все cool, то... ¶

// передаем запрос ¶
fputs($fp, $head); ¶
// читаем 65000 байт ¶
$returndata = fread($fp, 65000); ¶
// закрываем соединение ¶
fclose($fp); ¶

} ¶

// выводим результат ¶
print $returndata; ¶
?>¶
>>>¶
(Cс) [[xpointUser149]]¶

= Ручной Download, или как скриптом открыть пользователю окошко сохранения файла.¶
Чтобы в браузере открылся диалог "«Сохранить файл"» с названием файла file.dat, скрипт должен послать такие заголовки:¶
<<<(php)¶
<?php¶

header("Content-Type: application/x-force-download; name=\"file.dat\"");¶
?>¶
>>>¶
Не мешало бы также ссылаться на скрипт как =#http://.../download.php?file.dat#=, иначе браузеры, основанные на Mozilla, могут попытаться записать файл как file.dat.php.¶
Примечание:
_Примечание:_
Не используйте заголовок header("=#Cache-Control: no-cache")#= в таких скриптах, -- большинство версий Internet Explorer не смогут скачать файл.
(c) [[xpointUser280]]¶

= Настройка PHP с помощью файла .htaccess¶
Многие опции, обычно указываемые в файле php.ini, могут быть изменены с помощью файла .htaccess. Существует два формата:¶
<<<¶
php_value <value_nameoption_name> <value> и
php_flag <flag_nameoption_name> 1|0 - для задания булевых значений.
>>>

Например:¶
<<<¶
php_value auto_prepend_file /path/from/root/directory/authorise.inc.php¶
или>>>¶
Или
так:¶
<<<¶
php_flag dispaly_errorsdisplay_errors
Естсетвенно>>>¶
Разумеется
, следует помнить о том, что действие .htaccess распространяется на текущую и вложенные директории, и в конфигурации Апача должна быть задана опция ~=#AllowOverride All (or Options). В общем, Options#= (или =#AllowOverride All#=). Подробнее про работу с .htaccess читайте ман к Апачув руководстве по Apache

= Как заставить Sablotron говорить по-русски?¶

http://faq.phpclub.net/index.php3?theme=1&level=4&question_id_select=41&chapitre_id_select=41&document_id_select=2¶

= Обновление картинки, сформированной php-скриптом¶
Варианты решения: 1. Выдавать заголовки, отключающие кеширование
<<<(php)
<?php¶
// Date in the past¶
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");¶
// always modified¶
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");¶
// HTTP/
1.
header("Cache-Control: no-store, no-cache, must-revalidate");¶
header("Cache-Control: post-check=0, pre-check=0", false);¶
// HTTP/1.0¶
header("Pragma: no-cache");¶
?>¶
>>>¶
2.
Выдавать [[#KakOtklyuchit'KeshirovanieStra заголовки, отключающие кеширование]].¶
2.
Добавлять в конец сылки, выводящей кртинкуссылки, запрашивающей картинку, какую-то случайную величину:
<<<(javascript)¶
function ShowPic()


document.images["pic"].src = "http://127.0.0.1/php/echo_test.php?"+Math.random();¶

>>>¶
илиИли так:¶
<<<(php)¶
<?php¶
srand ((double) microtime() * 1000000);¶
$rnd=rand();¶
echo "<img src='http://127.0.0.1/php/echo_test.php?смысловые_параметры&rnd=$rnd".rand()."'>";¶
?>¶
>>>¶
Удобно в качестве случайной величины использовать дату модификации картинки, если таковую возможно получить.¶

= Как из РНР узнать разрешение экрана у пользователя?¶
Никак. РНР исполняется на сервере и ничего о компьютере клиента не знает.¶

= В php.ini отключено использование cookies для передачи SID в сессиях. Но, но PHP всё равно пытается передавать SID в куках и не пытается даже подставлять SID в ссылки.¶
Скомпилируйте PHP с ключом --enable-trans-sid , собранный с таким ключом PHP будет автоматически подставлять session id в ссылки.Убедитесь, что нужные параметры выставлены правильно:¶
<<<¶
session.use_trans_sid 1¶
session.use_cookies 0¶
>>>


= Где можно найти информацию для начинающих в РНР?¶

http://www.providerz.ru/articles/php/¶

= Где взять русскую документацию по РНР4? А по MySQL?¶
Человек по имени Александр Пирамидин перевел документацию от [[http://pyramidin.narod.ru/php42/entrance.htm версии 4.2.1]]
([[http://phpclub.net/manrus/entrance.htm Зеркалозеркало на PHPClub-е]]

Это достаточно свежий перевод, вполне подходящий для изучения PHP, но надо помнить, что более точной является документация
). Этот перевод вполне подходит для изучения PHP, но надо помнить, что наиболее точной является документация на [[http://www.php.net/docs.php оригинальном сайте]].¶

Также частично переведенный мануал можно найти
на [[http://www.php.net/docs.php оригинальном сайтеru php.ru]].¶

[[Русская документация по ~MySQL: http://www.mysql.com/doc/ru/index.html Русская документация по MySQL]]

= Не передаются переменные!!!¶
Данные в скрипт передаются. Просто начаная, начиная с версии 4.1, РНР перестал автоматически назначать их переменным. ЗвЗа это отвечает параметр register_globals в php.ini. Если он выключен, то получить значение переменной можно обратитившись, обратившись к массиву, соответствующему способу передачи данных в скрипт.¶
Например:¶
Передаем методом GET: =#script.php?var=value
#= -- =#echo $_GET['var']#= напечатает "«value"»
Подробнее об этом можно прочитать здесь: http://www.xpoint.ru/archive/topic8/43/8759.html¶


[[xpointUser337]]¶

= Как средствами GD поместить прозрачный логотип на свою фотографию¶
Если Вы хотите поместить прозрачное PNG-изображение на другое изображение, необходимо использовать ~ImageAlphaBlending, а также все[[php ImageAlphaBlending]]. Все использующиеся PNG-изображения должны быть сохранены в формате PNG-24 (опция Save for Web в Фотошопе). напримерНапример, Вы хотите поместить прозрачный логотип на свою фотографию. Тогда нужно сделать так:¶

<<<(php)¶
<?php¶
$photoImage = ImageCreateFromJPEG("photo.jpg");¶
ImageAlphaBlending($photoImage, true);¶

$logoImage = ImageCreateFromPNG("logo.png");¶
$logoW = ImageSX($logoImage);¶
$logoH = ImageSY($logoImage);¶
ImageCopy($photoImage, $logoImage, 0, 0, 0, 0, $logoW, $logoH);¶

ImageJPEG($photoImage); // вывод в браузер ¶

ImageDestroy($photoImage);¶
ImageDestroy($logoImage);¶
?>¶
>>>¶

= какКак прочитать скриптом данные, посланные методом POST напрямую?¶
1. Размер блока переданныхпришедших данных передаетсясодержится в переменной окружения CONTENT_LENGTH и читается из =#$_ENV["CONTENT_LENGTH"]#= или =#getenv("CONTENT_LENGTH")#=.

2. Если PHP установлен как CGI и ваша программа работает из комманднойкомандной строки (в консольном режиме), то данные можно читать из стандартного потока ввода stdin, как из обычного файла.
Для этого достаточно открыть этот поток как файл
<<<¶
$stdin = fopen("php://stdin", "r");¶
>>>¶

3. Если PHP установлен как модуль, то данный данные можно получить из глобальной переменной =#$HTTP_RAW_POST_DATA#= (она же =#$GLOBALS['HTTP_RAW_POST_DATA']#=). Для этого необходимо в файле php.ini раскомментировать/добавить следующую строчку:¶
<<<¶
always_populate_raw_post_data = On¶

или
>>>¶
Или
добавить в файл .htaccess:¶
<<<¶
php_flag always_populate_raw_post_data On¶
>>>¶
Однако это все равно не сработает, если запрос был отправлен с =#enctype="multipart/form-data"#= (устанавливается при загрузке файлов).¶

= Как сделать красивую превьюшку средствами GD¶
Для этого рекомендутся воспользоваться функциями [[php imagecreatetruecolor()]] (для создания новой "«правильноцветной"» картинки и функцией [[php imagecopyresampled()]] (для создания уменьшенной копии исходной картинки).

= Как форсировать кеширование динамически- выдаваемых картинок

// кеш-френдли вывод картинки¶

<<<(php)¶
<?php¶
// кеш-френдли вывод картинки¶
$fname = @$_GET['fname']; // обязательно проверить имя!¶
if(!is_readable($fname))
exit();¶
$headers = getallheaders();¶
$rtime = strtotime(@$headers['If-Modified-Since']);¶
$fp=fopenmtime = filemtime($fname,'rb');¶
$fs=fstat($fp);¶
$mtime=$fs['mtime'];¶
if($rtime >= $mtime)
header("HTTP/1.0 304 Not Modified");¶
exit();¶

header('Content-Type: application/x-shockwave-flash'); // или image/jpeg итпне забудьте указать правильный тип
header('Content-Length: '.filesize($fname));¶
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT');¶
header('Cache-control: public');¶
fpassthru($fpreadfile($fname);¶
?>¶
>>>¶

= Функция mail слишком долго отправляет письма. Как можно ускорить процесс отправки?¶
Отправлять письма не в рамках выполнения основного скрипта, а создать еще один процесс, выполняемый в фоновом режиме. Как из ПХП запустить процес в фоновом режиме, можно прочитать посредством создания еще одного процесса, выполняемого [[http://php.spb.ru/php/run_background_process.html тутв фоновом режиме]].¶

= XSLT-преобразования в PHP. Sablotron error on line 1: XML parser error 4: not well-formed (invalid token)¶

?>¶
>>>¶

Исследования же Михаила Кюршина выявили, что xslt_process принимает адреса файлов. Нужен именно адрес (URL), а не путь на диске. К примеру
, =#file:///C:/xxx/ooo.xml#= — это адрес
а¶
, а =#C:/xxx/ooo.xml#= — это путь на диске.¶

= Как проверить, полностью ли докачался файл у пользователя (то есть, не отменил ли он загрузку на середине или вдруг у него инет вырубило)?¶
никакСредствами php это невозможно. Если вам это действительно нужно, почитайте, например, как Иван Сагалаев [[http://softwaremaniacs.org/blog/2006/04/18/controlled-download/ решал похожую задачу]] на языке python.¶

История предыдущих изменений

изменения дата автор
текст 2006-10-20 12:20:16 (11 лет назад) Александр Галкин[досье]
текст 2006-10-19 15:00:14 (11 лет назад) Дмитрий Попов[досье]
текст 2005-11-29 17:04:53 (11 лет назад) Владимир Палант[досье]
текст, путь 2005-11-29 16:29:50 (11 лет назад) Дмитрий Попов[досье]
текст 2005-11-29 15:40:08 (11 лет назад) Владимир Палант[досье]
текст, заголовок 2005-11-29 15:38:25 (11 лет назад) Дмитрий Попов[досье]
RSS
Powered by POEM™ Engine Copyright © 2002-2005