- RU.PHP ------------------------------------------------------------- RU.PHP -
Msg : #5035 [1078]
От : FAQ AutoPoster 2:5012/8.13 06 декабря 03, 10:30
Кому : All 10 декабря 03, 21:42
Тема : FAQ [5/5]
-------------------------------------------------------------------------------
> Другой способ, использующий сокеты.
/*
By: Jon S. Stevens jon@clearink.com
Copyright 1998-1999 Jon S. Stevens, Clear Ink
This code has all the normal disclaimers.
It is free for any use, just keep the credits intact.
*/
function validateEmail ( $email )
{
global $SERVER_NAME;
$return = array ( false, "" );
list ( $user, $domain ) = split ( "@", $email, 2 );
$tld = $domain;
if ( checkdnsrr ( $tld, "MX" ) )
{
if ( getmxrr ( $tld, $mxhosts, $weight ) )
{
for ( $i = 0; $i < count ( $mxhosts ); $i++ )
{
$fp = fsockopen ( $mxhosts[$i], 25 );
if ( $fp )
{
$s = 0;
$c = 0;
$out = "";
set_socket_blocking ( $fp, false );
do
{
$out = fgets ( $fp, 2500 );
if ( ereg ( "^220", $out ) )
{
$s = 0;
$out = "";
$c++;
}
else if ( ( $c > 0 ) && ( $out == "" ) )
{ break; }
else
{ $s++; }
if ( $s == 9999 ) { break; }
} while ( $out == "" );
set_socket_blocking ( $fp, true );
fputs ( $fp, "HELO $SERVER_NAME\n" );
$output = fgets ( $fp, 2000 );
fputs ( $fp, "MAIL FROM: \n" );
$output = fgets ( $fp, 2000 );
fputs ( $fp, "RCPT TO: <$email>\n" );
$output = fgets ( $fp, 2000 );
if ( ereg ( "^250", $output ) )
{
$return[0] = true;
}
else
{
$return[0] = false;
$return[1] = $output;
}
fputs ( $fp, "QUIT\n" );
fclose( $fp );
if ( $return[0] == true )
{ break; }
}
}
}
}
return $return;
}
?>
> Jon S. Stevens
>>7.3. Как определить валидность URL?
function check_url($url) {
if (eregi( '^http://', $url)) {
$urlArray = parse_url($url);
if (!$urlArray[port]) $urlArray[port] = '80';
if (!$urlArray[path]) $urlArray[path] = '/';
$sock = fsockopen($urlArray[host], $urlArray[port], &$errnum,
&$errstr);
if (!$sock) $res = 'DNS';
else {
$dump .= "GET $urlArray[path] HTTP/1.1\r\n";
$dump .= "Host: $urlArray[host]\r\nConnection: close\r\n";
$dump .= "Connection: close\r\n";
fputs($sock, $dump);
while ($str = fgets($sock, 1024)) {
if (eregi("^http/[0-9]+.[0-9]+ ([0-9]{3}) [a-z ]*", $str))
$res[code] = trim(eregi_replace(
'^http/[0-9]+.[0-9]+([0-9]{3})[a-z ]*',
"\\1", $str));
if (eregi("^Content-Type: ", $str))
$res[contentType] = trim(eregi_replace(
"^Content-Type: ", "", $str));
}
fclose($sock);
flush();
return $res[code];
}
} else $res = "N/A";
return $res;
}
?>
> Dmitry Seleznev, 2:5095/6
>>7.4. Как определить размер файла, если известен только его URL?
$hostname = "server2.ru"; // Имя сервера
$filename = "/path_to_file/filename.ext"; // Файл, размер которого
// надо узнать
get_size($hostname, $filename);
// А это сама функция узнавания размера
function get_size($hostname, $filename) {
$end = false;
$fp = fsockopen ($hostname, 80, &$errnr, &$errstr) or
die("$errno:$errstr");
fputs($fp,"HEAD ".$filename." HTTP/1.0\n\n");
while (!$end) {
$line = fgets($fp, 2048);
if (trim($line) == "") {
$end = true;
} else {
$str = explode(": ", $line);
if ($str[0] == "Content-Length")
print "Size of ".$filename." file ".$str[1]." bytes";
}
}
fclose($fp);
}
?>
> Serge V. Tarasov
>>7.5. Как правильно перенаправить browser на нужный адрес?
Если следовать спецификациям HTTP/1.0 и HTTP/1.1, то pедиpект нужно делать
пpимеpно следующим обpазом:
function my_redirect($url, $code = 302) {
if ($code == 303) {
preg_match('/^HTTP\/(\d)\.(\d)/', $_SERVER['SERVER_PROTOCOL'], $m);
if (intval($m[1])*10+intval($m[2]) < 11) { $code=302; }
}
if ($code == 303) {
Header($_SERVER['SERVER_PROTOCOL'].' 303 See Other');
} else {
Header($_SERVER['SERVER_PROTOCOL'].' 302 Found');
}
if (!strpos($url, '://')) { $url = 'http://'.$_SERVER['HTTP_HOST'].$url; }
Header('Location: '.$url);
?>
Oops!
Ваш бpаузеp не понимает HTTP redirect (status code: =$code?> ).
Следуйте по этой ссылке.
}
?>
Пpимеpы использования
my_redirect('/index.html');
my_redirect('http://warez.dot.no/');
my_redirect('accepted.html', 303);
Пояснения
1. Функции можно пеpедавать в качестве пеpвого паpаметpа либо локальный
адpес (если pедиpект делается в пpеделах сайта), либо полный URL (если
pедиpект делается на дpугой хост).
2. По умолчанию pедиpект делается со status code 302; однако спецификация
HTTP/1.1 тpебует использования status code 303 в том случае, если pедиpект
делается скpиптом в качестве ответа на POST (RFC 2616, секция 10.3.4). Если
вы хоpошо поняли, о чём идёт pечь, то указывайте код 303 в качестве
втоpого (необязательного) паpаметpа пpи ответе на POST, как показано в
пpимеpе 3. Если не очень хоpошо поняли, не указывайте ничего -- всё будет
pаботать и так :)
3. Hаличие небольшого гипеpтекстового довеска является обязательным
(RFC 2616, секция 10.3.3).
4. Само собой pазумеется, что скpипт не должен ничего выводить ДО вызова
этой функции.
> Dmitry Ban, 2:5020/1873.33
> Для перенаправления browser на нужный адрес (редирект) нужно
>воспользоваться конструкцией вида:
header("Location: " . $url);
Location должен задаваться абсолютным адресом, согласно RFC 2616
(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30):
"14.30 Location The Location response-header field is used to redirect the
recipient to a location other than the Request-URI for completion of the
request or identification of a new resource. For 201 (Created) responses,
the Location is that of the new resource which was created by the request.
For 3xx responses, the location SHOULD indicate the server's preferred URI
for automatic redirection to the resource. The field value consists of a
single absolute URI.
Location = "Location" ":" absoluteURI
An example is:
Location: http://www.w3.org/pub/WWW/People.html"
> Alexey Kolesnichenko
> Для перенаправления по относительному адресу:
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
> anatoly techtonik
-----------------------------------------------------------------------------
>>>8. Безопасность
-----------------------------------------------------------------------------
>>8.1. Я хочу ограничить доступ к одной из страниц. Хочу, чтобы при попытке
>>открытия этой страницы браузер у клиента вывешивал окошко и предлагал
>>ввести логин?
Читать: http://www.php.net/manual/en/features.http-auth.php
> Vova Rusakevich, 2:454/23.501
>>8.2. Я - hosting provider, как мне организовать безопасность скриптов
>>виртуальных серверов, т.е. что бы юзер Вася не смог сделать fread() файла
>>юзера Пети?
Это делается при помощи диррективы PHP : safe_mode, и параметра open_basedir.
Пример:
ServerName tit.irk.ru
LanguagePriority ru en
DocumentRoot /home/users/WWW
php_admin_value open_basedir /home/users/WWW
В итоге, если "умный" юзер Вася пытается что-то сделать с файлами за
пределами его (/home/users/WWW) дирректории, то он получает:
Warning: open_basedir restriction in effect. File is in wrong directory.
in /home/users/WWW/ss.pht on line 3
Warning: fopen("/etc/passwd","r") - Operation not permitted in
/home/users/WWW/ss.pht on line 3
За более детальным конфигом с комментариями:
http://www.php4you.kiev.ua/docs/php_limit.html
> Vitaliy N. Kravchenko, kvn(@)phbme.ntu-kpi.kiev.ua
Что бы дать юзеру хранить/читать/писать в файлы вне www, но в пределах
доступности скрипта нужно исправить строку:
php_admin_value open_basedir /home/users
> Oleg Krasnov, 2:5062/17.77
-----------------------------------------------------------------------------
>>>9. Где взять...
-----------------------------------------------------------------------------
>>9.1. Документацию
>>9.1.1 Где взять документацию по PHP?
Документацию по PHP можно взять тут: http://www.php.net/docs.php.
> Andrey Saterenko
Однако для тех, у кого стоит windows, существует гораздо более удобный и
полезный вариант в .chm формате с комментариями пользователей.
http://weblabor.hu/php-doc-chm/
> anatoly techtonik
Русский мануал к PHP (авторский, не официальный перевод) версии 4.2.* в HTML
находится по адресу
http://pyramidin.narod.ru/dwnl.htm
> SeazoN aka Sergey Sazonenkov, 2:469/142.999
>>9.1.2. Информация по написанию модулей для php.
http://www.zend.com/
http://www.zend.com/apidoc/
> Vova Rusakevich, 2:454/23.501
>>9.1.3. Подскажите хороший сайт по php.
http://www.dklab.ru/ - Лаборатория dk
http://www.phpclub.net/ - PHPClub
http://php.spb.ru/ - PHP по-русски
-----------------------------------------------------------------------------
>>9.2. Скрипты
>>9.2.1. Где взять готовый скрипт гостевой, форума и т.п.?
Вот несколько ссылочек:
http://webscript.ru/
http://cgi.ru/
http://hotscripts.com/
http://cgi-fan.com/
http://www.phorum.org/
http://www.cgi-bin.ru/
>>9.2.2. Помимо гостевых, чатов и т.п. (хочется чего то..)
http://www.hotscripts.com/PHP/
http://sourceforge.net/
-----------------------------------------------------------------------------
>>9.3. Редакторы
>>9.3.1. Всё, что существует на сегодняшний момент, не считая Far, UltraEdit
>>и им подобных.
PHP Coder http://www.phpide.de/
PHPEdit http://www.phpedit.net/
PHP Expert Editor http://www.ankord.com/phpxedit.html
Turbo PHP http://www.turbophp.com/turbo/
QaDRAM http://www.qadram.com/
DzSoft PHP Editor http://www.dzsoft.com/dzphp.htm
Arisesoft Winsyntax http://www.winsyntax.com/
> Zubarev Andrey, oistets(a)bogatyr.kz
-----------------------------------------------------------------------------
>>9.4. Хостинг
>>9.4.1. Какие существуют халявные хостинги c поддержкой PHP?
Из наших:
http://www.webservis.ru
http://www.holm.ru
http://www.hut.ru
http://www.agava.ru
http://www.fatal.ru
>
> Эти, обычно, нареканий не вызывают
http://www.kombat.ru
http://www.zenon.ru
> Zubarev Andrey, oistets(a)bogatyr.kz
--- GMT v1.04beta5
* Origin: Two Beer Or Not Two Beer? (2:5012/8.13)
При переходе по баннеру - скидка 25% на первый месяц обслуживания! При переходе по баннеру - скидка 25% на первый месяц обслуживания!