Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
-
-
2012
681.3.068+800.92PHP
32.973.26-018.1
89
, . .
89
PHP / . . , . . .
2- ., . . .: -, 2012. 400 .: .
ISBN 978-5-9775-0445-4
PHP,
Web-. , . PHP 5
.
. PHP- Web Apache MySQL, ,
AJAX, jQuery. HTTP-, ReWrite, PHP.
Web-, , Flash PDF, .
Web-
681.3.068+800.92PHP
32.973.26-018.1
:
.
.
30.09.11.
70 1001/16. . . . . 32,25.
1500 .
"-", 190005, -, ., 29.
-
77.99.60.953..005770.05.09 26.05.2009 .
.
" ""
199034, -, 9 , 12
ISBN 978-5-9775-0445-4
. ., . ., 2011
, "-", 2011
............................................................................................................................ 9
....................................................................................................................... 10
............................................................................................................................... 10
2. ......................................................... 55
2.1. PHP .......................................................................................................................................... 55
2.1.1. php.ini ........................................................... 55
2.1.2. PHP ................................................................................................ 56
2.1.3. ............................................................................................ 59
2.1.4. PHP- ................................................................................. 64
2.1.5. ............................................................................................... 66
2.1.6. ....................................................................................... 67
2.1.7. ................................................................................................ 67
2.1.8. ....................................................................................................... 68
2.1.9. ............................................................... 74
2.1.10. ......................................................................................................... 78
2.1.11. .......................................................................................................... 79
2.1.12. ........................................................................................ 79
2.1.13. ....................................................................................................... 80
2.1.14. ....................................................................................... 81
2.1.15. php.ini Apache ..................................................... 81
2.1.16. PHP .......................................................... 83
2.1.17. PHP ........................................................................ 86
2.1.18. ..................................................................... 89
2.2. Apache ..................................................................................................................................... 92
2.2.1. .htaccess ............................................................................ 92
2.2.2. ......................................................................... 93
2.2.3. ........................................................................................... 95
2.2.4. PHP- HTML- .................................................................... 98
2.2.5. Web- Apache .................................................................... 98
2.2.6. ........................................................................................................... 100
2.2.7. ....................................................................................... 101
2.2.8. ............................................................................................. 103
2.2.9. ............................................................................................... 103
2.2.10. URL- ................................................................................ 105
2.3. MySQL .................................................................................................................................. 116
2.3.1. mysql............................................................................................ 116
2.3.2. ......................................................................... 120
2.3.3. MySQL ..................................................................................... 121
2.3.4. .............................................................. 122
2.3.5. ......................... 127
2.3.6. ............................................................... 128
2.3.7. .................................................... 128
2.3.8. phpMyAdmin............................................................................................ 131
3. ........................................................................................................ 133
3.1. ................................................................................................................. 134
3.1.1. array() .................................................................................................. 134
3.1.2. ................................................................... 136
3.1.3. : ........................................................................ 137
3.1.4. ....................................................... 137
3.1.5. ............................................................................................. 141
3.2. .................................................................................................... 142
3.3. ........................................................................................ 145
3.4. ? ..................................................................................................... 147
3.5. ? ....................................................................................... 147
3.6. ?................................................................... 148
3.7. ? ........................................................................... 149
3.8. ................................................................................................... 151
3.9. ................................................................................................... 152
4. ....................................................................................... 203
4.1. .................................................................................................................. 203
4.2. ....................................................................... 208
4.3. , .......................................................... 209
4.4. .............................................................................................. 210
4.5. ...................................................................................................................... 217
4.6. ........................................................................................................................ 220
4.7. ...................................................................................................... 221
4.8. ................................................................. 222
4.9. .................................................................................................... 225
4.10. ................................................................ 227
4.11. ........................................................................... 229
4.12. ............................................................................................... 230
4.13. ................................................................... 231
4.14. .............................................................................................................................. 233
4.15. ...................................................................... 234
4.16. ........................................................................................ 238
4.17. .................................................... 240
5. ................................................................................ 243
5.1. ................................................................................................. 243
5.2. .................................................................................................................. 244
5.3. HTTP- .............................................................................................. 248
5.4. ............................................................. 252
5.5. CURL ................................................................................................................ 252
5.6. ............................................................................................... 259
5.7. Yandex ................................................................................................. 260
5.8. Google .................................................................................................. 261
5.9. .................................................................................. 262
5.10. POST ..................................................................................... 266
5.11. ............................................................................................................. 269
5.12. ................................................................................. 272
5.13. cookie .................................................................................................................. 273
5.14. IP- ..................................................................... 276
5.15. IP- ..................................................................... 278
5.16. IP- .............................................................................. 278
5.17. ....................................................................................... 281
5.18. ........................................................................................... 282
5.19. .......................................................... 285
.................................................................................................................. 391
.............................................................................................. 392
, , , : , , , . ( -
, PHP 5/6, ).
, , . ,
Web-
, . Web-
. PHP,
, , , ,
PHP AJAX-.
,
Web-.
Web- Apache , ,
, , HTML, CSS JavaScript. ,
PHP .
, , . ,
,
. ,
PHP .
10
IT-
SoftTime, :
http://www.softtime.ru ;
http://www.softtime.org ;
http://www.softtime.info ;
http://www.softtime.biz .
,
PHP- http://www.softtime.ru/forum/.
http://www.softtime.org/forum/.
, PHP, , Web-,
. Web-, , . http://www.softtime.ru/
php5/index.php.
"-",
.
, , SoftTime.
Web- Apache,
PHP MySQL
, , .
Web-.
1.1. , PHP-
PHP . Web .
.
Web- HTML-
Web-, HTTP ,
. ,
PHP, Web- Apache.
PHP CGI-, , Web-,
PHP- . , PHP-
, . ,
.
. Web- Apache PHP
MySQL.
PHP, Web- Apache, MySQL-
UNIX- , . , UNIX.
12
, -.
1.2.
PHP
PHP, , Web-, , ,
Web-. Web, ,
, , . Web- , . ,
, Web- ,
. ,
. ,
PHP, Web- Apache MySQL, Denwer, http://www.denwer.ru/.
http://
www.softtime.ru/article/index.php?id_page=9. httpd.conf ( Apache) php.ini ( PHP). http://www.softtime.ru/forum/index.php?id_forum=5.
1.3.
(. 1.1).
1.1. PHP, Apache MySQL
Web-
PHP
http://www.php.net
Web- Apache
http://www.apache.org
MySQL
http://dev.mysql.com
, ,
.
13
1.3.1. PHP
http://www.php.net,
downloads, http://www.php.net/
downloads.php. PHP
Complete Source Code, .
Windows Binaries, http://windows.php.net/download/.
Which version do I choose?
Visual Studio 6 Visual Studio 9. Web- Apache
VC6.
VC9 Web- Windows IIS.
1.3.2. Apache
, Web- Apache. http://www.apache.org, Download (http://www.
apache.org/dyn/closer.cgi).
HTTP- FTP-, Web- Apache.
, Apache httpd,
UNIX-. , :
httpd-2.2.15.tar.gz Linux,
14
httpd-2.2.15-win32-x86-openssl-0.9.8m-r2.msi
1.3.3. MySQL
MySQL http://dev.mysql.com/
downloads/.
MySQL:
MySQL 5.1 MySQL;
MySQL 5.5 , .
, - ,
(Generally Available Release) .
( Windows),
. Windows ( 32- 64- ):
MSI Installer Essentials ,
;
MSI Installer MySQL, ;
ZIP Archive MySQL .
MSI Installer ,
Windows-. .
MySQL
MySQL-,
http://dev.mysql.com/downloads/gui-tools/5.0.html.
15
httpd__win32_*_.msi
Microsoft Installer (. 1.1). ,
Next, (. 1.2).
. 1.2.
16
Apache , (. 1.3).
. 1.3.
, . 1.4, :
, .
,
localhost. ,
IP- 127.0.0.1 Apache- httpd.conf
IP- 0.0.0.0, .
,
(80 8080).
localhost IP- 127.0.0.1, . IP- 127.0.0.1
(. . 1.5).
HTTP 80, ,
, 8080. 8080 , 80 Web- (, Skype).
(. 1.5): Typical Custom, .
(. 1.6) ,
17
. 1.4.
. 1.5.
18
. 1.6. Web-
. 1.7. Web-
, Install .
, Windows Apache.
ApachMonitor.
19
ApachMonitor , .
, bin Apache.
, http://localhost.
"It works!" (. 1.8).
1.5.
Web- Apache ,
. ,
HTML- PHP-. ,
HTML- PHP- ,
.
Web- IP-,
, . , http://localhost DNS- http://site.dev, http://project.dev . .
RU ( )
http://site.ru http://project.ru, ,
.
IP- 127.0.0.1,
Windows Vista Windows 7 IP- - . IP- 127.0.0.2.
C:/Windows/system32/drivers/etc/hosts.
, IP- ( 1.1).
20
1.1. hosts
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
127.0.0.1
127.0.0.1
127.0.0.1
127.0.0.1
rhino.acme.com
x.acme.com
#
# x
site.dev
www.site.dev
project.dev
www.project.dev
host . Apache,
.
www , IP- Apache ,
.
, Web- Apache,
conf, . httpd.conf. , #, .
1.2 , Include.
httpdvhosts.conf, extra.
1.2. httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
21
httpd-vhosts.conf .
NameVirtualHost , IP- :
NameVirtualHost 127.0.0.1:80
IP- , Apache. ,
Web- , 80
8080. :
http://localhost:8080/index.html, , 80.
<VirtualHost>,
( 1.3).
1.3. <VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerAdmin kuznetsov@softtime.ru
DocumentRoot D:/data
ServerName site.dev
ServerAlias www.site.dev
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
,
NameVirtualHost. 1.3 ServerAdmin
.
Web- .
DocumentRoot
. D:\data\,
http://site.dev/.
,
.
ServerName , . ServerAlias ,
, www.
ErrorLog CustomLog (log-),
Web- Apache .
, httpd.conf <Directory /> 1.4.
22
1.4. , <Directory />
<Directory />
Options All
AllowOverride All
Order deny,allow
</Directory>
, Web-
(. . 1.61.7).
D:\data\ index.html ( 1.5).
1.5. index.html
index.html www.site.dev
,
http://www.site.dev, , . 1.9.
. 1.9. www.site.dev
1.6.
Web- Apache
80 (. . 1.4),
Apache .
| | | | . , . 1.10, Apache2.2. , .
Windows
. ,
(. 1.10), (. 1.11) .
. 1.10. Windows
23
24
1.7. Apache
Windows , Apache
:
Apache k start ();
Apache k restart ();
Apache k stop Apache k shutdown ().
Apache -t Apache
.
"Syntax OK". , , :
Syntax error on line 57 of C:/www/Apache2.2/conf/ httpd.conf:
ServerRoot takes one argument, Common directory of server-related files.
1.8. PHP
php--win32-installer.msi
Microsoft Installer (. 1.12).
, Next, (. 1.13). PHP (. 1.14).
, Web ,
Apache 2.2.x Module (. 1.15). Web- Apache (. 1.16).
. 1.12. PHP
. 1.13.
25
26
. 1.14. PHP
. 1.15.
27
. 1.16. ,
Web- Apache
, (. 1.17).
.
, , PHP,
PHP php.ini.
, Install PHP
httpd.conf. , , , 1.6.
, UNIX, /, \.
28
. 1.17.
1.7.
DirectoryIndex index.php index.html index.htm
29
1.8. PHP-
<?php
phpinfo();
?>
. 1.18. phpinfo()
, , phpinfo(),
php.ini. Loaded
Configuration File. , ,
, PHP (, ).
MySQL ,
http://www.softtime.ru/forum/index.php?id_forum=5.
1.9. ,
Web-
, ,
30
Web- . (
) , Web-
.
php.ini, , 1.9.
1.9. php.ini
[PHP_BZ2]
extension=php_bz2.dll
[PHP_CURL]
extension=php_curl.dll
[PHP_GD2]
extension=php_gd2.dll
[PHP_IMAP]
extension=php_imap.dll
[PHP_MBSTRING]
extension=php_mbstring.dll
[PHP_MYSQL]
extension=php_mysql.dll
[PHP_MYSQLI]
extension=php_mysqli.dll
[PHP_OPENSSL]
extension=php_openssl.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
[PHP_PDO_ODBC]
extension=php_pdo_odbc.dll
[PHP_SOCKETS]
extension=php_sockets.dll
Web- , , . ,
,
. ,
.
php.ini 2.
1.10. MySQL
Windows
. , . 1.19.
31
. 1.19.
MySQL Firewall,
, , MySQL .
MySQL , Firewall
3306 ( , ).
Next,
, . 1.20, :
Typical ();
Complete ();
Custom ().
, , .
Custom Next (. 1.21)
. , , . ,
This feature will be installed on local hard drive.
MySQL, .
, ,
. 1.21, , Change.
C:\Program Files\MySQL\MySQL Server 5.1\.
32
. 1.20. MySQL
. 1.21.
, ,
:\MySQL\. Change, :\MySQL\ (. 1.22).
MySQL , .
, -
33
. , mysql
. MySQL,
:\mysql\data\mysql mysql. , , .
. 1.22. , MySQL-
. 1.23.
34
. 1.24.
. 1.25. http://www.mysql.com
35
1.11. MySQL
MySQL .
, , , | | MySQL | MySQL
Server 5.1 | MySQL Server Instance Config Wizard. ,
.
(. 1.26). Next
(. 1.27), :
Detailed Configuration ();
Standard Configuration ().
(Detailed
Configuration). Next MySQL (. 1.28) :
Developer Machine ( );
Server Machine ();
Dedicated MySQL Server Machine ( ).
,
. ,
. . MySQL ,
. , , MySQL, , , Web-
. MySQL, .
36
. 1.27.
. 1.28. MySQL
, . 1.29, , . .
MySQL Server Instance Configuration Wizard :\MySQL5\my.ini, .
. 1.29 , , :
MyISAM InnoDB. ,
MyISAM ,
37
, InnoDB , . , MyISAM
InnoDB. InnoDB , . MyISAM.
, , , . 1.30.
. 1.29.
. 1.30. InnoDB
38
(. 1.31) ,
. ( ) ,
20, 500 , .
. 1.31.
200, ,
() , , .
,
.
,
. . , ,
, . .
,
.
(. 1.32) ,
MySQL- ( 3306). MySQL, , . . 3306 MySQL.
39
, MySQL-
MySQL, , , MySQL-.
(. 1.33).
cp1251, Windows-.
. 1.32. , MySQL
. 1.33. MySQL-
40
Windows MySQL ,
mysqld.exe
.
, . 1.34, .
Install As Windows Service , Service Name. ,
MySQL- , MySQL 5, . Launch the
MySQL Server automatic
, ,
.
. ,
.
Include Bin Directory in Windows PATH C:\MySQL\bin PATH,
.
. 1.34. MySQL-
(. 1.35) .
MySQL ,
Modify Security Settings
. root ( ).
Create An Anonymous Account . , .
41
. 1.35.
Execute
C:\MySQL\my.ini MySQL.
MySQL ,
http://www.softtime.ru/forum/index.php?id_forum=3.
42
1.12. MySQL
MySQL ,
MySQL.
, | |
MySQL | MySQL Server 5.1 | MySQL Command Line Client.
, . 1.37.
<Enter>. mysql>,
:
SELECT VERSION();
,
5.1.37-community (. 1.38).
EXIT.
43
1.13.
MySQL
MySQL, Apache (. . 1.6), , , |
| | | . MySQL ,
(. . 1.34). , .
MySQL (. 1.39).
, .
. 1.39.
44
. . :
Windows , ,
. , .
, MySQL- , mysqld.exe
.
1.14. my.ini
MySQL , .
. MySQL
ps -Af ,
. ,
. , --defaults-file 1.10 MySQL, my.ini
C:\mysql5\my.ini.
MySQL- ,
--standalone, , , .
1.10. --defaults-file
C:\mysql\bin\mysqld.exe --defaults-file="C:\mysql5\my.ini" --standalone
MySQL ,
. ,
MySQL --verbose --help. , . , --user
-u.
, my.ini,
. my.ini ,
, .
, my.ini
, . .
. # ;,
. .
45
[mysqld]
MySQL
[server]
MySQL
[mysqld-4.0]
MySQL 4.0
[mysqld-4.1]
MySQL 4.1
[mysqld-5.0]
MySQL 5.0
[mysqld-5.1]
MySQL 5.1
[mysqld_safe]
mysqld_safe
[safe_mysqld]
mysqld_safe
[mysql.server]
mysql.server
[mysqld_multi]
mysqld_multi
[client]
[mysql]
mysql
[mysqldump]
SQL- mysqldump
[mysqlhotcopy]
[mysqld]
, , , ,
.
[client]
. , (,
46
),
,
.
1.11 my.ini,
Windows.
1.11. my.ini
# MySQL-
[mysqld]
# TCP/IP, MySQL-, 3306
# ,
port=3306
# MySQL-, ,
# ,
basedir="C:/mysql5/"
# ,
# , . .
# basedir
datadir="C:/mysql5/Data/"
#
# Windows-1251,
#
# latin1 ( )
default-character-set=cp1251
# ,
key_buffer_size = 128M
# ,
max_allowed_packet = 8M
# ,
query_cache_size = 64M
#
max_connections = 200
# MySQL
[client]
# IP- , ,
# IP- ,
# ,
# , Apache 80 ( 8080), MySQL, , 3306
port=3306
47
# MySQL-
[mysqld]
# TCP/IP, MySQL-, 3306
# ,
port=3306
# MySQL-, ,
# ,
basedir="C:/MySQL/"
# ,
datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL
Server 5.1/Data/"
#
# Windows-1251,
#
# latin1 ( )
default-character-set=cp1251
# MySQL
# ,
# , ,
# ,
# .
#
default-storage-engine=MYISAM
# ,
key_buffer_size = 128M
# ,
max_allowed_packet = 8M
# ,
query_cache_size = 64M
#
max_connections = 200
my.ini, 1.11,
. .
48
, php.ini , 1.12.
, .
1.12. MySQL-
...
extension=php_mysql.dll
extension=php_mysqli.dll
...
49
if (!$dbcnx) {
exit( "<p> ,
.</p>" );
}
//
if (! mysql_select_db($dbname, $dbcnx) ) {
exit( "<p> ,
.</p>" );
}
// SQL-
$query = "SELECT VERSION()";
$res = mysql_query($query);
//
if(!$res) exit(" ".mysql_error());
//
echo mysql_result($res, 0);
?>
php_mysqli 1.14. ,
MySQL-.
1.14. php_mysqli
<?php
// MySQL
$dblocation = "localhost";
//
$dbname = "test";
//
$dbuser = "root";
//
$dbpasswd = "";
// mysqli,
//
$mysqli = new mysqli($dblocation, $dbuser, $dbpasswd, $dbname);
if (mysqli_connect_errno()) exit(" ");
//
echo $mysqli->server_info;
//
$mysqli->close();
?>
50
1.16.
mysql
MySQL , . MySQL
Web-, PHP-, ,
, .
MySQL. mysql, . 1.12 MySQL-.
MySQL.
: | | MySQL | MySQL Server 5.1 | MySQL Command Line
Client.
mysql MySQL Command Line Client - . , , MySQL (, mysqldump,
SQL-), . , : | | |
. , . 1.40.
, .
,
.
. 1.40.
bin
MySQL. :
cd C:\mysql5\bin
51
:
C:\mysql5\bin>
MySQL , cd , , D:. ,
,
bin, cd.
, bin, .
, , . , dir.
bin ,
MySQL C:\Program Files.
mysql.
.
, . bin ( . 1.40 C:/mysql/bin), OK
.
C:\mysql\bin.
mysql ,
C:\mysql\bin PATH.
bin .
UNIX- /bin,
/usr/sbin, PATH . - MySQL , , PATH.
,
: ,
, . . . 1.41 %SystemRoot% , Windows.
,
. PATH, ,
.
Windows
, , : | |
| . , . 1.42.
52
. 1.41.
. 1.42.
53
,
, . 1.43.
PATH
bin MySQL.
PATH ( ). PATH .
. 1.43.
1.17.
. MySQL
cp866 (DOS), .
chcp, , . ,
Windows-1251, :
chcp 1251
. Lucida
Console.
54
, , MySQL-
latin1, .
, , ,
MySQL- SQL-,
1.15.
1.15.
SET NAMES cp1251;
, , PHP-. 1.16 MySQL.
1.16. MySQL
<?php
// MySQL
$dblocation = "localhost";
//
$dbname = "test";
//
$dbuser = "root";
//
$dbpasswd = "";
//
$dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx) {
exit( "<p> ,
.</p>" );
}
//
if (! mysql_select_db($dbname, $dbcnx) ) {
exit( "<p> ,
.</p>" );
}
//
@mysql_query("SET NAMES cp1251");
?>
, Web-, PHP, Web- Apache
MySQL.
2.1. PHP
2.1.1. php.ini
php.ini . , , [PHP], ,
:
directive = value
directive , value . ,
(;),
.
value. . ,
none.
php.ini [PHP], , : (
[MySQL] [PostgresSQL]) , (,
[Date] [Session], ).
PHP Web- , php.ini Web-.
PHP CGI-,
.
PHP
:
56
, PHPIniDir httpd.conf
.
PHP- Web-, php.ini -c, :
php.exe -c C:/PHP/php.ini D:/scripts/file.php
[PHP].
2.1.2. PHP
. 2.1 . , .
2.1.
engine
short_open_tag
(On) (Off)
<? <?php
asp_tags
precision
, , ,
printf(), sprintf()
output_buffering
(On) (Off) .
, ,
57
. 2.1. PHP-
2.1.
<?php
echo 10.23456;
echo "<br />";
echo 10.23456E+20;
?>
precision 4, :
10.23
1.023E+21
precision , :
10.23456
1.023456E+21
output_buffering, , . PHP-
58
, .
, , , ,
HTTP-, . output_buffering 2.2.
2.2. HTTP-
<?php
echo "hello world!";
session_start();
?>
. 2.2. HTTP-
59
. 2.3. HTTP-
2.1.3.
Web- . : . Web-. PHP
, .
PHP UNIX-
. UNIX ,
, ( ). : , .
:
;
;
.
:
r ;
w / ;
x , -
( ).
: rwxr--r--. ,
, ,
. UNIX- .
4, 2, 1.
: 6 (4 + 2)
, 7 (4 + 2 + 1)
. 0755 ,
(rwx),
(r-x).
60
,
( ). safe_mode_gid
: On,
.
, file_get_contents(), put_get_contents(),
fopen(), fwrite(), fread(), include, include_once, require
require_once. ,
(
PEAR PHP-).
, safe_mode_include_dir: ,
,
.
PHP- , ,
system(), exec(), shell_exec() (. 2.4).
. 2.4.
,
, , . safe_mode_exec_
dir , .
, ( Web-)
.
Web- , (, PHP) .
GET-. GET-, Web-
QUERY_STRING GET-.
PHP
$_SERVER $_GET. -
61
, PHP-, ,
(. 2.5).
,
, .
, , safe_mode_allowed_env_vars.
, PHP_:
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars
,
safe_mode_allowed_env_vars ( ).
. 2.2 , PHP.
2.2.
safe_mode
safe_mode_gid
:
-
safe_mode_include_dir
, ,
62
2.2 ()
safe_mode_exec_dir
system(), exe() . .
safe_mode_allowed_env_vars
,
PHP- . ,
safe_mode_protected_env_vars
,
safe_mode_allowed_env_vars
. dir ( Windows) ls -l ( Linux).
shell_exec(),
( 2.3).
2.3.
<?php
$text = shell_exec("dir");
echo "<pre>";
echo htmlspecialchars(convert_cyr_string($text, 'd', 'w'));
echo "</pre>";
?>
, echo shell_exec("dir") . ,
<br /> , <pre> </pre>. , cp866 (DOS). convert_cyr_string(). dir
<DIR>, . htmlspecialchars()
, <DIR>.
. 2.6 .
php.ini safe_mode, 2.3 ,
shell_exec()
(. 2.7).
63
. 2.6. dir
. 2.7.
PHP ,
, (. 2.3).
2.3.
open_basedir
, PHP-
disable_functions
disable_classes
64
open_basedir ,
PHP-
( ). . ,
open_basedir = "D:/main/pro"
"D:/main/pro" D:/main/pro/,
D:/main/projects/ D:/main/progress/.
pro, "D:/main/pro/".
open_basedir Web-,
PHP ,
(. . 2.1.15).
disable_functions , . ,
set_time_limit() putenv():
disable_functions
= "set_time_limit,putenv"
2.1.4. PHP-
PHP , PHP- (. 2.4).
2.4. PHP-
highlight_string($code
[, $return])
PHP- $code
. $return
true,
highlight_file($filename
[, $return])
PHP- $filename, .
$return true,
test.php,
( 2.4).
2.4. test.php
<?php
if (!$flag)
{
//
echo "Hello";
65
$var = 1;
}
else echo "";
?>
. 2.8 2.5.
( HTML-),
true,
( 2.6).
2.6. highlight_file()
<?php
$code = highlight_file("test.php", true);
//
...
//
echo $code;
?>
66
,
: ,
, , . .
php.ini , . 2.5.
highlight.bg , PHP 6.0.
2.5. PHP-
highlight.string
, (#DD0000)
highlight.comment
, (#FF9900)
highlight.keyword
, (#007700)
highlight.bg
, (#FFFFFF)
highlight.default
PHP-,
(#0000BB)
highlight.html
HTML-, (#000000)
HTML-, . . span
<span style="color: #0000BB">$var = 1;</span>
#RRBBGG,
(R), (B) (G) ( 0 255).
, HTML: red, blue . .
2.1.5.
. ,
. 2.6,
.
clearstatcache() .
2.6.
realpath_cache_size
, 16
realpath_cache_ttl
, 120
67
2.1.6.
(. 2.7).
2.7.
ignore_user_abort
(On),
expose_php
(On) (Off) ,
PHP HTTP-
2.1.7.
, .
, .
. 2.8 . ,
.
2.8.
max_execution_time
( ), . 0, . 30
max_input_time
( ), GET-, POST- . 1, 60
memory_limit
30
, max_execution_time. , , (. 2.9).
, memory_limit. , .
GDLib.
68
. 2.9.
. 2.10.
. 2.10 ,
.
2.1.8.
PHP. . 2.9 .
2.9.
error_reporting
display_errors
(On) (Off)
display_startup_errors
(On) (Off) .
log_errors
log_errors_max_len
,
. 0
69
2.9 ()
ignore_repeated_errors
(On) (Off) ( ,
)
track_errors
(On), $php_errormsg
error_log
. .
syslog,
syslog UNIX Windows
, . ,
.
, php.ini 2.7.
2.7.
;
error_reporting = E_ALL & ~E_NOTICE
;
display_errors = On
;
log_errors = On
; 1
log_errors_max_len = 1024
;
error_log = "D:/php.log"
, , ,
php.log; error_log syslog,
( 2.8).
2.8.
;
error_reporting = E_ALL & ~E_NOTICE
;
display_errors = On
;
log_errors = On
; 1
log_errors_max_len = 1024
;
error_log = syslog
70
: | | | | . PHP (. 2.11).
(. 2.12).
. 2.11.
. 2.12.
71
error_reporting.
, PHP .
. . -
, , =, (Notice). 2.9
$user, .
2.9. $user
<?php
echo $user;
?>
$user
"Notice: Undefined variable: user" (": ") (. 2.13).
. 2.13. ,
, PHP. PHP
error_reporting php.ini.
PHP : ,
, , . . . 2.10 ,
PHP , php.ini, .
72
2.10.
E_ERROR
, .
E_WARNING
E_PARSE
E_NOTICE
.
, ,
E_CORE_ERROR
16
,
PHP
E_CORE_WARNING
32
(),
PHP
E_COMPILE_ERROR
64
, PHP
E_COMPILE_WARNING
128
(), PHP
E_USER_ERROR
256
,
trigger_error()
E_USER_WARNING
512
()
, trigger_error()
E_USER_NOTICE
1024
,
trigger_error()
E_STRICT
2048
,
PHP-
E_RECOVERABLE_ERROR
4096
,
, set_error_handler(). ,
E_ERROR
E_ALL
8191
2.10 php.ini,
PHP (E_ALL), (E_NOTICE).
. 2.10 ,
, . . .
2.10. php.ini
<?php
...
error_reporting
...
?>
73
|, ~, !,
^ &.
error_reporting PHP .
Web-
, :
error_reporting([$level])
$level, PHP. ( ).
2.11 error_reporting()
PHP.
2.11. error_reporting()
<?php
error_reporting (E_ALL & ~E_NOTICE)
?>
php.ini , , , , ( 2.12).
2.12. ,
<?php
//
error1();
?>
E_ERROR,
, . 2.14.
. 2.14.
74
2.1.9.
,
, , , . . 2.11 .
PHP 6 , register_globals, register_
long_arrays magic_quotes_gpc.
2.11.
arg_separator.output
URL, PHP.
HTML &, XHTML
&
arg_separator.input
, URL.
-, &, . .
PHP GET- POST-
$_GET $_POST
register_globals
(On) (Off) ,
GET- POST-, cookies
variables_order
register_globals.
EGPCS: , GET-, POST-, cookies Web-
( $_SERVER)
request_order
$_REQUEST
.
, $_REQUEST
. , GP: GET-,
POST-
register_long_arrays
(On) (Off) ,
register_argc_argv
auto_globals_jit
(On), $_SERVER .
(Off) $_SERVER
, , .
auto_globals_jit ,
register_globals, register_long_arrays
register_argc_argv
75
2.11 ()
post_max_size
POST-,
PHP-
magic_quotes_gpc
magic_quotes_runtime
magic_quotes_sybase
auto_prepend_file
, PHP-. , include
auto_append_file
,
PHP-. ,
include. exit(),
default_mimetype
default_charset
HTTP- Content-Type.
HTTP-,
76
, PHP- - . 2.15 ,
$access 1, , 0, .
2.15.
<?php
if ($_POST['name'] == "name" && $_POST['pass'] == "pass")
{
$access = 1;
}
if ($access)
{
//
}
?>
77
2.16.
magic_quotes_gpc
<?php
...
if (!get_magic_quotes_gpc())
{
// " "
$_POST['name'] = mysql_escape_string($_POST['name']);
$_POST['pass'] = mysql_escape_string($_POST['pass']);
}
...
?>
2.17. php_start.php
<?php
echo "Start PHP<br />";
?>
2.18. php_end.php
<?php
echo "End PHP<br />";
?>
78
, include-
( 2.19).
2.19. index.php
<?php
echo "Contents<br />";
?>
2.19 . 2.15.
. 2.15. 2.19
php_end.php , PHP
. , ,
exit(), php_end.php .
2.1.10.
, , file Web- (. 2.12).
2.12.
file_uploads
upload_tmp_dir
upload_max_filesize
79
2.1.11.
, ,
(. 2.13).
2.13.
allow_url_fopen
(On) (Off)
( http://)
allow_url_include
(On) (Off)
include require ( http://)
from
FTP-. e-mail
user_agent
USER_AGENT, PHP
URL ,
default_socket_timeout
2.1.12.
PHP . , . . 2.14 .
2.14.
extension_dir
extension
, extension
, PHP 5, . , MySQL
(GDLib),
php.ini.
extension. ( #) .
MySQL :
extension=php_mysql.dll
80
(php_mcrypt.dll) , C:\Windows\system32. C:\php, .
, :
extension_dir = "C:\Program Files\PHP\ext"
2.1.13.
[Session] php.ini ,
. . 2.15
.
2.15.
session.save_handler
,
files (
).
( )
session.save_path
session.use_cookies
session.cookie_secure
session.use_only_cookies
session.name
,
session_name()
session.auto_start
(On) (Off)
PHP-.
session_start()
session.cookie_lifetime
session.cookie_path
session.cookie_domain
cookies
session.serialize_handler
. php, , serialize()
81
2.15 ()
session.gc_probability
session.gc_divisor
session.gc_maxlifetime
, "
". 1440
2.1.14.
[Date]
(. 2.16).
. 2.16 date_sunrise(), date_sunset()
date_sun_info().
2.16.
date.timezone
date.default_latitude
date.default_longitude
date.sunrise_zenith
(90 )
date_sunrise()
date.sunset_zenith
(90 )
date_sunset()
82
On Off);
php_value php.ini;
php_flag php.ini (. . , -
On Off);
php_admin_value php_admin_flag php_value php_flag httpd.conf. , , .htaccess. php_value
php_flag , .
2.21 open_basedir
"/www". , PHP /www,
, , .
2.21. PHP /www
<Directory /www>
php_admin_value open_basedir /www
</Directory>
, open_basedir , ,
, PHP,
( 2.22).
83
2.22.
#
<VirtualHost 127.0.0.1:80>
ServerAdmin suport@domain1.ru
DocumentRoot "/www/domain1/"
ServerName domain1.ru
php_admin_value open_basedir "/www/domain1/"
ErrorLog "/www/domain1/logs/domain1-error.log"
CustomLog "/www/domain1/logs/domain1-access.log" common
</VirtualHost>
#
<VirtualHost 127.0.0.1:80>
ServerAdmin suport@domain2.ru
DocumentRoot "/www/domain2/"
ServerName domain2.ru
php_admin_value open_basedir "/www/domain2/"
ErrorLog "/www/domain1/logs/domain2-error.log"
CustomLog "/www/domain1/logs/domain2-access.log" common
</VirtualHost>
.htaccess php_value
php_flag. .htaccess , httpd.conf,
. .htaccess,
, , FTP- .
2.23 register_long_arrays,
,
auto_prepend_file, PHP- include.utils.php.
auto_prepend_file
.
2.23. .htaccess
php_flag register_long_arrays on
php_value auto_prepend_file /www/domain/include/include.utils.php
2.1.16. PHP
, Apache
php.ini, PHP- . PHP -
84
, PHP
(. 2.17).
2.17. PHP
ini_set($varname, $newvalue)
$varname $newvalue.
.
, FALSE
ini_get($varname)
$varname
ini_get_all($extension)
$extension
ini_restore($varname)
$varname,
, php.ini
2.24
PHP.
2.24. PHP
<?php
// post_max_size
echo ini_get("post_max_size");
// post_max_size
ini_set("post_max_size", "32M");
//
ini_restore("post_max_size");
?>
, (. . 2.1.3),
php_admin_value httpd.conf (. . 2.1.15).
, , PHP
(. 2.18).
2.18.
memory_get_usage()
php_sapi_name()
85
2.18 ()
php_uname([$mode])
phpinfo()
PHP, ,
PHP-
phpversion([$extension])
PHP. , $extension
memory_get_usage(),
, ,
memory_limit, .
. 2.16. phpinfo()
86
php_uname() ,
PHP-.
:
's' ;
'n' ;
'r' PHP;
'v' ;
'm' , , i386;
'a' .
phpinfo() . 2.16.
2.1.17. PHP
PHP Web-,
, , ,
. .
UNIX-
, , PHP- #! ( 2.26).
# PHP ( shell-) , #! ( bang line, hash-bang shebang) .
, UNIX- : Perl, , PHP Python.
Web-, . UNIX-
, ,
. .
#!/usr/bin/php #!/usr/bin/sh #!/usr/bin/perl. , /usr/bin bang line
.
87
2.26. PHP-
#!/usr/bin/php
<?php
// PHP-
?>
Windows #! ,
.
.
, php PHP. PHP- . (. 2.17).
. 2.17.
. .
C:\PHP\php.exe (. 2.18).
PHP : php.exe, php-cgi.exe phpwin.exe. php-cgi.exe Web-, -
88
. 2.18.
PHP-
CLI, . 2.19. PHP-
<Enter> .
,
index.php, C:\
hello, "Hello world!" ( 2.27).
2.27. index.php
<?php
//
$fd = fopen("C:/hello","w");
//
fwrite($fd, "Hello world!");
//
fclose($fd);
?>
89
,
<Enter> index.php
C:\ hello.
2.1.18.
UNIX cron,
. PHP-.
Windows XP , UNIX- .
Web-
Windows, UNIX
cron.
cron Windows http://
www.nncron.ru/download.shtml. cron
nnCron, Windows-, nnCron LITE
,
crontab. nnCron LITE, . . cron.tab UNIX-
90
cron -. http://www.nncron.ru/
download.shtml
cron.tab nnCron.
cron, . UNIX
chmod.
UNIX :
;
;
.
:
r ;
w / ;
x , -
( ).
, : rwxr--r--. UNIX-
. 4, 2, 1. , 6 (4 + 2) , 7
(4 + 2 + 1) . 0755 , (rwx), (r-x). index.php rwxr-xr-x (0755), :
chmod 755 index.php
PHP, , ,
, 2.28.
2.28.
<?php
chmod("index.php", 0755);
?>
91
cron.tab UNIX .)
cron.tab .
cron.tab- , #. :
_ _
059;
023;
_ 131;
112;
_ 07 (0 7 );
, , , d:/mail/
reserve.php.
* , ,
0 23 * * * d:/main/reserve.php
d:/main/reserve.php 23:00. .
0 0,8,16 * * * d:/main/cleanup.php
0/10 * * * * /home/root/log.php
/home/root/log.php 10 .
.
- . , ,
- .
92
2.2. Apache
2.2.1. .htaccess
Apache .htaccess Web-
.
, httpd.conf,
.htaccess. , , AccessFileName,
.htaccess ( 2.29).
2.29. AccessFileName httpd.conf
AccessFileName .htaccess
.htaccess ,
, Files, , .ht ( 2.30), .
2.30. , .ht
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
.htaccess.
AllowOverride, ,
.htaccess. , <Directory /> .
AllowOverride
: All, None, AuthConfig, FileInfo, Indexes, Limit, Options. , ( 2.31).
2.31.
<Directory />
Options FollowSymLinks Indexes MultiViews
AllowOverride AuthConfig FileInfo Indexes Limit Options
</Directory>
93
AuthConfig
.htaccess ( AuthDBMGroupFile,
AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile Require)
FileInfo
Indexes
Limit
Options
2.2.2.
, META- , Apache , ISO-8859-1.
HTTP-:
Content-Type: text/html; charset=ISO-8859-1
, , , cp1251 (. 2.20).
. 2.20.
94
, . 2.20, .htaccess
AddDefaultCharset, ( 2.32).
2.32.
AddDefaultCharset Windows-1251
cp1251
(Windows-1251),
META- (. 2.21).
. 2.21.
AddDefaultCharset . 2.20.
2.20. , AddDefaultCharset
ISO-8859-1
ISO-8859-15
Windows-1252
CP850
CP866
(DOS)
Windows-1251
(Windows)
KOI8-R
(UNIX)
UTF-8
8- Unicode
UTF-7
7- Unicode
UCS-2
16- Unicode
95
2.2.3.
, , http://localhost/,
http://localhost/index.php, Web- Apache DirectoryIndex ( 2.33).
2.33. DirectoryIndex
DirectoryIndex index.html index.php
. 2.22. ,
Web- Apache,
Options Indexes MultiViews
, ,
(. 2.23).
, , .htaccess.
,
AllowOverride httpd.conf Indexes.
HeaderName ReadmeName ,
HTML- . , up.html down.html,
2.34 2.35.
96
. 2.23.
2.34. up.html
<h3 style="color: red"> </h3>
2.35. down.html
<h3 style="color: red"> </h3>
,
. 2.24.
, .htaccess index , 2.36.
2.36.
AddDefaultCharset Windows-1251
HeaderName up.html
ReadmeName down.html
. 2.24.
. 2.25.
.htaccess
97
98
2.37.
AddDefaultCharset Windows-1251
HeaderName up.html
ReadmeName down.html
IndexIgnore up.html down.html
.htaccess 2.37
. 2.25.
99
500599 . ,
( , -
.htaccess).
HTTP- 4xx 5xx,
. . 2.26
Internet Explorer 404 .
, ,
, .
,
, . ErrorDocument, HTTP-, , .
,
( 2.39).
ErrorDocument .htaccess AllowOverride FileInfo.
2.39. ErrorDocument
ErrorDocument 404 " , , %s"
ErrorDocument 403 /errors/403.html
ErrorDocument 401 http://www.mysite.ru/index.php
,
( HTTP- 401).
100
2.2.6.
Redirect,
, ,
, . .htaccess 2.40 http://localhost/index.php
http://www.softtime.ru/index.php.
, , ,
HTTP- 3xx.
2.40. Redirect
Redirect / http://www.softtime.ru/
HTTP-
Permanent
301
HTTP- ,
Temp
302
HTTP- ,
( )
See other
303
HTTP- ,
Gone
410
HTTP- ,
, ,
, Permanent ( 2.41).
2.41. Permanent
Redirect Permanent / http://www.softtime.org/
HTTP ( 2.42).
2.42. HTTP- (3xx)
Redirect 301 / http://www.softtime.org/
101
2.2.7.
, ,
, , .
allow deny . .htaccess
httpd.conf deny allow, order:
order deny,allow
(deny) ,
(allow).
:
order allow,deny
2.43 .htaccess,
IP- 127.0.0.1.
2.43. IP- 127.0.0.1
order deny,allow
deny from all
allow from 127.0.0.1
order deny
allow. deny from all
IP-. IP- 127.0.0.1 allow from 127.0.0.1.
,
: IP- .htaccess
127.0.0.1 127.0.0.2. HTTP- 403 (. 2.27).
, , IP-, , 2.44.
2.44. IP- 127.0.0.1
deny from 127.0.0.1
IP- IP-,
IP- ( 2.45).
102
. 2.27.
2.45. 127.0.0.1127.0.0.255
deny from 127.0.0
, .
2.45 2.46 .
2.46.
deny from 127.0.0.1/255.255.255.0
, CIDR- ( 2.47).
2.47. CIDR-
deny from 127.0.0.1/24
, , , 2.48.
2.48.
deny from all
, , , PHP, - , . . .htaccess
.
103
2.2.8.
.
,
, txt. <Files> ( 2.49).
2.49. <Files>
<Files "*.txt">
deny from all
</Files>
<Files> . ,
config.php .htaccess, 2.50.
2.50. config.php
<Files "config.php">
deny from all
</Files>
. 2.51 2.50.
2.51.
<Files ~"*.php$">
deny from all
</Files>
2.2.9.
.
, .htaccess, .htpasswd
. .htpasswd htpasswd, bin Web- pache.
.htpasswd .
, , , .ht, , .
104
user
.htpasswd. password
, -b ( 2.53).
2.53. .htpasswd
htpasswd -cmb .htpasswd user password
2.53 :
user:$apr1$8U2.....$Jehmbz8MGSSzxKQZxHUEs/
.
.htpasswd ,
-c , . . .
, ,
.htaccess , 2.54.
.htpasswd .htaccess .
. , .
2.54. .htaccess
AuthType Basic
AuthName "Password Access"
AuthUserFile ////.htpasswd
require valid-user
105
. 2.28.
2.55.
<Files "*.zip">
AuthType Basic
AuthName "Password Access"
AuthUserFile ////.htpasswd
require valid-user
</Files>
2.2.10. URL-
Web- Apache
. : , . CGI (http://site.dev?category=news&year=2011&month=12&day=27&page=1)
,
, ,
(http://site.dev/news/2011/12/27/).
, GET-
mod_rewrite.
2.2.10.1. mod_rewrite
Apache . ,
, .
mod_rewrite, URL-.
httpd.conf (#) :
LoadModule rewrite_module modules/mod_rewrite.so
106
.htaccess
URL.
2.2.10.2. GET-
, URL http://localhost/
index.php?id=1, http://localhost/1/. .htaccess
, 2.56.
, http://localhost/index.php?id=1,
http://localhost/index.php, : http://localhost/1/. . ,
mod_rewrite "" .
2.56.
RewriteEngine On
RewriteBase /
RewriteRule ^([0-9]+) /index.php?id=$1
http://localhost/1/ http://localhost/54/
http://localhost/index.php?id=1
http://localhost/index.php?id=54 . . ,
index.php ( 2.57).
2.57. index.php
<?php
echo $_GET['id'];
?>
107
(
5xx ).
RewriteBase ,
. 2.57
URL .
RewriteRule .
,
, Web- .
, .
$1
. , http://localhost/nnn/, id:
http://localhost/index.php?id=nnn. $2 ,
$3 . .
, ,
(. 2.22).
-, .
,
. . " ". ,
http://www.softtime.ru/forum/index.php?id_forum=6.
2.22.
[0-9]
0 9
[A-Z]
[0-9A-Z]
, ,
\b
\w
\s
(, ,
. .)
\t
108
2.22 ()
\n
\r
\077
\x9f
1 0
{n}
{n,}
{n,m}
n m
^ , . ,
2.56 http://localhost/abc/14/,
^ ( 2.58),
id
14.
2.58.
RewriteEngine On
RewriteBase /
RewriteRule ([0-9]+) /index.php?id=$1
, 2.59
, , , http://localhost/
abc/256/14/ http://localhost/index.php?id=256.
id .
$, , . ,
http://localhost/abc/256/14 2.59 http://localhost/index.php?id=14.
id .
2.59.
RewriteEngine On
RewriteBase /
RewriteRule ([0-9]+)/$ /index.php?id=$1
109
.
, :
[abc]
, : a, b, c.
, , , , .
, . :
[a-z]
, , , ,
.
, :
[0-9]
[0123456789]
.
, .
, ?, + *,
:
? , ;
* , 0;
+ .
. :
xy{2} , x yy;
xy{2,} , x y (
);
xy{2,6} , x y.
, ,
:
x(yz){2,6} , x -
yz;
110
x(yz)* , x -
yz.
|
.
abc|
, abc .
, . . , , "ru", "com" "net":
ru|com|net
.htaccess RewriteRule,
.
2.2.10.3. 2006/07/20
http://localhost/2006/
07/20/ http://localhost/index.php?year=2006&month=07&day=20. , ,
. .htaccess ( 2.60).
, 2.60 RewriteRule , .htaccess .
.
2.60
index.php ( 2.61).
2.61. index.php
<?php
echo " ".$_GET['year']."<br>";
echo " ".$_GET['month']."<br>";
echo " ".$_GET['day']."<br>";
?>
111
2.61, ,
RewriteRule, ,
$1, $2 $3. , ,
[0-9]{4} , . . , http://localhost/2006/07/20/ http://
localhost/06/07/20/. [0-9]{1,2} , . . http://localhost/2006/07/20/ http://localhost/2006/7/20/
.
2.2.10.4. -
. 2.22 , .
,
? .
http://localhost/index.html/,
http://localhost/index.php.
, 2.62.
2.62.
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html /index.php
2.2.10.5. RewriteRule
RewriteRule , .
, , [R]. ,
, , [L,R]. ,
.htaccess 2.62 2.63,
index.php index.html
index.php.
2.63. [R]
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html /index.php [R]
RewriteRule . 2.23.
: , , [R], , , [redirect].
112
2.23. RewriteRule
C | chain
, .
,
, ,
, C,
E=var:value | env=var:value
GET- var value
F | forbidden
,
403 (HTTP Forbidden)
G | gone
,
410 (HTTP Gone)
L | last
, ,
RewriteRule,
N | next
RewriteRule.
, .
,
NC | nocase
NS | nosubreq
P | proxy
QSA | qsappend
(,
=)
R [=HTTP-] | redirect
S=n | skip=n
, n
T=MIME-type |
MIME-
2.2.10.6.
GET-
.
http://site.dev/catalog.php
http://site.dev/catalog.php?id_catalog=12
http://site.dev/catalog.php?id_catalog=12&id_position=366
113
.
12.
366 12. :
http://site.dev/catalog/
http://site.dev/catalog/12/
http://site.dev/catalog/12/366/
,
[L],
.
, . . mod_rewrite . 2.64
.
2.64. RewriteRule
RewriteEngine On
RewriteBase /
RewriteRule ^catalog/([0-9]+)/([0-9]+)/
/catalog.php?id_catalog=$1&id_position=$2 [L]
RewriteRule ^catalog/([0-9]+)/ /catalog.php?id_catalog=$1 [L]
RewriteRule ^catalog/ /catalog.php?id_catalog=$1 [L]
2.2.10.7. mod_rewrite
mod_rewrite . ,
. <VirtualHost> ( 2.65),
( 1 9, 9
).
2.65. mod_rewrite
<VirtualHost 127.0.0.1:80>
...
RewriteLog logs/rewrite.log
RewriteLogLevel 9
...
</VirtualHost>
2.2.10.8. . RewriteCond
RewriteRule ,
114
GET-.
, , . GET- page, http://site.dev/news/54/?page=2.
GET- ,
. , , . 2.2.10.6,
, CGI- ?page=2.
RewriteRule
, . . GET-
. RewriteCond ,
%{_} ( 2.67).
2.67. GET-
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} page=([0-9]*)
RewriteRule ^news/([0-9]+)/ /news.php?id=$1&page=%1 [L]
RewriteRule ^news/([0-9]+)/$ news.php?id=$1 [L]
RewriteRule, RewriteCond,
, RewriteCond.
RewriteRule RewriteCond,
.
2.67 RewriteCond
QUERY_STRING, Web- Apache
. GET- page, ,
RewriteRule. RewriteRule RewriteCond, %1, %2,
, . .
115
HTTP_USER_AGENT
(, ) ,
HTTP_REFERER
HTTP_COOKIE
Cookie-, ,
HTTP- Set-Cookie
HTTP_HOST
, .
, HTTP Host , ,
HTTP_ACCEPT
DOCUMENT_ROOT
, ,
SERVER_NAME
, , HTTP_HOST
SERVER_ADDR
IP-
REMOTE_ADDR
IP-
REQUEST_METHOD
HTTP-, (
, GET, POST HEAD)
REQUEST_FILENAME
QUERY_STRING
,
GET-
2.2.10.9.
,
.
. RewriteCond ,
, RewriteRule
.
2.68 RewriteCond (!-f) (!-d), ,
RewriteRule.
116
2.68.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule new/(.*) new/index.php?run=$1 [L]
2.68,
RewriteCond -f ( ) -d ( ),
!.
2.2.10.10.
, , , .
, .
.
, , , .ru,
, , softtime.ru.
, site.dev/news news.site.dev,
site.dev/company company.site.dev. RewriteRule
RewriteCond. 2.69 news.test.dev test.dev/news/.
, DNS. SERVER_NAME ,
.
2.69.
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_NAME} ^news.test.dev$
RewriteRule index.php news/index.php [L]
2.3. MySQL
2.3.1. mysql
. 1.16 MySQL-
mysql.
117
mysql
.
root, ,
.
:
mysql u root
. 2.29. mysql>, .
user
hello CREATE USER, 2.70. mysql>,
. 2.30.
2.70. user
CREATE USER user IDENTIFIED BY 'hello';
118
. 2.31.
, :
mysql uuser phello
mysql u user phello
p , . . .
, p . mysql
Enter password:, (. 2.32).
SQL- (exit, quit, use) . , . 2.33 SQL-,
MySQL .
119
. 2.32.
MySQL 5.0,
, //, DELIMITER //, --delimiter=name.
. 2.33.
,
, , , mysql>,
.
, . , . ,
( ), mysql
. (1 row in set )
.
. 2.71 .
120
2.71.
SELECT VERSION(), CURRENT_DATE;
select version(), current_date;
SeLeCt vErSiOn(), current_DATE;
,
<Enter> ,
mysql . mysql> ->
(. 2.33). , mysql , , . mysql , , (")
(') (. 2.34).
. 2.34. ,
2.3.2.
,
root, ,
2.72.
121
2.72.
SET PASSWORD FOR user = PASSWORD('password')
2.3.3. MySQL
,
'username'@'host', username , host ,
username MySQL. ,
'root'@'127.0.0.1' 'wet'@'62.78.56.34' ,
root , , wet
IP- 62.78.56.34.
MySQL , , .
%, root@127.0.0.1.
IP- 127.0.0.1 ,
, SQL-.
IP- 127.0.0.1 localhost, IP- , 'root'@'127.0.0.1' :
'root'@'localhost'.
IP- - , 'softtime.ru',
'root'@'softtime.ru'
, , root, , softtime.ru.
127.0.0.1 62.78.56.34
'wet' MySQL 158.0.55.62,
: 'wet'@'127.0.0.1', 'wet'@'62.78.56.34'
122
'wet'@'158.0.55.62'.
,
, . %. , 'wet'@'%' 'wet' MySQL . % ,
'wet'@'%.softtime.ru' MySQL
softtime.ru. 'wet'@'62.78.56.%'
'wet' , IP-
62.78.56.0 62.78.56.255.
host %, , 'wet'@'%' 'wet' .
2.3.4.
CREATE USER , , . . MySQL, , ,
.
GRANT REVOKE: GRANT
, REVOKE . , GRANT, , .
REVOKE DROP USER.
GRANT , 2.73.
2.73. GRANT
GRANT ALL ON *.* TO 'wet'@'localhost' IDENTIFIED BY 'pass';
'wet'@'localhost'
REVOKE, 2.74.
123
2.74. REVOKE
REVOKE ALL ON *.* FROM 'wet'@'localhost';
ALL, (
GRANT OPTION ),
, . 2.25.
2.25. ,
GRANT REVOKE
ALL [PRIVILEGES]
GRANT OPTION, WITH GRANT OPTION
ALTER
ALTER TABLE
ALTER ROUTINE
CREATE
CREATE TABLE
CREATE ROUTINE
CREATE USER
CREATE USER, DROP USER, RENAME USER REVOKE ALL PRIVILEGES
CREATE VIEW
CREATE VIEW
DELETE
DELETE
DROP
DROP TABLE
EVENT
EXECUTE
FILE
SELECT...INTO OUTFILE LOAD DATA INFILE
INDEX
INSERT
INSERT
LOCK TABLES
LOCK TABLES UNLOCK TABLES.
SELECT
PROCESS
REFERENCES
RELOAD
FLUSH
,
REPLICATION CLIENT
124
2.25 ()
REPLICATION SLAVE
SELECT
SELECT
SHOW DATABASES
MySQL
SHOW DATABASES
SHOW VIEW
SHUTDOWN
mysqladmin
shutdown
SUPER
TRIGGER
UPDATE
UPDATE
USAGE
" "
GRANT OPTION
, GRANT REVOKE
. editor
, , , , 2.75.
2.75. editor
GRANT SELECT, INSERT, DELETE, UPDATE ON *.* TO editor;
,
,
INSERT UPDATE ( 2.76). DELETE
SELECT, .
2.76. INSERT UPDATE
GRANT INSERT, UPDATE ON *.* TO program;
, , 2.77.
2.77.
GRANT ALL ON *.* TO superuser;
GRANT GRANT OPTION ON *.* TO superuser;
125
, . . ALL
. 2.25
( 2.78).
2.78. ALL GRANT OPTION
GRANT ALL, GRANT OPTION ON *.* TO superuser;
ERROR 1064: You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '
GRANT OPTION ON *.* TO superuser' at line 1
ON GRANT ,
, . 2.26.
2.26.
ON
ON *.*
ON *
USE,
ON *.*,
, GRANT
ON db.*
db
ON db.tbl
tbl db
ON db.tbl
tbl db.
SELECT, INSERT, UPDATE
126
, IDENTIFIED BY , .
,
SHOW DATABASES, SHOW DATABASES.
. 2.80 , manager
user test.
2.80.
GRANT ALL ON test.user TO manager;
, SHOW TABLES.
% _,
, LIKE, . .
. , _ , , , . , list_user GRANT
, 2.81.
2.81. _
GRANT ALL ON 'list\_user'.* TO 'wet'@'localhost';
GRANT OPTION
.
, SQL
WITH GRANT OPTION, . WITH GRANT OPTION ( 2.82).
2.82. WITH GRANT OPTION
GRANT ALL ON test.* TO 'wet'@'localhost' WITH GRANT OPTION;
2.82 wet
GRANT ALL test . wet . , ,
127
GRANT OPTION, , .
GRANT OPTION, . . , , , .
REVOKE ( 2.83). GRANT ,
TO FROM, IDENTIFIED BY, REQUIRE
WITH GRANT OPTION .
2.83. REVOKE
REVOKE DELETE, UPDATE ON shop.* FROM 'wet'@'localhost';
, REVOKE ,
, DROP USER.
SHOW GRANTS ( 2.84). ,
, .
2.84. SHOW GRANTS
SHOW GRANTS;
+---------------------------------------------------------------------+
| Grants for root@localhost
|
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
2.84, 'root'@'localhost' ,
DROP USER.
2.3.5.
WITH GRANT GRANT OPTION
, , . MAX_CONNECTIONS_
PER_HOUR, MAX_QUERIES_PER_HOUR, MAX_UPDATES_PER_HOUR MAX_USER_CONNECTIONS . 2.85 wet
shop, 10 MySQL 1000 , 200
UPDATE, 3 .
128
2.85.
GRANT ALL ON shop.* TO 'wet'@'localhost' IDENTIFIED BY 'pass'
WITH MAX_CONNECTIONS_PER_HOUR 10
MAX_QUERIES_PER_HOUR 1000
MAX_UPDATES_PER_HOUR 200
MAX_USER_CONNECTIONS 3;
0 ( ), , .
2.3.6.
C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/. C , , , D.
C , .
MySQL
(. 1.13).
C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server
5.1/Data/ , , D:/mysql. my.ini [mysqld], datadir ( 2.86).
2.86. my.ini
...
[mysqld]
...
datadir="D:/mysql/"
...
my.ini MySQL- . MySQL mysql , . .
.
2.3.7.
. : SQL-.
129
2.3.7.1.
MyISAM ( MySQL) ,
.
.
,
, , :
frm , , , . .;
MYD (
MYData);
MYI ( MYIndex).
,
, MySQL-
.
, . FLUSH TABLES ( 2.87).
2.87.
FLUSH TABLES WITH READ LOCK;
, , .
,
UNLOCK TABLES ( 2.88).
2.88.
UNLOCK TABLES;
MySQL
mysqlhotcopy. ,
: base
/to/new/path ( 2.89).
2.89. mysqlhotcopy
mysqlhotcopy base /to/new/path
130
2.3.7.2. SQL-
, MySQL
, , ,
. SQL-. SQL- SQL-, .
SQL- mysqldump.
, base,
, 2.90.
2.90. base
:\mysql\bin> mysqldump u root base > base.sql
2.91, mysqldump
u. ,
-p. base, . ( ),
( 2.90 base.sql). >. > >>,
,
.
--databases ( B)
, ( 2.91).
2.91.
:\mysql5\bin> mysqldump u root -B base mysql > base_mysql.sql
, 2.91, base
mysql base_mysql.sql.
MySQL-, --all-databases A ( 2.92).
2.92. MySQL-
mysqldump u root --all-databases > all_databases.sql
131
2.93. mysql
mysql u root test < base.sql
2.93 base.sql
mysql, base test.
SQL- , . SOURCE,
, SQL- ( 2.94).
SOURCE SQL-
bin. .
2.94. SOURCE
mysql> SOURCE base.sql;
2.3.8. phpMyAdmin
MySQL Web- phpMyAdmin.
phpMyAdmin Web http://www.phpmyadmin.net/.
phpMyAdmin
config.inc.php $cfg['Servers'][$i]['host'],
$cfg['Servers'][$i]['user'], $cfg['Servers'][$i]['password']
. ""
, MySQL.
"localhost".
$cfg['PmaAbsoluteUri'] phpMyAdmin:
Web- ,
phpMyAdmin,
http://localhost/phpMyAdmin.
phpMyAdmin
MySQL, :
.
,
.
config.inc.php PHP-, . $i. phpMyAdmin
, $cfg['Servers'][0], $cfg['Servers'][1] . .
132
MySQL 4.1,
phpMyAdmin . cp1251, $cfg['DefaultLang'] $cfg['DefaultCharset']:
$cfg['DefaultLang'] = 'ru-win1251';
$cfg['DefaultCharset'] = 'windows-1251';
. . . PHP , PHP
, .
, .
3.1 $arr ,
"Hello", "world".
3.1.
<?php
// $arr
$arr[] = "Hello";
$arr[] = "world";
//
echo $arr[1]; // world
?>
, . $arr[0] , $arr[1] . .
, , . PHP .
, . 3.2
$arr ,
first, second.
134
3.2.
<?php
// $arr
$arr['first'] = "Hello";
$arr['second'] = "world";
//
echo $arr[1]; // world
?>
, .
3.1.
PHP , , .
, . , PHP.
3.1.1. array()
.
array(),
. 3.3 $arr,
, 0 2.
3.3. array()
<?php
$arr
echo
echo
echo
?>
135
3.4. print_r()
<?php
$arr = array("Hello ", "world", "!");
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
3.4
$arr:
Array
(
[0] => Hello
[1] => world
[2] => !
)
3.3 3.4, , , C- . ,
. array()
=>. 3.5
$arr 10, 11 12.
3.5.
<?php
$arr = array(10 => "Hello ", "world", "!");
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
3.5
$arr:
Array
(
[10] => Hello
[11] => world
[12] => !
)
$arr 3.5 09 13 , (. .
136
, NULL). php.ini
(Notice),
.
,
( 3.6).
3.6.
<?php
$arr = array(10 => "Hello ", 9 => "world", 8 => "!");
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
3.6
$arr:
Array
(
[10] => Hello
[9] => world
[8] => !
)
3.1.2.
( 3.7).
3.7.
<?php
$arr[10] = "Hello ";
$arr[11] = "world";
$arr[12] = "!";
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
3.7 3.5. ,
( 3.8).
137
3.8.
<?php
$arr[] = "Hello ";
$arr[] = "world";
$arr[] = "!";
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
3.1.3. :
(. . int, float, string boolean) array.
, 0 , ( 3.9).
3.9.
<?php
$var = "Hello world";
$arr = (array) $var;
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
3.9
$arr:
Array
(
[0] => Hello world
)
3.1.4.
array(), , . . 3.1.
3.1.
array([...])
138
3.1 ()
array_fill ($start_index,
$num, $value)
, $num ,
$value.
$start_index
$low $high
$step
explode($delimiter,
$str [, $limit])
, $str,
, $delimiter.
$limit
,
array_fill(), :
array_fill($start_index, $num, $value)
, $num ,
$value. $start_index ( 3.10).
3.10. array_fill()
<?php
//
$arr = array_fill(5, 6, "Hello world!");
//
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
3.10 :
Array
(
[5] => Hello world!
[6] => Hello world!
[7] => Hello world!
[8] => Hello world!
[9] => Hello world!
[10] => Hello world!
)
range(),
:
range($low, $high [, $step])
139
3.11 :
Array
(
[0]
[1]
[2]
[3]
[4]
[5]
)
=>
=>
=>
=>
=>
=>
0
1
2
3
4
5
, , ,
range() ( 3.12).
range() .
3.12. range()
<?php
$arr = range(0, 1, 0.2);
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
3.12 :
Array
(
[0] => 0
[1] => 0.2
140
[2]
[3]
[4]
[5]
=>
=>
=>
=>
0.4
0.6
0.8
1
. explode(), :
explode($delimiter, $str [, $limit])
,
$str, , $delimiter.
$limit
. () . explode() 3.13.
,
implode().
3.13. explode()
<?php
$str = " e-mail";
$arr = explode(" ", $str);
echo "<pre>";
print_r ($arr);
echo "</pre>";
?>
3.13 :
Array
(
[0] =>
[1] =>
[2] => e-mail
)
141
3.1.5.
, . ,
array(). 3.14
$ship.
3.14.
<?php
$ship = array(
" " => array("","",""),
" " => array("","",""),
" " => array("","-","")
);
echo "<pre>";
print_r($ship);
echo "</pre>";
?>
:
Array
(
[ ] => Array
(
[0] =>
[1] =>
[2] =>
)
[ ] => Array
(
[0] =>
[1] =>
[2] =>
)
[ ] => Array
(
[0] =>
[1] => -
[2] =>
)
)
3 3, . .
, . , , . .
142
,
$ship[' '][0] "".
3.2.
, print_r() ( 3.15).
3.15. print_r()
<?php
$arr = array(1, 2, 3);
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
, .
, for while. foreach.
for :
for(begin; condition; body)
{
;
}
begin ( )
, . , ,
. , . -
(condition) , -
, condition (TRUE), ,
(FALSE). - ,
. body .
3.16 for.
3.16. for
<?php
$number = array("1", "2", "3");
for($i=0; $i < count($number); $i++)
143
{
echo $number[$i];
}
?>
3.16 : 123.
count()
(. . 3.3),
. 3.16 $number
3.
foreach,
:
foreach($array as [$key =>] $value)
{
;
}
$array ,
$key, $value. ( 3.17).
foreach ,
.
3.17. foreach
<?php
$number = array("first" => "1",
"second" => "2",
"third" => "3");
foreach($number as $index => $val) echo "$index = $val <br>";
?>
3.17 :
first = 1
second = 2
third = 3
$index ( 3.18).
3.18. foreach
<?php
$number = array("first" => "1",
"second" => "2",
"third" => "3");
144
foreach($number as $val)
{
echo $val; // 123
}
?>
foreach,
( 3.19).
3.19.
<?php
$ship = array(
" " => array("","",""),
" " => array("","",""),
" " => array("","-","")
);
foreach($ship as $key => $type)
{
//
echo "<b>$key</b><br>";
foreach($type as $ship)
{
//
echo "<li>$ship</li><br>";
}
}
?>
3.19 . 3.1.
. 3.1.
145
3.3.
.
count()
. , , . 3.2.
3.2.
$array. $mode
COUNT_RECURSIVE, ,
sizeof()
count()
array_count_values ($input)
,
, $input
count(), :
count ($array [, $mode])
$array. 3.20 .
3.20. count()
<?php
$car = array("",
"",
"",
"");
echo count($car); // 4
?>
, ( 3.21).
3.21. count()
<?php
$arr = array(
array(1, 2, 3, 4),
array(5, 6, 7, 8)
);
146
echo count($arr);
// 2
echo count($arr[0]); // 4
?>
array_count_values(), :
array_count_values ($array)
, , $array ( 3.23).
$array ,
.
3.23. array_count_values()
<?php
$array = array (1, "hello", 1, "world", "hello");
$new = array_count_values ($array);
echo "<pre>";
print_r($new);
echo "</pre>";
?>
147
3.23
$new:
Array
(
[1] => 2
[hello] => 2
[world] => 1
)
3.4. ?
PHP , .
, : . , , ( ), FALSE.
, , is_array() ( 3.24).
3.24. is_array()
<?php
$arr = array(1, 2, 3);
if(is_array($arr)) echo " <br />";
else echo " <br />";
if(is_array($arr[0])) echo " <br />";
else echo " <br />";
?>
3.5. ?
, . . , , isset() ( 3.25).
3.25. isset()
<?php
$arr = array(5 => 1, 2, 3);
148
for($i = 0; $i < 10; $i++)
{
if(isset($arr[$i])) echo " \$arr[$i] <br>";
else echo " \$arr[$i] <br>";
}
?>
3.25 :
$arr[0]
$arr[1]
$arr[2]
$arr[3]
$arr[4]
$arr[5]
$arr[6]
$arr[7]
$arr[8]
$arr[9]
3.6.
?
, ,
. foreach (. . 3.2),
array_keys(), :
array_keys($arr [, $search_value [, $strict]])
$arr.
$search_value, ,
$search_value. $strict TRUE, $search_value
===, ==. 3.26 .
3.26. array_keys()
<?php
//
$arr = array(0 => 100, "color" => "red");
//
$key = array_keys($arr);
149
//
echo "<pre>";
print_r($key);
echo "</pre>";
?>
:
Array
(
[0] => 0
[1] => color
)
:
Array
(
[0] => 0
[1] => 3
[2] => 4
)
3.7. ?
isset()
, ,
.
150
in_array()
:
in_array($value, $arr [, $strict])
, $value $arr,
TRUE, , FALSE . $strict TRUE, $search_value === (. .
, ),
( 3.28).
3.28.
<?php
$number = array(0.57, '21.5', 40.52);
if (in_array(21.5, $number)) echo " 21.5 ";
else echo " ";
?>
:
21.5
, '21.5' , . . , $number. .
===,
== $strict TRUE ( 3.29).
3.29.
<?php
$number = array(0.57, '21.5', 40.52);
if (in_array(21.5, $number, true)) echo " 21.5 ";
else echo " ";
?>
, . . ,
in_array() (float), (string). 21.5 , (. . ):
if (in_array('21.5', $number, true))
151
3.8.
: .
.
. 3.3.
3.3.
array_search($value, $arr
[,$strict])
$value $arr , , ,
FALSE. $strict
TRUE,
$value ===,
==
array_key_exists(), :
array_key_exists ($key, $arr)
array_search(), :
array_search ($value, $arr [, $strict])
152
3.31. array_search()
<?php
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);
// $key = 1;
?>
3.9.
array_sum()
:
array_sum($arr)
. array_sum() 3.32.
3.32. array_sum()
<?php
$arr = array(1,2,3,4,5);
$sum = array_sum($arr);
echo $sum; // 15
?>
3.10.
rand(), .
rand() :
rand ([$min, $max]);
153
//
echo $arr[$index];
?>
, 3.25, ,
0 . array_rand() (. 3.4), $arr.
:
array_rand ($arr [, $num_req])
$arr. $num_req
, $arr, $num_req 1,
$arr ( 3.34).
3.4.
. $num_req ,
$arr, $num_req 1,
$arr
shuffle ($arr) )
$arr
3.34. array_rand()
<?php
//
$arr = array("", "", "", "", "");
$rand_keys = array_rand($arr, 2);
echo "<pre>";
print_r($rand_keys);
echo "</pre>";
?>
shuffle() (. 3.4), :
shuffle ($array)
3.35 .
154
3.35. shuffle()
<?php
$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
shuffle($arr);
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
shuffle() :
Array
(
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
)
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
7
9
8
1
3
10
2
4
5
6
3.11.
+, ,
( 3.36).
+, +=.
3.36. +
<?php
$fst = array(1 => "one", 2 => "two");
$snd = array(3 => "three", 4 => "four");
$sum = $fst + $snd;
echo "<pre>";
print_r($sum);
echo "</pre>";
?>
155
3.36
$sum:
Array
(
[1]
[2]
[3]
[4]
)
=>
=>
=>
=>
one
two
three
four
, ( 3.37).
3.37.
<?php
$fst = array("one", "two");
$snd = array("three", "four", "five");
$sum = $fst + $snd;
echo "<pre>";
print_r($sum);
echo "</pre>";
?>
3.37
$sum:
Array
(
[0] => one
[1] => two
[2] => five
)
,
+ (. 3.5).
3.5.
array_merge_recursive ($array1
[,$array2, [, ...]]) )
3.38 array_merge().
156
array_merge() .
3.38. array_merge()
<?php
$fst = array("one", "two");
$snd = array("three", "four", "five");
$sum = array_merge($fst, $snd);
echo "<pre>";
print_r($sum);
echo "</pre>";
?>
$sum:
Array
(
[0]
[1]
[2]
[3]
[4]
)
=>
=>
=>
=>
=>
one
two
three
four
five
PHP array_merge_recursive()),
array_merge() + ( 3.39).
3.39. array_merge_recursive()
<?php
$ar1 = array("color" => array ("favorite" => "red"), 5);
$ar2 = array(10, "color" => array ("favorite" => "green", "blue"));
$sum = array_merge_recursive ($ar1, $ar2);
echo "<pre>";
print_r($sum);
echo "</pre>";
?>
3.39
$sum:
Array
(
[color] => Array
157
(
[favorite] => Array
(
[0] => red
[1] => green
)
[0] => blue
)
[0] => 5
[1] => 10
)
3.12.
, ,
.
, PHP
array_walk(), :
array_walk ($arr, $funcname [, $userdata])
3.40. array_walk()
<?php
$name = array ("m"=>"maksim", "i"=>"igor", "s"=>"sergey");
function print_array ($item, $key)
{
echo "$key=>$item<br>\n";
}
158
/* print_array
$name */
array_walk ($name, 'print_array');
?>
:
m => maksim
i => igor
s => sergey
array_map())
. :
array_map ($callback, $arr1 [, ...])
:
Array
(
[0] => 1
[1] => 8
159
[2] => 27
[3] => 64
[4] => 125
)
3.13.
, , . array_unique()), :
array_unique ($array)
3.42 .
3.42.
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
echo "<pre>";
print_r($result);
echo "</pre>";
?>
$result:
Array
(
[a] => green
[0] => red
[1] => blue
)
3.14.
, ,
( 3.43).
3.43. ,
<?php
// , ,
function get_date($time)
160
{
return array(date("Y", $time), date("m", $time), date("d", $time));
}
//
$arr = get_date(time());
// $arr
echo "<pre>";
print_r($arr);
echo "<pre>";
?>
get_date()
UNIXSTAMP, date() (,
) . , 3.43 $arr:
Array
(
[0] => 2010
[1] => 05
[2] => 12
)
, , ,
. PHP list(). 3.44 get_date() $year, $month $day, , .
3.44. list()
<?php
// , ,
function get_date($time)
{
return array(date("Y", $time), date("m", $time), date("d", $time));
}
//
list($year, $month, $day) = get_date(time());
echo " $year<br />";
// 2010
echo " $month<br />"; // 05
echo " $day<br />";
// 12
?>
, list() , . 3.45
161
get_date(), . list()
$year, $month $day , .
3.45. list()
<?php
// , ,
function get_date($time)
{
return array("year" => date("Y", $time),
"month" => date("m", $time),
"day"
=> date("d", $time));
}
//
list($year, $month, $day) = get_date(time());
echo " $year<br />";
// Notice: Undefined offset
echo " $month<br />"; // Notice: Undefined offset
echo " $day<br />";
// Notice: Undefined offset
?>
list() ,
list() . , ,
, . , ,
( 3.46).
3.46.
<?php
// , ,
function get_date($time)
{
return array(date("Y", $time), date("m", $time), date("d", $time));
}
//
list(, $month) = get_date(time());
echo " $month<br />"; // 05
?>
162
3.15.
PHP
(. 3.6).
3.6.
$array .
$sort_flags :
SORT_REGULAR ;
SORT_NUMERIC ;
SORT_STRING ;
SORT_LOCALE_STRING ,
$array
$array
-
$array -
natsort ($array)
"" $array,
natcasesort ($array)
"" $array,
$array
-
$array
-
$array $cmp_function
$array $cmp_function -
$array
$cmp_function -
sort() $arr :
sort($arr [, $sort_flags])
163
$sort_flags , ( ). :
SORT_REGULAR ;
SORT_NUMERIC ;
SORT_STRING ;
SORT_LOCALE_STRING ,
.
3.47 sort().
3.47.
<?php
$number = array("2", "1", "4", "3","5"); //
echo " : <br>";
for($i=0; $i < count($number); $i++)
{
echo "$number[$i] ";
}
sort($number); //
echo "<br> : <br>";
for($i = 0; $i < count($number); $i++)
{
echo "$number[$i] ";
}
?>
:
:
2 1 4 3 5
:
1 2 3 4 5
.
--. ,
:
array("one",
"two",
"abs",
"three",
"uic",
"for",
"five"),
164
sort :
[0]
[1]
[2]
[3]
[4]
[5]
[6]
=>
=>
=>
=>
=>
=>
=>
abs
five
for
one
three
two
uic
rsort() :
rsort ($arr [, $sort_flags])
:
:
2 1 4 3 5
:
5 4 3 2 1
asort() :
asort ($arr [, $sort_flags])
asort() $arr ,
( ) ( ) . $sort_flags , sort().
sort() , asort()
165
( 3.49), sort() ( ).
3.49. assort()
<?php
$arr = array("a" => "one",
"b" => "two",
"c" => "three",
"d" => "four");
asort($arr);
foreach($arr as $key => $val)
{
echo " $key => $val ";
}
?>
:
d => four a => one c => three b => two
, "-" . sort(),
:
0 => four 1 => one 2 => three 3 => two
arsort() asort(),
, .
arsort($arr [, $sort_flags])
ksort() ,
, . :
ksort ($arr [, $sort_flags])
=>
=>
=>
=>
"one",
"four",
"three",
"two"
166
:
a => one b => two c => three d => four
krsort() ( ). ksort().
:
krsort ($arr [, $sort_flags])
natsort() "" :
natsort($arr)
,
. .
file1.txt
file10.txt
file2.txt
file12.txt
file20.txt
("")
:
file1.txt
file10.txt
file12.txt
file2.txt
file20.txt
:
file1.txt
file2.txt
file10.txt
file12.txt
file20.txt
natsort(),
( 3.51).
167
3.51.
<?php
$arr_first = $arr_second =
array( "file12.txt",
"file10.txt",
"file2.txt",
"file1.txt");
sort($arr_first);
echo " <br>";
echo "<pre>";
print_r($arr_first);
echo "</pre>";
natsort($arr_second);
echo "<br> <br>";
echo "<pre>";
print_r($arr_second);
echo "</pre>";
?>
Array
(
[0]
[1]
[2]
[3]
)
=>
=>
=>
=>
file1.txt
file10.txt
file12.txt
file2.txt
Array
(
[3] => file1.txt
[2] => file2.txt
[1] => file10.txt
[0] => file12.txt
)
array_multisort() .
:
array_multisort($ar1 [,$arg [, ... [, ...]]] )
, array_multisort(),
168
array_multisort(arr1, $arr2, , $arrN)
$arr1[0]
$arr2[0]
$arrN[0]
$arr1[1]
$arr2[1]
$arrN[1]
$arr1[2]
$arr2[2]
...
...
...
$arr1[n]
$arr2[n]
$arrN[n]
...
$arrN[2]
. 3.2. array_multisort()
. ,
(. 3.2).
3.52 $arr1 $arr2.
3.52. array_multisort()
<?php
$arr1 = array(3, 4, 2, 7, 1, 5);
$arr2 = array("world", "Hello", "yes", "no", "apple", "wet");
array_multisort($arr1, $arr2);
echo "<pre>";
print_r($arr1);
print_r($arr2);
echo "</pre>";
?>
3.52 :
Array
(
[0]
[1]
[2]
[3]
[4]
[5]
)
=>
=>
=>
=>
=>
=>
1
2
3
4
5
7
Array
(
[0]
[1]
[2]
[3]
[4]
[5]
)
169
=>
=>
=>
=>
=>
=>
apple
yes
world
Hello
wet
no
, , ,
.
array_multisort() , (. 3.7).
SORT_ASC SORT_DESC, SORT_REGULAR, SORT_NUMERIC SORT_
STRING .
3.7. , array_multisort()
SORT_ASC
SORT_DESC
SORT_REGULAR
SORT_NUMERIC
SORT_STRING
3.53 ,
.
3.53.
<?php
$arr1 = array(3, 4, 2, 7, 1, 5);
$arr2 = array("world", "Hello", "yes", "no", "apple", "wet");
array_multisort($arr1, SORT_DESC, SORT_NUMERIC, $arr2);
echo "<pre>";
print_r($arr1);
print_r($arr2);
echo "</pre>";
?>
170
3.53 :
Array
(
[0]
[1]
[2]
[3]
[4]
[5]
)
Array
(
[0]
[1]
[2]
[3]
[4]
[5]
)
=>
=>
=>
=>
=>
=>
7
5
4
3
2
1
=>
=>
=>
=>
=>
=>
no
wet
Hello
world
yes
apple
3.16.
. (
),
, .
. 3.3 ,
.
. 3.3.
171
$comments,
3.54. ,
"text",
"id_parent" .
3.54.
<?php
$comments = array(
1 => array(
"text" => " ",
"id_parent" => 0),
2 => array(
"text" => " ",
"id_parent" => 1),
3 => array(
"text" => " ",
"id_parent" => 2),
4 => array(
"text" => " ",
"id_parent" => 1),
5 => array(
"text" => " ",
"id_parent" => 4),
6 => array(
"text" => " ",
"id_parent" => 3)
);
?>
$comments, ,
$parents, ( 3.55).
3.55. $parents
<?php
//
$parents = array();
foreach($comments as $id => $elements)
{
$parents[$elements['id_parent']][] = $id;
}
echo "<pre>";
print_r($parents);
echo "</pre>";
?>
172
$parents ,
, .
$parents $comments :
Array
(
[0] => Array
(
[0] =>
)
[1] => Array
(
[0] =>
[1] =>
)
[2] => Array
(
[0] =>
)
[4] => Array
(
[0] =>
)
[3] => Array
(
[0] =>
)
)
2
4
. , ,
( 3.56).
$comments $parents global, ,
.
3.56.
<?php
...
// $id_parent
// $indent
function print_hierarchy($id_parent = 0, $indent = "")
{
// $comments $parents
//
//
global $comments, $parents;
173
// ,
// $id_parent ,
if(!isset($parents[$id_parent])) return;
// ,
// $id_parent
for($i = 0; $i < count($parents[$id_parent]); $i++)
{
//
echo "<div style='padding-left:{$indent}px'>".
$comments[$parents[$id_parent][$i]]['text']."</div>";
//
//
print_hierarchy($parents[$id_parent][$i], $indent + 20);
}
}
// ,
print_hierarchy();
?>
3.17.
PHP
, PHP Web-.
, global.
Web- PHP
Web. . 3.8 .
3.8.
$_GET
, ( GET)
$_POST
, POST ( HTTP-)
$_FILES
POST
174
3.8 ()
$_COOKIE
, HTTP- Set-Cookie
$_REQUEST
$_SESSION
$_SERVER
, Web-, HTTP-
$_ENV
, $_SERVER
$GOBALS
(
), , , , global
3.18. $_GET
GET- (?).
http://localhost/index.php?id=1
URL id=1 GET- id 1. GET- $_GET. . 3.57 GET- id.
HTTP, PHP, GET , . $_GET, , $_SERVER['QUERY_STRING'], GET-.
GET, &:
http://localhost/index.php?id =1&number=2&page=10
175
URL GET-: id 1,
number 2 page 10 ( 3.58).
3.58. $_GET
<?php
echo "<pre>";
print_r($_GET);
echo "</pre>";
?>
3.58 $_GET:
Array
(
[id] => 1
[number] => 2
[page] => 10
)
GET- , $_GET . ,
http://localohost/index.php?id[]=1&id[]=2&id[]=10
3.58 :
Array
(
[id] => Array
(
[0] => 1
[1] => 2
[2] => 10
)
)
, 0,
.
http://localhost/index.php?id[a]=1&id[b]=2&id[c]=10
3.58 :
Array
(
[id] => Array
(
[a] => 1
176
[b] => 2
[c] => 10
)
)
GET- URL
(, ), URL .
PHP (. 3.9).
3.9. URL
urlencode($str)
$str, ,
, ,
, %. +
urldecode($str)
urlencode(), , %
rawurlencode($str)
$str, ,
, ,
, %. urlencode(),
+, %20
rawurldecode($str)
rawurlencode() , , %
parse_url($url [, $component])
$url ,
.
$component
: PHP_URL_SCHEME, PHP_URL_HOST,
PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH,
PHP_URL_QUERY PHP_URL_FRAGMENT,
http_build_query ($formdata [,
$numeric_prefix [,
$arg_separator]])
$formdata.
$numeric_prefix, GET. $arg_separator GET-, &
177
HTML-
:
<a href='test.php?phrase=%CF%F0%E8%E2%E5%F2%2C+%EC%E8%F0%21'></a>
GET-
, , . .
parse_url(),
:
scheme , , http, https, ftp . .;
host ;
port ;
user ;
pass ;
path ;
query , (?);
fragment , #.
3.60 URL
parse_url().
3.60. parse_url()
<?php
$url = 'http://user:pass@www.site.ru/path/index.php?par=value#anch';
$arr = parse_url($url);
echo "<pre>";
print_r($arr);
echo "<pre>";
?>
$arr:
Array
(
[scheme] => http
[host] => www.site.ru
[user] => user
[pass] => pass
[path] => /path/index.php
[query] => par=value
[fragment] => anch
)
178
parse_url() , .
:
PHP_URL_SCHEME , , http, https, ftp . .;
PHP_URL_HOST ;
PHP_URL_PORT ;
PHP_URL_USER ;
PHP_URL_PASS ;
PHP_URL_PATH ;
PHP_URL_QUERY , (?);
PHP_URL_FRAGMENT , #.
3.61 parse_url()
PHP_URL_HOST .
3.61. parse_url()
<?php
$url = 'http://user:pass@www.site.ru/path/index.php?par=value#anch';
echo parse_url($url, PHP_URL_HOST); // www.site.ru
?>
3.19.
.
, .
.
, ( 3.62), ,
. GET ( GET- page).
$start $end ,
.
3.62.
<?php
$language[] = "PHP";
$language[] = "++";
$language[] = "Java";
$language[]
$language[]
$language[]
$language[]
$language[]
$language[]
$language[]
$language[]
$language[]
$language[]
$language[]
179
=
=
=
=
=
=
=
=
=
=
=
"Ruby";
"Python";
"Perl";
"JavaScript";
"Visual Basic";
"Fortran";
"Pascal";
"Assembler";
"Lisp";
"Haskell";
"C#";
//
$pnumber = 2;
// ,
if(isset($_GET['page'])) $page = intval($_GET['page']);
else $page = 1;
//
$total = count($language);
//
$number = (int)($total/$pnumber);
if((float)($total/$pnumber) $number != 0) $number++;
// $language
//
$start = (($page 1)*$pnumber + 1);
// $language
//
$end = $page*$pnumber + 1;
if($end > $total) $end = $total;
//
for($i = $start; $i < $end; $i++)
{
echo $language[$i]."<br />";
}
//
for($i = 1; $i <= $number; $i++)
{
//
if($i != $number)
{
if($page == $i)
180
{
//
echo "[".(($i 1)*$pnumber + 1)."-".$i*$pnumber."] ";
}
else
{
echo "<a href='index.php?page=$i'>[".
(($i 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
// ,
// $temp
else
{
if($page == $i)
{
//
echo "[".(($i 1)*$pnumber + 1)."-".($total 1)."] ";
}
else
{
echo "<a href='index.php?page=$i'>[".
(($i 1)*$pnumber + 1)."-".($total 1)."]</a> ";
}
}
}
?>
3.62 . 3.4.
. 3.4.
181
3.20. $_POST
GET ,
, ,
, .
,
, POST, GET HTTP-, HTTP-.
- POST HTML-, <form> method "post"
( 3.63). HTML- :
first second , .
3.63. HTML-
<form action='index.php' method='post'>
<input type='text' name='first' /><br>
<input type='text' name='second' /><br>
<input type='submit' value="">
</form>
action <form> ,
.
, , .
, $_POST. 3.64
HTML-, .
3.64. $_POST
<?php
// HTML-
if(!empty($_POST))
{
echo "<pre>";
print_r($_POST);
echo "</pre>";
exit();
}
?>
<form action='index.php' method='post'>
<input type='text' name='first' /><br>
<input type='text' name='second' /><br>
<input type='submit' value="">
</form>
182
, $_POST. ,
HTML-, - ,
.
3.21. .
$_FILES
POST, $_POST, ,
$_FILES.
, HTML ,
( ).
:
<input type='file' />
type name, .
3.65.
3.65. HTML- (index.html)
<html><head><title> </title></head><body>
<h2><b> </b></h2>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="submit" value=""><br>
</form>
</body>
</html>
entype ,
. ,
entype multipart/form-data. application/x-www-form-urlencoded.
, .
, , . 3.5.
HTTP-, , , , php.ini ( upload_tmp_dir).
183
. 3.5.
$_FILES , file, :
$_FILES['filename']['name'] ( -
);
$_FILES['filename']['size'] ( );
$_FILES['filename']['type'] ( MIME- );
$_FILES['filename']['tmp_name'] ( ,
).
3.66 upload.php,
temp.
is_uploaded_file(),
($_FILES['filename']['name']) TRUE FALSE
.
3.66. (upload.php)
<html>
<head>
<title> </title>
</head>
<body>
<?php
if (move_uploaded_file($_FILES['filename']['tmp_name'],
"temp/".$_FILES['filename']['name']))
{
echo " ";
}
184
else
{
echo " ";
}
?>
</body>
</html>
move_uploaded_file(),
, ,
.
temp , ,
" ".
3.67 .
3.67.
<html>
<head>
<title> </title>
</head>
<body>
<?php
if (move_uploaded_file($_FILES["filename"]["tmp_name"],
"temp/".$_FILES["filename"]["name"]))
{
echo " <br>";
//
echo " : <br>";
echo " : ";
echo $_FILES["filename"]["name"];
echo "<br> : ";
echo $_FILES["filename"]["size"];
echo "<br> : ";
echo $_FILES["filename"]["tmp_name"];
echo "<br> : ";
echo $_FILES["filename"]["type"];
}
else
{
echo " ";
}
?>
</body>
</html>
185
. 3.6.
, . 3.6.
, . , 3 , , 3.68.
3.68.
<?php
if ($_FILES['filename']['size'] > 3*1024*1024)
{
exit " ";
}
if (copy(_FILES['filename']['tmp_name'],
"temp/".$_FILES['filename']['name']))
{
echo " <br>";
}
else
{
echo " ";
}
?>
upload_max_filesize, 2 :
if ($_FILES['filename']['size'] > upload_max_filesize)
upload_max_filesize
php.ini.
186
3.22.
Web-, (. 3.7).
9 AJAX- .
. 3.7. HTML-
3.69.
<?php
if(!empty($_FILES))
{
// HTML-
//
for($i = 0; $i < count($_FILES['filename']['name']); $i++)
{
//
// /files Web-
if (!move_uploaded_file($_FILES['filename']['tmp_name'][$i],
"files/".$_FILES['filename']['name'][$i]))
187
{
echo " ";
}
}
// ,
// $_POST
//
header("Location: index.php");
exit();
}
?>
<form action="index.php" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><input class='files' type='file' name='filename[]' /></td>
<td><input type='button' name='drop'
value=' − ' onclick='dropline(this);' />
<input type='button' value=' + '
onclick='addline(this);' /></td></tr>
<tr><td><input type='submit' value='' /></td><td></td></tr>
</table>
</form>
<script language='JavaScript1.1' type='text/javascript'>
<!-function dropline(btn)
{
if(document.getElementById)
{
while (btn.tagName != 'TR') btn = btn.parentNode;
btn.parentNode.removeChild(btn);
}
}
function addline(btn)
{
if(document.getElementById)
{
while (btn.tagName != 'TR') btn = btn.parentNode;
var newTr = btn.parentNode.insertBefore(
btn.cloneNode(true),
btn.nextSibling);
thisChilds = newTr.getElementsByTagName('td');
for (var i = 0; i < thisChilds.length; i++)
{
if (thisChilds[i].className == 'files')
thisChilds[i].innerHTML =
'<input class="files" type="file" name="filename[]" />';
188
}
}
}
//-->
</script>
3.23. Cookie.
$_COOKIE
HTTP-, , . ,
, , ,
, .
, . HTTP cookie, : , - .
Cookies ,
, , . "cookie"
, , ,
. cookie
, .
cookie setcookie(), :
setcookie($name [, $value [, $expire [, $path [, $domain [, $secure]]]]])
:
$name cookie;
$value , cookie name;
$expire , 0 00 1 1970 .
cookie ;
189
$path , cookie;
$domain , cookie;
$secure , , cookie
HTPPS. 0,
cookie
HTTP.
setcookie() TRUE cookie
FALSE . cookie , Web-, $_COOKIE cookie.
cookie HTTP-, setcookie()
echo(), print() . ., HTML-. cookie
3.70. cookie
$_COOKIES.
cookie , cookie; cookie , . .
, .
cookie.
3.70.
<?php
//
error_reporting(E_ALL & ~E_NOTICE);
// cookie
$_COOKIE['counter']++;
// cookie
setcookie("counter", $_COOKIE['counter']);
// cookie
echo " $_COOKIE[counter] ";
?>
, 3.70, . 3.8.
3.70 cookie counter,
.
cookie time() mktime() ( 3.71).
190
. 3.8. cookies
3.71. cookie
<?php
// Cookie 10
setcookie("name", "value", time() + 600);
// cookie 25 2010
setcookie("name", "value", mktime(0,0,0,1,25,2010));
// cookie 18:00 25 2010
setcookie("name", "value", mktime(18,0,0,1,25,2010));
?>
, 32- ,
1901 2038.
cookie , , ,
2100. cookie .
cookie ,
(, /web), ( 3.72).
3.72. cookie
<?php
setcookie("name", "value", time() + 600, "/web");
?>
cookie , , 3.73.
191
3.73. cookie
<?php
setcookie("name", "value");
?>
, cookie ,
.
3.24. Cookie ?
cookies . Web-, cookie,
, , cookies .
, , , cookies. 3.75.
3.75. , cookies
<?php
//
// (http://www.softtime.ru/info/articlephp.php?id_article=23)
error_reporting(E_ALL & ~E_NOTICE);
if(!isset($_GET['probe']))
{
// cookie "test"
if(setcookie("test","set"));
// ,
// cookie
header("Location: $_SERVER[PHP_SELF]?probe=set");
}
192
else
{
if(!isset($_COOKIE['test']))
{
echo "
cookies";
}
else
{
echo "Cookies ";
}
}
?>
$_SERVER , Web . $_SERVER['PHP_SELF'], . , phpinfo().
3.75 cookies
setcookie() cookie. setcookie() , ,
cookie.
GET- probe set, ,
, , -
$_COOKIE['test']. , cookies ,
.
3.25. .
$_SESSION
cookie , "/", , .
, cookies. .
.
,
, (SID),
, cookies, .
PHP-, . .
php.ini session.
cookie_lifetime .
193
, cookies, . Cookies
, . ( )
, ( , , . .). ,
, ( )
. ( ) ( on-line . .).
.
session.save_path php.ini
, ;
Web- . , .
, cookie
SID, . session_start().
, .
, setcookie(), session_start() , . . SID cookie, . . HTTP- SetCookie.
session.auto_start php.ini
1, , session_start().
$_SESSION. 3.76 index.php $_SESSION .
3.76. $_SESSION
<?php
//
session_start();
//
$_SESSION['name'] = "value";
//
$arr = array("first", "second", "third");
$_SESSION['arr'] = $arr;
194
//
echo "<a href='other.php'> </a>";
?>
, session_start(),
$_SESSION. 3.77 other.php, ,
index.php.
$_SESSION , , . . , serialize(), .
3.77. $_SESSION
<?php
//
session_start();
// $_SESSION
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>
:
Array
(
[name] => value
[arr] => Array
(
[0] => first
[1] => second
[2] => third
)
)
, session_destroy(), :
session_destroy()
TRUE FALSE
. , , , unset(),
$_SESSION . -
195
session_id(),
:
session_id([$id])
.
$id ,
. session_id()
session_start() ( 3.78).
3.78.
<?php
//
session_start();
//
echo session_id();
?>
3.78 :
a27e8c4724f07cae913c50e55cea1b38
3.26. .
$_SERVER
PHP ,
. PHP
, , . ,
$_SERVER PHP- Web- Apache. Web-.
$_SERVER.
$_SERVER print_r(), ,
phpinfo(), PHP-.
196
3.26.1. $_SERVER['DOCUMENT_ROOT']
$_SERVER['DOCUMENT_ROOT'] . , , , .
httpd.conf DocumentRoot, "D:/main" ( 3.79), $_SERVER['DOCUMENT_ROOT']
"D:\main".
3.79.
NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
ServerAdmin admin@localhost
DocumentRoot "D:/main"
ServerName localhost
ErrorLog logs/ error_log
CustomLog logs/ access_log common
</VirtualHost>
3.26.2. $_SERVER['HTTP_ACCEPT']
$_SERVER['HTTP_ACCEPT'] . HTTP- Accept, .
:
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/
x-shockwave-flash, application/vnd.ms-excel, application/msword, */*
Accept ,
. , .
* . , */* , type/* type.
.
.
q, 0 1 ,
. q
.
197
q 1. ,
.
Accept:
Accept: audio/*; q=0.2, audio/basic
:
Accept: text/plain; q=0.5, text/html,
text/x-dvi; q=0.8, text/x-c
, $_SERVER['HTTP_ACCEPT']
, Accept:.
: text/html
text/x-c , , ,
, text/x-dvi, ,
text/plain.
3.26.3. $_SERVER['HTTP_ACCEPT_LANGUAGE']
$_SERVER['HTTP_ACCEPT_LANGUAGE']
. HTTP- AcceptLanguage, . :
Accept-Language: ru, en; q=0.7
:
, .
$_SERVER['HTTP_ACCEPT_LANGUAGE'] , Accept-Language:
ru, en; q=0.7
$_SERVER['HTTP_ACCEPT_LANGUAGE']
, . . ( ).
198
3.26.4. $_SERVER['HTTP_HOST']
$_SERVER['HTTP_HOST'] , , , ,
$_SERVER['SERVER_NAME'].
(http://), :
www.sofftime.ru
-
www.softtime.ru, softtime.ru.
3.26.5. $_SERVER['HTTP_REFERER']
$_SERVER['HTTP_REFERER'] , . . index.php ( 3.80) page.php ( 3.81).
3.80. index.php
<?php
echo "<a href=page.php> PHP</a><br>";
echo " \$_SERVER['HTTP_REFERER'] ".
$_SERVER['HTTP_REFERER']
?>
page.php ,
index.php ( 3.81).
3.81. page.php
<?php
echo "<a href=index.php> PHP</a><br>";
echo " \$_SERVER['HTTP_REFERER'] ".
$_SERVER['HTTP_REFERER']
?>
. 3.9.
199
,
, (. 3.9).
3.26.6. $_SERVER['HTTP_USER_AGENT']
$_SERVER['HTTP_USER_AGENT'] .
: "Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.1)". "MSIE 6.0" ,
Internet Explorer 6.0. "Windows
NT 5.1" , Windows XP.
Windows 2000 $_SERVER['HTTP_USER_AGENT'] : "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)')",
Windows XP "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)".
Opera, $_SERVER['HTTP_
USER_AGENT'] : "Mozilla/4.0 (compatible; MSIE
5.0; Windows 98) Opera 6.04 [ru]". "MSIE 6.0" , , Opera Internet Explorer
Windows. , , , Internet Explorer , "MSIE 6.0" "Opera".
, , Windows 98.
Netscape $_SERVER['HTTP_USER_
AGENT'] : "Mozilla/5.0 (X11; U; Linux i686;
en-US; rv:1.4) Gecko/20030624 Netscape/7.1".
"Netscape". , ,
, Linux,
, Pentium IV,
X-Window. , .
3.26.7. $_SERVER['REMOTE_ADDR']
$_SERVER['REMOTE_ADDR'] IP- . 127.0.0.1. IP- -,
. -,
IP- $_SERBER['HTTP_X_
FORWARDED_FOR'].
200
- ,
: , ,
. . - -, IP- , HTTP_X_FORWARDED_FOR.
3.26.8. $_SERVER['SCRIPT_FILENAME']
$_SERVER['SCRIPT_FILENAME']
.
Windows, d:\main\test
\index.php, . . , UNIX- /, : /var/share/www/test/index.php.
3.26.9. $_SERVER['SERVER_NAME']
$_SERVER['SERVER_NAME'] , , , . :
www.softtime.ru
$_SERVER['SERVER_NAME'] $_SERVER['HTTP_HOST'].
$_SERVER , IP- , , Web- HTTP. $_SERVER['SERVER_ADDR'],
$_SERVER['SERVER_PORT'], $_SERVER['SERVER_SOFTWARE'] $_SERVER['SERVER_PROTOCOL']
. 3.82 .
3.82 . 3.10.
. 3.10. 3.82
201
3.82. $_SERVER
<?php
echo
echo
echo
echo
echo
?>
" ".$_SERVER['SERVER_NAME']."<br>";
"IP- ".$_SERVER['SERVER_ADDR']."<br>";
" ".$_SERVER['SERVER_PORT']."<br>";
"Web- ".$_SERVER['SERVER_SOFTWARE']."<br>";
" HTTP- ".$_SERVER['SERVER_PROTOCOL']."<br>";
3.26.10. $_SERVER['REQUEST_METHOD']
$_SERVER['REQUEST_METHOD'] , : GET POST ( 3.83).
3.83.
<?php
echo $_SERVER['REQUEST_METHOD']; // GET
?>
3.26.11. $_SERVER['QUERY_STRING']
$_SERVER['QUERY_STRING'] , ,
:
http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512
$_SERVER['QUERY_STRING'] ?. , , 3.84, ?,
.
3.84 . 3.11.
. 3.11. 3.84
202
3.84. $_SERVER['QUERY_STRING']
<?php
echo $_SERVER['QUERY_STRING'];
?>
3.26.12. $_SERVER['PHP_SELF']
$_SERVER['PHP_SELF'] , :
http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512
$_SERVER['PHP_SELF'] /test/index.php.
, $_SERVER['SCRIPT_NAME'].
3.26.13. $_SERVER['REQUEST_URI']
$_SERVER['REQUEST_URI'] , , :
http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512
$_SERVER['REQUEST_URI'] /test/index.php?id=
1&test=wet&id_theme=512. ,
, $_SERVER, 3.85.
3.85.
<?php
echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
?>
.
- . ,
.
, , . ,
.
4.1.
, (. 4.1).
4.1.
fopen($filename, $mode [,
$use_include_path [,
$context]])
fclose($handle)
, fopen().
$handler
. TRUE FALSE
touch($filename [, $time [,
$atime]])
touch() $time
$atime. , ,
.
. 13.5
tempnam($dir, $prefix)
$dir ,
$prefix.
, FALSE
204
4.1 ()
tmpfile()
. .
, FALSE
. -
, , . , , :
/var/home/www/htdocs/text.txt
C:\www\htdocs\text.txt
Windows , A B , . UNIX- (root-) /,
. , Windows
, , UNIX-
.
fopen() tmpfile() ,
, . . , .
4.1, /,
.
205
, ( , ,
).
. 4.1 ,
C:/www/ . . 4.2
:/www/base/1.txt,
C:/www/scr.php.
. 4.1.
4.2. 1.txt
<?php
// 1.txt
$absolute = ":/www/base/1.txt";
// 1.txt
$relative = "base/1.txt";
?>
, ,
/ ,
.
. 4.1, C:/dir/text.txt,
dir.
.., ( 4.3).
206
, ( ..), , .
4.3.
<?php
// text.txt
$absolute = ":/dir/text.txt";
// text.txt
$relative = "../dir/1.txt";
?>
, .., , ../../../result/text.txt.
. Web ,
, , http://www.softtime.ru/index.php.
, ,
.
touch() ( 4.4).
4.4. touch()
<?php
//
$filename = "text.txt";
// $filename
touch($filename);
?>
,
$filename $mode. ,
, $use_include_path (
). , FALSE.
207
. 4.2 $mode,
.
4.2. fopen()
r+
w+
a+
x+
, , r r+.
fopen() FALSE,
. 4.5 text.txt fopen().
4.5. fopen()
<?php
//
$filename = "text.txt";
//
$fd = fopen($filename, "w");
// ,
if (!$fd)
{
echo " <br>";
fclose($fd);
}
?>
fclose() , . .
. - fclose(), : , .
, fflush(),
208
fclose(). , , , .
4.2.
,
. tempnam()
:
tempnam($dir, $prefix)
$dir
$prefix. tempnam() . - , FALSE.
4.6 .
4.6.
<form method='post'>
<input type='submit' value=''>
</form>
<?php
// HTML-
if (isset($_POST))
{
//
$filename = tempnam("./", "fl");
//
$fd = fopen($filename, "w");
//
fclose($fd);
}
?>
tempnam() PHP
tmpfile(), ,
. ,
. tmpfile(), ,
tempnam(), .
209
4.3. ,
,
, . ,
, . 4.3.
4.3.
copy($source, $destination)
$source $destination.
TRUE, FALSE
unlink($filename)
$filename.
TRUE, FALSE
rename($oldname, $newname)
$oldname,
$newname. TRUE, FALSE
,
unlink() ( 4.8).
4.8.
<?php
//
if (!copy("/etc/my.cnf", "my.cnf")) exit " ";
//
if (unlink("/etc/my.cnf")) echo " ";
else echo " ";
?>
, rename(), , -
210
, ( 4.9).
4.9. rename()
<?php
//
if (rename("/etc/my.cnf", "my.cnf")) echo " ";
else echo " ";
?>
copy() rename() ,
. 4.10 http://www.
softtime.ru/index.php.
4.10.
<?php
if (copy("http://www.softtime.ru/index.php", "index.htm"))
echo " ";
else echo " ";
?>
PHP-, HTML ( ).
, Web-, .
copy() .
4.4.
fopen() ; .
fopen() . 4.2.
,
(. 4.2). .
.
r, w x . ,
, . , ,
a,
. , a+ ,
, . . .
211
. 4.2.
, , , , , .
4.11 , text.txt,
( fgetc()) .
4.11.
<?php
//
$fd = fopen("text.txt", "r");
if (!$fd) exit(" text.txt");
// ,
while(($char = fgetc($fd)) !== FALSE)
{
echo $char;
}
//
fclose($fd);
?>
212
4.12. feof()
<?php
//
$fd = fopen("text.txt", "r");
if (!$fd) exit(" text.txt");
// ,
while(!feof($fd))
{
$char = fgetc($fd);
echo $char;
}
//
fclose($fd);
?>
fopen()
(. . 4.2). 4.11
4.12 , r, r+, w+, a+ x+, w, a x
. , x+
, , w+ , a+
, .
r r+.
.
PHP , , .
fgets(), :
fgets($handle [, $length])
$handler .
$handle 1 ( $handle
1000), .
, FALSE. 4.13 fgets() text.txt.
4.13. fgets()
<?php
//
$fd = fopen("text.txt", "r");
if (!$fd) exit(" text.txt");
// ,
while(!feof($fd))
213
{
$str = fgets($fd, 1024);
echo "$str<br>";
}
//
fclose($fd);
?>
fgets(),
. , fread(), . :
fread($handle, $length)
, fread() ( 4.15).
4.15.
<?php
//
$fd = fopen("text.txt", "r");
if (!$fd) exit(" text.txt");
//
$str = fread($fd, filesize($fd));
echo $str;
214
//
fclose($fd);
?>
4.15
filesize().
fread() , .
: , 4 096 ( 4.16).
4.16.
<?php
//
$fd = fopen("http://www.softtime.ru", "r");
if (!$fd) exit(" ");
// ,
$str = "";
while(!feof($fd))
{
$str .= fread($fd, 4096);
}
//
echo $str;
//
fclose($fd);
?>
4.15 4.16
. ,
PHP file_get_contents(),
:
file_get_contents($filename [, $flags [,
$context [, $offset [, $maxlen]]]])
$filename
. ,
, ,
fopen().
$flags . . 4.4. , |.
$context HTTP-,
. , NULL. -
215
$offset $maxlen
, .
FILE_TEXT FILE_BINARY .
FILE_USE_INCLUDE_PATH
, include_path php.ini
FILE_TEXT
UTF-8 (
php.ini)
FILE_BINARY
4.17 ,
4.15.
file_get_contents(), ,
. ,
8 16 memory_limit
php.ini. memory_limit
, "Fatal error: Allowed memory size of 8388608 bytes
exhausted" (" : 8 388 608 ").
4.17. file_get_contents()
<?php
$str = file_get_contents("text.txt");
echo $str;
?>
, file_get_contents() . 4.18 .
4.18. file_get_contents()
<?php
$str = file_get_contents("http://www.softtime.ru");
echo $str;
?>
216
4.19 $arr,
.
PHP file(),
:
file($filename [, $flags [, $context]])
$filename , .
$flags . 4.5. $context HTTP-, .
FILE_TEXT FILE_BINARY .
FILE_USE_INCLUDE_PATH
, include_path php.ini
FILE_IGNORE_NEW_LINES
FILE_SKIP_EMPTY_LINES
FILE_TEXT
UTF-8 (
php.ini)
FILE_BINARY
217
4.20 4.19.
4.20. file()
<?php
//
$arr = file ("text.txt", FILE_IGNORE_NEW_LINES |
FILE_SKIP_EMPTY_LINES |
FILE_BINARY);
// $arr
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
4.5.
( fopen()) , r. , w w+, . fwrite(),
:
fwrite($handle, $str [, $length])
, . 4.2, b t . -
218
,
. 4.2.
- ,
. UNIX-
\n, Windows \r\n, Mac OS \n\r. t UNIX- \n
. b .
Windows Windows- \r\n, UNIX \n ().
b, . .
.
Windows. "Hello\nworld!", UNIX- \n. ( 4.22) 12 .
4.22.
<?php
//
$fd = fopen("text.txt", "wb");
if (!$fd) exit(" ");
//
fwrite($fd, "Hello\nworld!");
//
fclose($fd);
//
$str = file_get_contents("text.txt");
echo strlen($str); // 12
?>
219
//
fclose($fd);
//
$str = file_get_contents("text.txt");
echo strlen($str); // 13
?>
,
file_put_
contents(), :
file_put_contents($filename, $data [, $flags [, $context]])
$filename $data (
, ). $flags
. 4.6. $context
HTTP-, .
FILE_TEXT FILE_BINARY .
4.6. $flags
file_put_contents ()
FILE_USE_INCLUDE_PATH
, include_path php.ini
FILE_APPEND
LOCK_EX
FILE_TEXT
UTF-8 (
php.ini)
FILE_BINARY
4.24 4.19.
4.24. file_put_contents()
<?php
file_put_contents("text.txt", "Hello world!");
?>
220
,
( 4.25).
4.25.
<?php
//
$arr[] = "Hello ";
$arr[] = "world!";
//
file_put_contents("text.txt", $arr);
?>
4.6.
filesize(), . , , , , 4.26.
4.26.
function getfilesize($filename)
{
// ,
if (!file_exists($filename)) return " ";
//
$filesize = filesize($filename);
// 1024 ,
//
if ($filesize > 1024)
{
$filesize = (float)($filesize/1024);
// 1024 ,
//
if ($filesize > 1024)
{
$filesize = (float)($filesize/1024);
//
$filesize = round($filesize, 1);
return $filesize." ";
}
else
{
//
$filesize = round($filesize, 1);
221
4.26, ,
file_exists() .
TRUE, , FALSE . , , filesize(), 1 , 1 .
.
4.7.
site.rar, 10 000 . , , ( 4.27).
4.27.
<?php
//
$filename = "site.rar";
// 10 000
$piece = 10000;
//
$fp = fopen($filename, "r");
//
$bufer = file_get_contents($filename);
//
fclose($fp);
// ,
$count = (int)filesize($filename)/$piece;
if((float)(filesize($filename)/$piece) $count != 0) $count++;
//
// $bufer
for($i=0; $i<$count; ++$i)
{
$part = substr($bufer,$i*$piece,$piece);
//
file_put_contents("site.tm".$i, $part);
}
?>
222
, tmN, N . , 4.28.
4.28.
<?php
$bufer = "";
for($i = 0; $i < 100000; ++$i)
{
//
$filename = "site.tm".$i;
//
if(file_exists($filename))
// ,
// $bufer
$bufer .= file_get_contents($filename);
else
//
//
break;
// $bufer
//
file_put_contents("site_final.rar", $bufer);
}
?>
4.8.
. ,
. . 4.3
Web-,
.
4.29 .
4.29.
<?php
//
error_reporting(E_ALL & ~E_NOTICE);
// ,
//
if(isset($_POST['content']))
223
{
// ,
if(!file_exists($_POST['filename']))
exit(" ");
// , " "
if(get_magic_quotes_gpc())
{
// " "
$_POST['content'] = stripslashes($_POST['content']);
}
//
file_put_contents($_POST['filename'], $_POST['content']);
// $_GET
//
$_GET['filename'] = $_POST['filename'];
}
echo "<form method='get'>".
" ".
"<input type='text' name='filename' ".
"value='".htmlspecialchars($_GET['filename'])."' />";
echo "<input type='submit' value='' />";
echo "</form>";
//
// ,
if(isset($_GET['filename']))
{
// ,
if(!file_exists($_GET['filename']))
exit(" ");
// $bufer
$bufer = file_get_contents($_GET['filename']);
echo "<form method='post'>".
"<textarea cols='50' rows='5' name='content'>".
htmlspecialchars($bufer)."</textarea>".
"<input type='hidden' name='filename' ".
"value='".htmlspecialchars($_GET['filename'])."' />";
echo "<br /><br />";
echo "<input type='submit' value='' />";
echo "</form>";
}
?>
,
filename , GET , .
file_get_contents() $bufer, -
224
. 4.3.
. content filename,
.
,
POST. , ,
$_POST['content'] , .
$_POST $_GET.
, " " ,
get_magic_quotes_gpc(). " " (. . 2.1.9)
, , ,
. 4.29 , , stripslashes().
$_POST['content'] , , " " , ( 4.30).
, 4.30 get_magic_quotes_gpc()
!, . . if ,
" " , 4.31 , . . , " " .
4.30.
<?php
...
// , " "
if(!get_magic_quotes_gpc())
225
{
// " "
$_POST['content'] = addslashes($_POST['content']);
}
//
file_put_contents($_POST['filename'], "$_POST[content]");
...
?>
4.9.
,
, ,
.
,
, , index.php?down=archive.zip. , down, ,
filecount.txt.
.
HTTP-
Location . , 4.31.
4.31.
<?php
//
error_reporting(E_ALL & ~E_NOTICE);
//
$file_name = array('archive1.zip','archive2.zip','archive3.zip');
// ,
$countname = "filecount.txt";
// ,
//
if(file_exists($countname))
{
//
$content = file_get_contents($countname);
//
$count = unserialize($content);
}
// ,
//
226
else
{
// $count
foreach($file_name as $file)
{
$count[$file] = 0;
}
//
file_put_contents($countname, serialize($count));
}
// , down
// GET
if(isset($_GET['down']))
{
// , $_GET['down']
// $file_name
if(in_array($_GET['down'],$file_name))
{
//
//
// $_GET['down']
$count[$_GET['down']]++;
//
file_put_contents($countname, serialize($count));
//
header("Location: $_GET[down]");
exit();
}
}
//
foreach($file_name as $file)
{
echo " <a href='$_SERVER[PHP_SELF]?down=$file'>$file</a>
".intval($count[$file])." <br />";
}
?>
$file_name, . . -,
down, , ,
. -,
. $count, , ,
227
serialize() ,
unserialize().
, HTTP-
, PHP
"Warning: Cannot modify header information headers already sent by"
(:
). HTTP: ,
, .
, ,
.
4.31, ,
filecount.txt ,
$file_name. 4.31
. 4.4.
. 4.4.
4.10.
HTML
, , ,
. , . ""
, . . HTTP-,
, ,
cookie . . ,
.
, HTTP-,
4.32.
228
4.32. ,
<?php
$filename = basename($_GET['down']);
header("Content-Disposition: attachment; filename=$filename");
header("Content-type: application/octet-stream");
header("Content-length: ".filesize($_GET['down']));
echo file_get_contents($_GET['down']);
?>
4.32 GET- , ,
index.php?down=filetext.txt. basename()
( , GET- down ). HTTP Content-Disposition , filename. filename
, filename
. HTTP- Content-type , , . HTTP- Content-length .
, $_GET['down'],
file_get_contents().
4.32 . 4.5.
, :
echo, . , ?>.
. 4.5.
229
4.11.
, Web-,
. , , ,
.
file(),
,
.
( 4.33).
4.33.
<?php
echo getlinecount($_GET['name']);
function getlinecount($filename)
{
// ,
if(!file_exists($filename)) return " ";
//
// file(), ,
//
$filearr = file($filename);
//
return count($filearr);
}
?>
, 4.33, ,
,
. ( 4.34).
4.34.
<?php
echo getlinecount($_GET['name']);
function getlinecount($filename)
{
// ,
if(!file_exists($filename)) return " ";
//
$fd = fopen($filename, "r");
230
//
if(!$fd) return " ";
$count = 0;
while(($line = fgets($fd)) !== false) $count++;
//
return $count;
}
?>
getlinecount() ,
.
, , .
4.12.
text.txt ( 4.35), .
4.35. text.txt
PHP
++
Java
Ruby
Python
Perl
JavaScript
Visual Basic
Fortran
Pascal
Assembler
Lisp
Haskell
C#
rand(),
:
rand([$min, $max])
231
4.36.
<?php
//
$filename = "text.txt";
// count.txt
// $lines
$lines = file($filename);
// $lines
$index = rand(0, count($lines) 1);
// $index
echo $lines[$index];
?>
4.13.
. , .
file(), shuffle() ( 4.37).
4.37.
<?php
//
$filename = "text.txt";
//
$lines = file($filename);
//
shuffle($lines);
//
//
array_walk($lines, 'trim_array');
//
file_put_contents($filename, implode("\r\n", $lines));
function trim_array(&$item, $key)
{
$item = trim($item);
}
?>
232
,
.
4.37 text.txt ,
4.38.
4.38. text.txt
C#
Ruby
Assembler
Haskell
Java
Pascal
JavaScript
Python
Visual Basic
Perl
PHP
C++
Lisp
Fortran
file()
sort() rsort(), ( 4.39).
4.39. text.txt
<?php
//
$filename = "text.txt";
//
$lines = file($filename);
//
sort($lines);
//
//
array_walk($lines, 'trim_array');
//
file_put_contents($filename, implode("\r\n", $lines));
function trim_array(&$item, $key)
{
$item = trim($item);
}
?>
233
4.14.
,
. .
, , ,
(. 4.7).
4.7.
mkdir($pathname [, $mode [,
$recursive [, $context]]])
$pathname $mode.
$recursive
TRUE, $pathname . $context , .
TRUE, FALSE
rmdir($dirname [, $context])
$dirname.
TRUE,
FALSE
getcwd()
chdir ($directory)
,
$directory.
TRUE, FALSE
chroot($directory)
$directory.
TRUE,
FALSE
opendir($path [, $context])
"" , $path
readdir($dir_handle)
.
.
$dir_handle , opendir(). , FALSE
closedir($dir_handle)
$dir_handle, closedir()
rewinddir($dir_handle)
$dir_handle
scandir($directory [,
$sorting_order [, $context]])
$directory
FALSE, $directory .
, $sorting_order TRUE,
glob($pattern [, $flags])
,
$pattern.
$flags
234
,
, .
PHP Web- Apache
, .
getcwd() ( 4.40).
4.40. getcwd()
<?php
//
echo getcwd();
?>
chdir() ( 4.41).
cron- ,
, .
4.41. chdir()
<?php
//
chdir("/var/www/html/test/");
?>
4.42 mkdir()
new. mkdir() ,
.
4.42. mkdir()
<?php
if (mkdir("new", 0700)) echo " ";
else echo " ";
?>
4.15.
, , , ( 4.43).
235
4.43.
<?hp
//
$dir = opendir(".");
//
while (($file = readdir($dir)) !== FALSE) echo "$file<br>";
//
closedir($dir);
?>
$file = readdir($dir) FALSE, , , readdir() FALSE, .
opendir() readdir()
scandir(), :
scandir($directory [, $sorting_order [, $context]])
$directory FALSE,
$directory .
, $sorting_order TRUE,
.
4.44 , .
4.44. scandir()
<?php
$dir = 'dir';
//
$files = scandir($dir);
//
$sort_files = scandir($dir, 1);
//
echo "<pre>";
print_r($files);
print_r(sort_files);
echo "</pre>";
?>
4.44 :
Array
(
[0] => array.php
236
[1] => file.txt
[2] => somedir
)
Array
(
[0] => somedir
[1] => file.txt
[2] => array.php
)
glob(), :
glob($pattern [, $flags])
,
$pattern. $flags
. 4.8, .
4.8. $flags glob()
GLOB_MARK
/ UNIX- \ Windows ,
GLOB_NOSORT
GLOB_NOCHECK
GLOB_NOESCAPE
, *,? $.
. GLOB_NOCHECK
GLOB_BRACE
,
{*.html,*.htm,*.php} , html, htm php
GLOB_ONLYDIR
GLOB_ERR
. GLOB_ERR
4.45 glob().
4.45. glob()
<?php
// HTML- PHP-
$arr = glob("{*.html,*.htm,*.php}", GLOB_BRACE | GLOB_MARK);
237
//
if (is_array($arr))
{
foreach ($arr as $filename)
echo "$filename (".filesize($filename)." )<br>";
}
?>
( 4.46). scan_dir(), , . ,
, .
4.46.
<?php
//////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
//
$dir = opendir($dirname);
//
while (($file = readdir($dir)) !== false)
{
// ,
// $file
if($file != "." && $file != "..")
{
echo "$dirname/$file<br>";
// ,
// scan_dir
if(is_dir("$dirname/$file"))
{
scan_dir("$dirname/$file");
}
}
}
//
closedir($dir);
}
//
$dirname = ".";
238
// ,
//
scan_dir($dirname);
?>
, , .
4.16.
,
.
(. 4.6).
. 4.6.
.
,
.
file_count() ( 4.47).
4.47.
<?php
//////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
//
$dir = opendir($dirname);
//
while (($file = readdir($dir)) !== false)
{
// ,
// $file
if($file != "." && $file != "..")
{
// ,
// scan_dir
if(is_dir("$dirname/$file"))
{
echo "$dirname/$file ".
file_count("$dirname/$file")."<br>";
scan_dir("$dirname/$file");
}
}
}
//
closedir($dir);
}
//////////////////////////////////////////////////////////
// ,
//////////////////////////////////////////////////////////
function file_count($dirname)
{
//
$count = 0;
//
$dir = opendir($dirname);
//
while(($file = readdir($dir)))
{
//
if(is_file("$dirname/$file")) ++$count;
}
//
closedir($dir);
return $count;
}
//
$dirname = "scripts";
// ,
//
scan_dir($dirname);
?>
239
240
4.17.
( 4.48).
4.48.
<?php
// home home2
lowering("home","home2");
//////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////
function lowering($dirname,$dirdestination)
{
//
$dir = opendir($dirname);
//
while (($file = readdir($dir)) !== false)
{
echo $file."<br>";
if(is_file("$dirname/$file"))
{
copy("$dirname/$file.", "$dirdestination/$file");
}
//
if(is_dir("$dirname/$file") &&
$file != "." &&
$file != "..")
{
//
if(!mkdir($dirdestination."/".$file))
{
echo " $dirdestination/$file";
}
// lowering
lowering("$dirname/$file", "$dirdestination/$file");
}
}
//
closedir($dir);
}
?>
241
4.18.
, rmdir() ( 4.49).
4.49. rmdir()
<?php
if (rmdir("c:/temp/test")) echo(" ");
else echo(" ");
?>
242
echo(" ");
}
// temp
full_del_dir("temp");
?>
4.19. ,
,
filesize() ,
.
$size, size_dir() ( 4.51).
4.51. ,
<?php
//
//
function size_dir($directory, $size = 0)
{
$dir = opendir($directory);
while(($file = readdir($dir)))
{
// readdir()
if(is_file("$directory/$file"))
{
$size += filesize("$directory/$file");
}
// readdir()
//
// full_del_dir()
else if (is_dir("$directory/$file") &&
$file != "." &&
$file != "..")
{
size_dir("$directory/$file", $size);
}
}
closedir($dir);
return $size;
}
//
echo size_dir(".");
?>
PHP Web-.
, .
PHP
.
5.1.
PHP ,
, . 5.1
, http://site.dev/
image.jpg image/image.jpg.
5.1. ( 1)
<?php
$content = file_get_contents("http://site.dev/image.jpg");
file_put_contents("image/image.jpg", $contents);
?>
5.1, file_get_
contents() $content,
file_put_contents() .
, copy(),
, ( 5.2).
UNIX-
,
image.
244
5.2. ( 2)
<?php
copy("http://site.dev/image.jpg", "image.jpg");
?>
5.2.
, . . ,
HTTP-. .
(. . ).
, . 5.1,
.
, .
UNIX- , ,
.
fsockopen(),
:
fsockopen($target, $port [, $errno [, $errstr [, $timeout]]])
$target , $port
. ,
FALSE.
$errno $errstr,
. , $timeout
-, . , FALSE.
fsockopen() PHP-,
php.ini php_sockets.dll, ( ;)
extension.
fsockopen() 5.3,
http://www.php.net.
5.3. fsockopen()
<?php
function get_content($hostname, $path)
{
$line = "";
245
// ,
// $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
//
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// HTTP-
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: Close\r\n\r\n";
// HTTP-
fwrite($fp, $headers);
//
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
return $line;
}
$hostname = "www.php.net";
$path = "/";
// .
// ,
set_time_limit(180);
//
echo get_content($hostname, $path);
?>
HTTP-, .
fsockopen() get_content(), : $hostname
, , $path .
, fsockopen() http://, 80.
,
fsockopen(), .
$headers
HTTP- GET.
( 5.4).
246
5.4. , www.php.net
GET / HTTP/1.1\r\n
Host: www.php.net\r\n
Connection: Close\r\n\r\n
fgets()
1 024 , , feof(). .
5.4
(/) GET HTTP/1.1. HTTP- Host
, HTTP- , ( , IP- ). HTTP- Connection .
/ , , /downloads.php,
. HTTP-, GET.
. 5.1. www.php.net
247
HTTP-,
, ,
. HTTP- strstr(),
( ),
( ) ( 5.5).
5.5. HTTP-
<?php
...
$hostname = "www.php.net";
$path = "/";
// .
// ,
set_time_limit(180);
//
$content = get_content($hostname, $path);
echo strstr($content, '<');
?>
5.5 . 5.2. ,
http://www.php.net, , . ,
PHP-.
248
5.3. HTTP-
. 5.2 HTTP-,
, : HTTP-. , .
, .
249
return $out;
}
$hostname = "www.php.net";
$path = "/";
// .
// ,
set_time_limit(180);
//
$out = get_content($hostname, $path);
//
echo "<pre>";
print_r($out);
echo "</pre>";
?>
:
Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sun, 05 Jun 2011 07:19:00 GMT
[2] => Server: Apache/1.3.41 (Unix) PHP/5.2.12RC4-dev
[3] => X-Powered-By: PHP/5.2.12RC4-dev
[4] => Content-language: en
[5] => Set-Cookie: COUNTRY=RUS%2C83.149.47.252; expires=Sun, 12-Jun-2011
07:19:00 GMT; path=/; domain=.php.net
[6] => Last-Modified: Sun, 05 Jun 2011 11:00:27 GMT
[7] => Connection: close
[8] => Transfer-Encoding: chunked
[9] => Content-Type: text/html;charset=utf-8
)
,
( 200). ,
404 (HTTP/1.1 404 Not Found).
Date .
Server Web-. ,
http://www.php.net UNIX,
Web- Apache 1.3.41, PHP 5.2.12.
X-Powered-By , PHP 5.2.12.
HTTP-, X-, , , , ,
, . .
Last-Modified ; , .
250
Content-language ,
.
Set-Cookie cookie COUNTRY
"RUS,83.149.47.252", IP-
.php.net.
downloads http://www.php.net, .
Connection .
Transfer-Encoding ( chuncked) , .
Content-Type (text/html)
(charset=utf-8).
5.6 GET,
HTTP HEAD. ,
5.6 ( 5.7).
5.7. HEAD
<?php
// HTTP-
function get_content($hostname, $path)
{
$line = "";
// ,
// $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
//
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// HTTP-
$headers = "HEAD $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: Close\r\n\r\n";
// HTTP-
fwrite($fp, $headers);
//
while (!feof($fp))
{
$out[] = fgets($fp, 1024);
}
fclose($fp);
}
251
return $out;
}
$hostname = "www.php.net";
$path = "/";
// .
// ,
set_time_limit(180);
//
$out = get_content($hostname, $path);
//
echo "<pre>";
print_r($out);
echo "</pre>";
?>
, PHP get_headers(),
HTTP- ,
HTTP- HEAD.
, true, ,
( 5.8).
5.8. HTTP- get_headers()
<?php
$out = get_headers("http://www.php.net", true);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
5.8 :
Array
(
[0] => HTTP/1.1 200 OK
[Date] => Sun, 05 Jun 2011 08:06:52 GMT
[Server] => Apache/1.3.41 (Unix) PHP/5.2.12RC4-dev
[X-Powered-By] => PHP/5.2.12RC4-dev
[Content-language] => en
252
5.4.
. get_content(),
HTTP- Content-Length ( 5.9).
5.9.
<?php
// HTTP-
$hostname = "http://www.softtime.ru/files/configs.zip";
$out = get_headers($hostname, true);
foreach($out as $header => $value)
{
if($header === "Content-Length")
{
echo " $value";
}
}
?>
:
26421
5.5. CURL
, , PHP CURL (Client URL Library). 5.10
,
CURL.
CURL PHP-, php.ini php_curl.dll,
( ;) c extension. ssleay32.dll libeay32.dll , PHP, ,
PATH, , C:\Windows\system32.
253
curl_setopt() CURLOPT_HEADER
(. . 5.1).
5.10. CURL
<?php
//
$curl = curl_init("http://www.php.net");
//
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//
$content = curl_exec($curl);
// CURL-
curl_close($curl);
//
echo $content;
?>
$curl $option
$value. $option , . 5.15.5. ,
TRUE.
curl_exec(). 5.10 $content (
CURLOPT_RETURNTRANSFER,
curl_setopt()).
curl_exec() CURL-.
5.1. CURL-
CURLOPT_AUTOREFERER
HTTP- Location,
HTTP- Referer
254
5.1 ()
CURLOPT_COOKIESESSION
CURL cookie ( )
CURLOPT_CRLF
UNIX- \n
\r\n
CURLOPT_DNS_USE_GLOBAL_CACHE
DNS-
CURLOPT_FAILONERROR
HTTP- 300
CURLOPT_FILETIME
CURL
CURLOPT_FOLLOWLOCATION
URL (
Location)
CURLOPT_FORBID_REUSE
CURL-
curl_exec();
CURLOPT_FRESH_CONNECT
curl_exec() CURL ,
CURLOPT_FTPAPPEND
FTP ,
CURLOPT_FTPASCII
FTP- ,
(ASCII)
CURLOPT_FTPLISTONLY
TRUE
FTP-
CURLOPT_HEADER
HTTP-
CURLOPT_HTTPPROXYTUNNEL
TRUE -
CURLOPT_MUTE
TRUE CURL
CURLOPT_NETRC
TRUE
~/netrc ( ~ )
CURLOPT_NOBODY
.
, HTTP-
CURLOPT_NOPROGRESS
TRUE
( )
CURLOPT_POST
POST- application/x-www-formurlencoded
CURLOPT_PUT
TRUE
PUT HTTP. CURLOPT_INFILE CURLOPT_INFILESIZE.
, PUT
CURLOPT_RETURNTRANSFER
TRUE CURL ,
255
5.1 ()
CURLOPT_SSL_VERIFYPEER
FALSE
.
CURLOPT_CAINFO. CURLOPT_CAPATH.
CURLOPT_SSL_VERIFYPEER 0, , 1 0 CURLOPT_SSL_VERIFYHOST
( 2)
CURLOPT_UNRESTRICTED_AUTH
TRUE
HTTP Location,
CURLOPT_UPLOAD
TRUE
CURLOPT_VERBOSE
TRUE
5.2. CURL-
CURLOPT_BUFFERSIZE
CURLOPT_CONNECTTIMEOUT
.
0
CURLOPT_DNS_CACHE_TIMEOUT
,
DNS-. 120 (2 )
CURLOPT_HTTP_VERSION
HTTP-; :
CURL_HTTP_VERSION_NONE ( ),
CURL_HTTP_VERSION_1_0 ( HTTP 1.0),
CURL_HTTP_VERSION_1_1 ( HTTP 1.1)
CURLOPT_HTTPAUTH
() HTTP-; :
CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE,
CURLAUTH_NTLM, CURLAUTH_ANY CURLAUTH_ANYSAFE
CURLOPT_INFILESIZE
CURLOPT_LOW_SPEED_LIMIT
. ,
CURLOPT_LOW_SPEED_TIME, ,
CURLOPT_LOW_SPEED_TIME
,
CURLOPT_LOW_SPEED_LIMIT,
CURLOPT_MAXCONNECTS
CURLOPT_MAXREDIRS
Location.
CURLOPT_FOLLOWLOCATION
256
5.2 ()
CURLOPT_PORT
CURLOPT_PROXYAUTH
() -;
, CURLOPT_HTTPAUTH
CURLOPT_PROXYPORT
-;
CURLOPT_PROXY
CURLOPT_PROXYTYPE
-:
HTTP- (CURLPROXY_HTTP)
(CURLPROXY_SOCKS5)
CURLOPT_RESUME_FROM
CURLOPT_SSL_VERIFYHOST
,
( SSL-): 1 ; 2 ,
CURLOPT_SSLVERSION
SSL; 2 3.
SSL ,
CURLOPT_TIMECONDITION
CURLOPT_TIMEVALUE.
: TIMECOND_IFMODSINCE
TIMECOND_ISUNMODSINCE.
HTTP
CURLOPT_TIMEOUT
CURLOPT_TIMEVALUE
, 1 1970 .
CURLOPT_TIMECONDITION ( TIMECOND_IFMODSINCE)
5.3. CURL-
CURLOPT_CAINFO
, ,
.
CURLOPT_SSL_VERIFYPEER
CURLOPT_CAPATH
. CURLOPT_SSL_VERIFYPEER
CURLOPT_COOKIE
HTTP- Cookie.
cookie
curl_setopt()
CURLOPT_COOKIEFILE
, cookie.
Netscape, HTTP-
CURLOPT_COOKIEJAR
, cookie,
257
5.3 ()
CURLOPT_CUSTOMREQUEST
, HTTP- GET
HEAD. DELETE , . GET,
POST . .
CURLOPT_ENCODING
HTTP- Accept-Encoding,
HTTP-. : identity, deflate,
gzip
CURLOPT_FTPPORT
CURLOPT_INTERFACE
.
, IP-
CURLOPT_KRB4LEVEL
CURLOPT_POSTFIELDS
POST-
CURLOPT_PROXY
-,
CURLOPT_PROXYUSERPWD
- HTTP
[username]:[password]
CURLOPT_RANDOM_FILE
,
SSL
CURLOPT_RANGE
"X-Y"
( X Y ). , : "X-". HTTP ,
"X-Y,N-M"
CURLOPT_REFERER
HTTP- Referer
CURLOPT_SSL_CIPHER_LIST
CURLOPT_SSLCERT
SSL- PEM
CURLOPT_SSLCERTPASSWD
SSL-,
CURLOPT_SSLCERT
CURLOPT_SSLCERTTYPE
. : PEM
( ), DER ENG
CURLOPT_SSLKEY
, SSL-
CURLOPT_SSLKEYPASSWD
,
SSL-
CURLOPT_SSLKEYTYPE
SSL-. :
PEM ( ), DER ENG
CURLOPT_URL
URL, .
curl_init()
258
5.3 ()
CURLOPT_USERAGENT
HTTP- User-Agent.
CURLOPT_USERPWD
[username]:[password]
5.4. CURL-,
CURLOPT_HTTP200ALIASES
HTTP- 200 (
)
CURLOPT_HTTPHEADER
HTTP-
CURLOPT_POSTQUOTE
FTP-,
CURLOPT_QUOTE
FTP-,
5.5. CURL-,
, fopen()
CURLOPT_FILE
CURLOPT_INFILE
CURLOPT_WRITEHEADER
HTTP-
CURLOPT_STDERR
CURLOPT_RETURNTRANSFER, CURLOPT_FILE
CURLOPT_WRITEHEADER, curl_exec() . , 5.10 , ( 5.11).
5.11.
<?php
//
$curl = curl_init("http://www.php.net");
//
echo curl_exec($curl);
// CURL-
curl_close($curl);
?>
259
HTTP- CURL
, 5.12.
5.12. CURL
<?php
function get_content($hostname)
{
//
$curl = curl_init($hostname);
//
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// HTTP-
curl_setopt($curl, CURLOPT_HEADER, 1);
// HTTP-
curl_setopt($curl, CURLOPT_NOBODY, 1);
// HTTP-
$content = curl_exec($curl);
// CURL-
curl_close($curl);
// $content
return explode("\r\n", $content);
}
$hostname = "http://www.php.net";
$out = get_content($hostname);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
curl_setopt()
CURLOPT_HEADER CURLOPT_NOBODY,
HTTP-, HTTP-.
5.6.
: , , (
). ,
, ,
260
13 ( ). 5.13
wwv.nist.gov.
5.13.
<?php
$fp = fsockopen("wwv.nist.gov",
13,
$errno,
$errstr,
5);
if (!$fp) exit("ERROR: $errno $errstr");
else echo fread($fp, 26);
fclose($fp);
?>
5.13 :
55717 11-06-05 10:17:45 5
5.7. Yandex
Yandex, GET- text http://www.yandex.ru/
yandsearch. , " PHP" (
urlendode()):
http://www.yandex.ru/yandsearch?text=%D4%EE%F0%F3%EC+PHP
5.14 , Yandex .
,
: url name .
5.14. (Yandex)
<?php
// Yandex
function yandex($url)
{
//
$result = array();
//
$contents = file_get_contents($url);
//
$pattern =
"|<a.*?tabindex=\"[\d]+\"(.*?)href=\"([^\"]+)\"[^>]+>(.*?)</a>|is";
261
//
preg_match_all($pattern, $contents, $out, PREG_PATTERN_ORDER);
//
for($i = 0; $i < count($out[2]); $i++)
{
$result[$i]['url'] = $out[2][$i];
$result[$i]['name'] = $out[3][$i];
}
return $result;
}
//
$url = "http://www.yandex.ru/yandsearch?text=%D4%EE%F0%F3%EC+PHP";
//
$arr = yandex($url);
echo "<pre>";
print_r($arr);
echo "<pre>";
?>
,
, tabindex.
5.8. Google
Yandex, GET- q http://www.google.ru/
search. " PHP" :
http://www.google.ru/search?q=%D4%EE%F0%F3%EC+PHP&complete=1&hl=ru&sa=N
5.15 , Google :
(url name ).
5.15. (Google)
<?php
// Google
function google($url)
{
//
$result = array();
//
$contents = file_get_contents($url);
//
$pattern =
'|<h3 class="r"><a href=\"([^\"]+)\"[^>]*>(.+)</a>|isU';
262
//
preg_match_all($pattern, $contents, $out, PREG_PATTERN_ORDER);
//
for($i = 0; $i < count($out[1]); $i++)
{
$result[$i]['url'] = $out[1][$i];
$result[$i]['name'] = $out[2][$i];
}
return $result;
}
//
$url = "http://www.google.ru/search?q=".urlencode(" PHP").
"&complete=1&hl=ru&sa=N";
//
$arr = google($url);
echo "<pre>";
print_r($arr);
echo "<pre>";
?>
5.9.
HTML-, RSS-. , , XML-, , . .
XML- , HTML-. XML-,
,
HTML-.
. http://
www.cbr.ru/currency_base/D_print.asp?date_req=$date, $date //, : http://www.cbr.ru/
currency_base/D_print.asp?date_req=01/06/2011.
,
http://www.cbr.ru/scripts/Root.asp?Prtid=SXML.
HTML-, XML-
http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date.
XML-, (. 5.3),
, 5.16.
263
. 5.3. 1 2011 .
5.16. XML-
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name> </Name>
<Value>21,4176</Value>
</Valute>
<NumCode> <CharCode> .
<Name> . <Nominal>
<Value> .
<Nominal>, , , 10.
XML- ( 5.17).
5.17. XML-
<?php
// XML-
$url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".
date("d/m/Y");
//
$content = file_get_contents($url);
264
//
$pattern = "|<valute
id=\"([^\"]+)\">[\s]*<NumCode>([^<]+)</NumCode>[\s]*<CharCode>([^<]+)</CharCode
>[\s]*<Nominal>([^<]+)</Nominal>[\s]*<Name>([^<]+)</Name>[\s]*<Value>([^<]+)</V
alue>[\s]*</Valute>|is";
preg_match_all($pattern, $content, $out);
echo "<table border=1>";
echo "<tr>
<td>ID</td>
<td> </td>
<td> </td>
<td></td>
<td></td>
<td></td>
</tr>";
for($i = 0; $i < count($out[1]); $i++)
{
echo "<tr>
<td>".$out[1][$i]."</td>
<td>".$out[2][$i]."</td>
<td>".$out[3][$i]."</td>
<td>".$out[4][$i]."</td>
<td>".$out[5][$i]."</td>
<td>".$out[6][$i]."</td>
</tr>";
}
echo "</table>";
?>
XML-, $out.
, . 5.4.
5.18 , , .
5.18.
<?php
// XML-
$url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".
date("d/m/Y");
//
$content = file_get_contents($url);
//
$pattern = "|<valute
id=\"([^\"]+)\">[\s]*<NumCode>([^<]+)</NumCode>[\s]*<CharCode>
([^<]+)</CharCode>[\s]*<Nominal>([^<]+)</Nominal>[\s]*<Name>([^<]+)</Name>[\s]*
<Value>([^<]+)</Value>[\s]*</Valute>|is";
265
str_replace(), , .
. 5.4. 5.17
XML-
, XML-.
XML-
simplexml_load_file(), ,
XML-. 5.19 ,
.
5.19.
<?php
// XML-
$url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".
date("d/m/Y");
266
//
$xml = simplexml_load_file($url);
foreach($xml as $index => $value)
{
if($value->CharCode == "USD")
echo sprintf(" %3.2f<br>", $value->Value);
if($value->CharCode == "EUR")
echo sprintf(" %3.2f<br>", $value->Value);
}
?>
5.10. POST
, name
( 5.20).
5.20. HTML-
<form action='handler.php' method='post'>
: <input type='text' name='name'><br>
: <input type='text' name='pass'><br>
<input type='submit' value=''>
</form>
, name pass
HTML-. HTML- POST-,
.
.
POST HTTP-
POST /path HTTP/1.1 Content-Length,
.
POST, GET, ,
, .
GET: = -
267
, , ,
urlencode().
, POST , 5.22.
5.22. POST
<?php
$hostname = "localhost";
$path = "/puzzles/handler.php";
$line = "";
// ,
// $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
//
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// HTTP-
$data =
"name=".urlencode("")."&pass=".urlencode("")."\r\n\r\n";
// HTTP-
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
// HTTP-
fwrite($fp, $headers.$data);
//
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
:
HTTP/1.1 200 OK
Date: Wed, 16 Nov 2005 18:00:44 GMT
268
Server: Apache/1.3.33 (Win32)
X-Powered-By: PHP/5.0.4
Transfer-Encoding: chunked
Content-Type: text/html
22
HTTP-,
HTML-.
. , .
HTML-, .
, "" , .
5.23
CURL.
5.23. POST- CURL
<?php
//
$curl = curl_init("http://localhost/puzzles/5/handler.php");
// POST
curl_setopt($curl, CURLOPT_POST, 1);
// POST-
$data = "name=".urlencode("").
"&pass=".urlencode("")."\r\n\r\n";
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//
curl_exec($curl);
// CURL-
curl_close($curl);
?>
CURL ,
POST, CURLOPT_POST. POST- CURLOPT_POSTFIELDS.
269
5.11.
,
$_SERVER['HTTP_REFERER']. , 1.php
2.php (<a href='2.php'></a>), 2.php
5.24, , . 5.5.
5.24.
<?php
echo " ".$_SERVER['HTTP_REFERER'];
?>
. 5.5.
270
</tr>
</form>
</table>
.
,
Web- .
, :
HTTP- Referer ( 5.27) CURL,
curl_setopt() CURLOPT_REFERER ( 5.28).
5.27.
<?php
$hostname = "localhost";
$path = "/test/handler.php";
$line = "";
// POST (admin),
// (admin), session_id ($SID)
// cookie PHPSESSID
// ,
// $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
//
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// POST-
$data = "name=admin&pass=admin&\r\n\r\n";
// HTTP-
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n";
//
$headers .= "Referer: http://localhost/test/index.php\r\n";
$headers .= "Connection: Close\r\n\r\n";
// HTTP-
fwrite($fp, $headers.$data);
//
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
5.28. CURL
<?php
//
$curl = curl_init("http://localhost/test/handler.php");
// POST
curl_setopt($curl, CURLOPT_POST, 1);
// POST-
$data = "name=admin&pass=admin&\r\n\r\n";
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//
curl_setopt($curl, CURLOPT_REFERER,
"http://localhost/test/index.php");
//
curl_exec($curl);
// CURL-
curl_close($curl);
?>
271
272
5.12.
PHP-
USER_AGENT : PHP 5.3.
php.ini user_agent
(. . 2.1.11).
$_SERVER['USER_AGENT']. , . . HTTP- User-Agent. HTTP, , . 5.29 , , ,
Windows XP,
Internet Explorer 6.0. HTTP- User-Agent :
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
5.29.
<?php
$hostname = "localhost";
$path = "/test/index.php";
$line = "";
// ,
// $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
//
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// HTTP-
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
// ,
// Windows XP
$headers .= "User-Agent: Mozilla/4.0 ".
"(compatible; MSIE 6.0; Windows NT 5.1)\r\n";
$headers .= "Connection: Close\r\n\r\n";
// HTTP-
fwrite($fp, $headers);
//
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
273
fclose($fp);
}
echo $line;
?>
5.13. cookie
cookie , , ,
( cookie)
.
HTTP- Cookie cookie.
HTTP- , cookie
, HTTP- :
Cookie: name1=value1; name2=value2; ...
274
if (isset($_COOKIE['admin']))
{
echo ", $_COOKIE[name] !<br>";
}
if (isset($_COOKIE['editor']))
{
echo ", $_COOKIE[name] !<br>";
}
if (isset($_COOKIE['user']))
{
echo ", $_COOKIE[name] !<br>";
}
}
?>
, ,
5.32.
, . .
.
SID, , , cookie.
, , , (, XSS-),
.
5.32. cookie
<?php
$hostname = "localhost";
$path = "/1.php";
// ,
// $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
//
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// HTTP-
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
// cookie
$headers .= "Cookie: name=cheops; admin=1;\r\n";
$headers .= "Connection: Close\r\n\r\n";
// HTTP-
fwrite($fp, $headers);
275
//
$line = "";
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
cookie, HTTP-:
Cookie: name=cheops; admin=1;\r\n
. 5.6.
. 5.7.
276
:
cookie admin editor user. ,
5.32
. HTTP- :
Cookie: name=cheops; admin=1; editor=1; user=1;\r\n
. 5.7.
5.14. IP-
IP-, , DNS- IP-. HTTP 1.1
IP- .
fsockopen(), , PHP
, IP-
(. 5.6). , Whois-,
IP-.
5.6. IP-
heckdnsrr($hostname [, $type])
DNS- $type
$hostname
gethostbyname($hostname)
$hostname IP-
gethostbynamel($hostname)
$hostname IP-
gethostbyaddr($ip_address)
IP- $ip_address
ip2long($ip_address)
IP- $ip_address
long2ip($proper_address)
IP- $proper_address
gethostbyname() , , IP-.
:
gethostbyname($hostname)
5.33
http://www.yandex.ru.
IP-
277
5.33. gethostbyname()
<?php
$hostname = "www.yandex.ru";
$ip_address = gethostbyname($hostname);
echo "IP- $hostname: $ip_address";
?>
, 5.33 :
IP- www.yandex.ru: 93.158.134.203
IP-; . IP-,
, gethostbynamel(),
gethostbyname(). :
gethostbynamel($hostname)
,
DNS . DNS, ,
DNS- .
IP- gethostbynamel()
( 5.34).
5.34. gethostbynamel()
<?php
$hostname = "www.yandex.ru";
$ip_address = gethostbynamel($hostname);
for($i = 0; $i < count($ip_address); $i++)
{
echo "IP- $hostname: {$ip_address[$i]}<br>";
}
?>
, 5.34 :
IP-
IP-
IP-
IP-
IP-
IP-
IP-
www.yandex.ru:
www.yandex.ru:
www.yandex.ru:
www.yandex.ru:
www.yandex.ru:
www.yandex.ru:
www.yandex.ru:
93.158.134.203
213.180.204.3
77.88.21.3
87.250.250.3
87.250.250.203
87.250.251.3
93.158.134.3
278
5.15.
IP-
gethostbyaddr() IP- $ip_address
. :
gethostbyaddr($ip_address)
5.35 gethostbyaddr() .
5.35. gethostbyaddr()
<?php
$ip_address = "127.0.0.1";
$hostname = gethostbyaddr($ip_address);
echo " IP- $ip_address: $hostname";
?>
5.35 :
IP- 127.0.0.1: localhost
5.16. IP-
Whois ,
IP-. IP- 43
Whois-. Whois- IP . whois.arin.net.
Whois- IP-,
ReferralServer,
Whois-, IP-. Whois- whois(),
: Whois- IP-.
,
( 5.36).
5.36.
<center>
<form method='post'>
<input type='text' name='ip' size='35'
value='<?php
if (!empty($_POST['ip'])) echo htmlspecialchars($_POST['ip']);
?>'>
<input type='submit' value=' IP-'>
279
</form>
</center>
<?php
if (!empty($_POST['ip'])) echo whois("whois.arin.net",$_POST['ip']);
function whois($url,$ip)
{
// TCP,
// "whois.arin.net" 43.
// $sock.
$sock = fsockopen($url, 43, $errno, $errstr);
if (!$sock) exit("$errno($errstr)");
else
{
echo $url."<br>";
// $_POST["ip"]
// .
fputs ($sock, $ip."\r\n");
//
$text = "";
while (!feof($sock))
{
$text .= fgets ($sock, 128)."<br>";
}
//
fclose ($sock);
//
$pattern = "|ReferralServer: whois://([^\n<:]+)|i";
preg_match($pattern, $text, $out);
if (!empty($out[1])) return whois($out[1], $ip);
else return $text;
}
}
?>
whois.arin.net,
.
Whois-, . 213.115.162.82,
AB MySQL, ,
. 5.8.
. 5.8, Whois-: whois.arin.net
whois.ripe.net.
IP- 192.131.90.161, http://
www.w3c.org, , . 5.9. , IP- Whois-
whois.apnic.net.
280
281
5.17.
PHP mail(), :
mail($to, $subject, $body [, $headers] [, $parameters])
:
$to ;
$subject ;
$message ;
$headers , ;
$parameters , .
$headers,
.
(text/plain) HTML- (text/html)
.
Content-Type charset .
Content-Type: text/html; charset=UTF-8\r\n
cp1251 UTF-8
windows-1251.
, , , , 5.37.
5.37. mail()
<?php
$theme = " ";
$message = "<html>
<head></head>
<body>
".date("d.m.Y H:i:s")."<br>
".filesize($_SERVER['PHP_SELF'])."
</body>
</html>";
$headers = "Content-Type: text/html; charset=UTF-8\r\n";
if(mail($to, $subject, $message, $headers))
{
echo " ";
}
282
else
{
echo " ";
}
?>
.
From:
From: name <e-mail>
name ,
, e-mail .
$headers
( 5.38).
5.38.
<?php
$headers = "Content-Type: text/html; charset=KOI8-R\r\n";
$headers .= "From: server <someone@somewhere.ru>\r\n\r\n";
?>
, ,
server someone@somewhere.ru.
5.18.
,
.
HTML-, mail_to,
mail_subject, mail_msg
, file , HTML- ( 5.39).
5.39. HTML-
<?php
if(!empty($_POST))
{
// HTML-
include "handler.php";
}
?>
283
<table>
<form enctype='multipart/form-data' method='post'>
<tr>
<td width=50%>To:</td>
<td align='right'>
<input type='text' name='mail_to' maxlength='32'>
</td>
</tr>
<tr>
<td width=50%>Subject:</td>
<td align='right'>
<input type='text' name='mail_subject' maxlength='64'>
</td>
</tr>
<tr>
<td colspan='2'>
:<br><textarea cols='50' rows='8' name='mail_msg'></textarea>
</td>
</tr>
<tr>
<td width='50%'>Photo:</td>
<td align='right'>
<input type='file' name='mail_file' maxlength='64'>
</td>
</tr>
<tr><td colspan='2'><input type='submit' value=''></td></tr>
</form>
</table>
HTML- . 5.10.
handler.php, ( 5.40).
5.40. HTML-
<?php
if(empty($_POST['mail_to'])) exit(" ");
//
$pattern = "/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$/i";
if (!preg_match($pattern, $_POST['mail_to']))
{
exit(" somebody@server.com");
}
$_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to']));
$_POST['mail_subject'] =
htmlspecialchars(stripslashes($_POST['mail_subject']));
284
$_POST['mail_msg'] =
htmlspecialchars(stripslashes($_POST['mail_msg']));
$picture = "";
//
if (!empty($_FILES['mail_file']['tmp_name']))
{
//
$path = $_FILES['mail_file']['name'];
if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
}
$thm = $_POST['mail_subject'];
$msg = $_POST['mail_msg'];
$mail_to = $_POST['mail_to'];
//
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);
//
function send_mail($to, $thm, $html, $path)
{
$fp = fopen($path,"r");
if (!$fp)
{
print " $path ";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);
$boundary = "--".md5(uniqid(time())); //
$headers .= "MIME-Version: 1.0\n";
$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$multipart .= "--$boundary\n";
$kod = 'utf-8'; // $kod = 'windows-1251';
$multipart .= "Content-Type: text/html; charset=$kod\n";
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
$multipart .= "$html\n\n";
$message_part = "--$boundary\n";
$message_part .= "Content-Type: application/octet-stream\n";
$message_part .= "Content-Transfer-Encoding: base64\n";
$message_part .= "Content-Disposition: attachment; filename =
\"".$path."\"\n\n";
$message_part .= chunk_split(base64_encode($file))."\n";
$multipart .= $message_part."--$boundary--\n";
if(!mail($to, $thm, $multipart, $headers))
{
285
exit(" , ");
}
}
//
@header("Location: ".$_SERVER['PHP_SELF']);
?>
. 5.10. HTML-
,
. , mail().
,
send_mail(). send_mail()
mail(). ,
.
.
5.19.
, HTML, , 5.41.
286
5.41.
<?php
function htmlimgmail($mail_to, $thema, $html, $path)
{
$EOL = "\n";
$boundary
= "--".md5(uniqid(time()));
$headers
= "MIME-Version: 1.0;$EOL";
$headers .= "From: somebody@somewhere.ru$EOL";
$headers
.= "Content-Type: multipart/related; ".
"boundary=\"$boundary\"$EOL";
$multipart
$multipart
$multipart
$multipart
if($EOL ==
$multipart
= "--{$boundary}$EOL";
.= "Content-Type: text/html; charset=koi8-r$EOL";
.= "Content-Transfer-Encoding: 8bit$EOL";
.= $EOL;
"\n") $multipart .= str_replace("\r\n", $EOL, $html);
.= $EOL;
if (!empty($path))
{
for($i = 0; $i < count($path); $i++)
{
$file = file_get_contents($path[$i]);
$name = basename($path[$i]);
$multipart .= "$EOL--$boundary$EOL";
$multipart .= "Content-Type: image/jpeg; name=\"$name\"$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= "Content-ID: <".md5($name).">$EOL";
$multipart .= $EOL;
$multipart .= chunk_split(base64_encode($file), 76, $EOL);
}
}
$multipart .= "$EOL--$boundary--$EOL";
if(!is_array($mail_to))
{
//
if(!mail($mail_to, $thema, $multipart, $headers))
return False;
else
return True;
exit;
}
else
{
//
foreach($mail_to as $mail)
287
{
mail($mail, $thema, $multipart, $headers);
}
}
}
?>
MySQL
.
, , ,
. . , (SQL). ,
. PHP MySQL.
PHP ,
, Oracle, MS SQL, Sybase . .
6.1. SQL
() . , , . , ().
, ,
.
. http://softtime.ru/forum/
index.php?id_forum=3.
,
, SQL (Structured Query Language,
).
, SQL " ",
, -
MySQL
289
. SQL ,
, :
( );
( -
);
(//);
(
, );
( );
.
6.2. ,
MySQL data.
, . ,
, ,
, .
. 6.1 .
6.1.
db
db
290
6.1 ()
SHOW DATABASES;
USE db;
db
db new
db
USE SQL,
mysql. PHP- MySQL mysql_select_db().
CREATE DATABASE
DEFAULT CHARACTER SET.
, . 6.1
wet Windows-1251.
, MySQL,
SHOW CHARACTER SET.
6.1. Windows-1251
CREATE DATABASE wet DEFAULT CHARACTER SET cp1251;
,
ALTER DATABASE ( 6.2).
6.2. UTF-8
ALTER DATABASE wet DEFAULT CHARACTER SET utf8;
DROP DATABASE.
, , IF EXISTS,
MySQL
291
, ( 6.4).
IF EXISTS , .
6.4.
DROP DATABASE IF EXISTS db;
, CREATE DATABASE
,
IF NOT EXISTS, ,
( 6.5).
6.5.
CREATE DATABASE IF NOT EXISTS wet;
6.3. ,
, .
: ,
db.tbl, tbl.
, USE
mysql_select_db(). , .
. 6.2 .
6.2.
tbl
tbl
tbl
tbl new
tbl
tbl
SHOW TABLES;
6.6 tbl,
: id name.
292
6.6.
CREATE TABLE tbl (
id INT,
name TEXT
);
, , . . 6.3 .
.
UNSIGNED.
, , , .
6.3.
TINYINT
SMALLINT
MEDIUMINT
INT, INTEGER
BIGINT
BIT
1 64
BOOL, BOOLEAN
0, 1
, :
, DECIMAL(5,2) 5
, ,
99,99 999,99
FLOAT
1,175494351 1039,
3,402823466 1038
DOUBLE, REAL,
2,2250738585072014 10308,
1,797693134862315 10308
DOUBLE PRECISION
MySQL
293
MySQL , , INT(11).
, , mysql.
. 6.4 , BLOB-, .
6.4.
CHAR
,
, , CHAR(255)
255 ( 65 535). ,
VARCHAR
VARCHAR
, CHAR,
, ,
TINYBLOB, TINYTEXT
, 255
BLOB, TEXT
, 65 535
MEDIUMBLOB, MEDIUMTEXT
, 2241
LONGBLOB, LONGTEXT
, 2321
ENUM('value1','value2',...)
SET('value1','value2',...)
(. 6.5).
6.5.
DATE
, '1000-01-01'
'9999-12-31'
TIME
, '828:59:59'
'828:59:59'
DATATIME
,
'1000-01-01 00:00:00' '9999-12-31 00:00:00'
TIMESTAMP
,
'1970-01-01 00:00:00' '2038-12-31 59:59:59'. INSERT UPDATE
YEAR
CREATE TABLE, . ,
294
6.7.
CREATE TABLE comments (
id_position INT,
name TINYTEXT,
comment TEXT,
putdate DATETIME,
hide ENUM('show','hide')
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE,
6.8. DROP DATABASE IF EXISTS
.
6.8.
DROP TABLE IF EXISTS comments;
6.9. comments
ALTER TABLE comments ADD COLUMN author TEXT AFTER id_position;
DESCRIBE,
( 6.10).
MySQL
295
6.10.
DESCRIBE comments;
+-------------+---------------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| id_position | int(11)
| NO
|
| NULL
|
|
| author
| text
| NO
|
| NULL
|
|
| name
| tinytext
| NO
|
| NULL
|
|
| comment
| text
| NO
|
| NULL
|
|
| putdate
| datetime
| NO
|
| NULL
|
|
| hide
| enum('show','hide') | NO
|
| NULL
|
|
+-------------+---------------------+------+-----+---------+-------+
MODIFY.
6.12 id_position INT BIGING.
6.12.
ALTER TABLE comments MODIFY id_position BIGINT;
6.4. .
INSERT
INSERT INTO tbl VALUES().
. CREATE TABLE
.
tbl, , id
5, id_cat NULL ( 6.14).
296
6.14. tbl
CREATE TABLE tbl (
id INT(11) NOT NULL DEFAULT '5',
id_cat INT(11) DEFAULT NULL
);
INSERT, ( 6.15).
6.15. INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
tbl
tbl
tbl
tbl
, INSERT
.
SELECT ( 6.16),
. 6.6.
6.16.
SELECT * FROM tbl;
+----+--------+
| id | id_cat |
+----+--------+
| 10 |
20 |
| 20 |
10 |
| 30 |
NULL |
| 5 |
NULL |
+----+--------+
MySQL- NOW(),
.
MySQL
297
INSERT ,
VALUES ,
( 6.18).
6.18.
INSERT INTO comments VALUES
(1, '', ' ', NOW(), 'show'),
(2, '', ' ', NOW(), 'show');
6.5.
, ,
. .
MySQL . PRIMARY KEY AUTO_INCREMENT.
NULL
0 ,
, . 6.19 tbl, id name. id
AUTO_INCREMENT.
6.19. AUTO_INCREMENT
CREATE TABLE tbl (
id INT(11) NOT NULL AUTO_INCREMENT,
name TINYTEXT,
PRIMARY KEY (id)
) DEFAULT CHARSET=cp1251;
INSERT INTO tbl VALUES (NULL, '');
INSERT INTO tbl VALUES (NULL, ' ');
INSERT INTO tbl VALUES (NULL, '');
SELECT * FROM tbl;
+----+-------------------+
| id | name
|
+----+-------------------+
| 1 |
|
| 2 | |
| 3 |
|
+----+-------------------+
,
AUTO_INCREMENT ( -
298
).
MySQL LAST_INSERT_ID(), 6.20.
PHP mysql_insert_id().
6.20.
SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|
3 |
+------------------+
6.6. . SELECT
SELECT.
6.19. SELECT
*,
, FROM . * . tbl,
6.19, SELECT, ( 6.21).
6.21. SELECT
SELECT id, name FROM tbl;
+----+-------------------+
| id | name
|
+----+-------------------+
| 1 |
|
| 2 | |
| 3 |
|
+----+-------------------+
6.6.1. .
AS
SELECT (
). 6.22 SELECT- id
MySQL
299
100, NOW(),
.
6.22.
SELECT id + 100, name, NOW() FROM tbl;
+----------+-------------------+---------------------+
| id + 100 | name
| NOW()
|
+----------+-------------------+---------------------+
|
101 |
| 2011-06-18 13:26:46 |
|
102 | | 2011-06-18 13:26:46 |
|
103 |
| 2011-06-18 13:26:46 |
+----------+-------------------+---------------------+
SELECT-.
,
. MySQL , AS ( 6.23).
6.23.
SELECT
id + 100 AS id,
name AS catalog,
NOW() AS time
FROM tbl;
+-----+-------------------+---------------------+
| id | catalog
| time
|
+-----+-------------------+---------------------+
| 101 |
| 2011-06-18 13:35:16 |
| 102 | | 2011-06-18 13:35:16 |
| 103 |
| 2011-06-18 13:35:16 |
+-----+-------------------+---------------------+
6.6.2. .
WHERE
, , , ,
. SQL- SELECT
WHERE, . ,
, .
6.24 tbl ,
id 1.
300
SQL PHP,
, " " != SQL <>. () SQL AND (OR).
6.24.
SELECT * FROM tbl
WHERE id > 1;
+----+-------------------+
| id | name
|
+----+-------------------+
| 2 | |
| 3 |
|
+----+-------------------+
,
OR AND. 6.25 id 1 name 15.
name MySQL- LENGTH().
6.25.
SELECT * FROM tbl
WHERE
id > 1 AND
LENGTH(name) < 15;
+----+---------------+
| id | name
|
+----+---------------+
| 3 | |
+----+---------------+
6.6.3. .
ORDER BY
, . ,
, , , .
, , , , ,
, . ,
, -
MySQL
301
. ,
. , ORDER BY. 6.26
tbl name.
ALTER TABLE , ALTER TABLE tbl ORDER BY id.
6.26. ORDER BY
SELECT * FROM tbl
ORDER BY name;
+----+-------------------+
| id | name
|
+----+-------------------+
| 3 |
|
| 2 | |
| 1 |
|
+----+-------------------+
DESC, .
6.6.4.
. ORDER BY
RAND() ( 6.27).
6.27.
SELECT * FROM tbl
ORDER BY RAND();
+----+-------------------+
| id | name
|
+----+-------------------+
| 2 | |
| 3 |
|
| 1 |
|
+----+-------------------+
6.6.5. . LIMIT
.
,
302
. ,
,
. SELECT
LIMIT. 6.28 tbl
.
6.28. LIMIT
SELECT * FROM tbl
ORDER BY id
LIMIT 2;
+----+-------------------+
| id | name
|
+----+-------------------+
| 1 |
|
| 2 | |
+----+-------------------+
LIMIT , ,
. ,
, ( 6.28).
6.29. LIMIT
SELECT * FROM tbl
ORDER BY id
LIMIT 2, 2;
+----+---------------+
| id | name
|
+----+---------------+
| 3 | |
+----+---------------+
6.7. .
UPDATE
. 6.30 name tbl
, id 1.
6.30 WHERE-,
name tbl.
MySQL
303
6.30. UPDATE
UPDATE tbl SET name = '1'
WHERE id = 1;
SELECT * FROM tbl;
+----+-------------------+
| id | name
|
+----+-------------------+
| 1 | 1
|
| 2 | |
| 3 |
|
+----+-------------------+
UPDATE .
SET ( 6.31).
UPDATE c ORDER BY LIMIT .
6.31. UPDATE
UPDATE tbl
SET
name = '',
id = 100
WHERE id = 1;
SELECT * FROM tbl;
+-----+-------------------+
| id | name
|
+-----+-------------------+
| 100 |
|
|
2 | |
|
3 |
|
+-----+-------------------+
6.8. .
DELETE
DELETE. 6.32
3 id .
DELETE c ORDER BY LIMIT .
304
6.32. DELETE
DELETE FROM tbl
WHERE id = 3;
SELECT * FROM tbl;
+-----+-------------------+
| id | name
|
+-----+-------------------+
| 100 |
|
|
2 | |
+-----+-------------------+
MySQL
MySQL , PHP.
7.1.
, . . . .
, ,
. , , . , . . , .
MySQL :
.
, , . . ;
;
,
;
TEXT,
.
, . ,
, ENUM SET. .
, ,
, /. id_position,
id_catalog, number :
306
SELECT * FROM tbl
WHERE id_position = 3 AND id_catalog = 2 AND number > 15;
SELECT * FROM tbl
WHERE id_position = 3 AND id_catalog = 2;
SELECT * FROM tbl
WHERE id_position = 3;
, :
SELECT * FROM tbl
WHERE id_catalog = 2 AND number > 15;
, , SELECT-,
INSERT, DELETE UPDATE (
).
PRIMARY KEY, .
. , , PRIMARY KEY, NULL.
PRIMARY KEY .
7.1 tbl,
id.
, ,
.
7.1.
CREATE TABLE tbl (
id INT(11) NOT NULL PRIMARY KEY,
name TINYTEXT NOT NULL
)
, 7.2.
7.2.
CREATE TABLE tbl (
id INT(11) NOT NULL,
name TINYTEXT NOT NULL,
PRIMARY KEY(id)
)
MySQL
307
. , . ,
, . INDEX KEY. , , UNIQUE, . . UNIQUE INDEX UNIQUE KEY.
7.3 CREATE TABLE, tbl, id id_tbl id_cat.
7.3. ,
CREATE TABLE tbl (
id INT(11) NOT NULL AUTO_INCREMENT,
id_tbl INT(11) NOT NULL DEFAULT '0',
id_cat INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
KEY id_tbl (id_tbl),
KEY id_cat (id_cat)
);
, , :
KEY first (id),
KEY second (id_cat)
, .
INDEX KEY.
7.2.
MySQL , . , .
SHOW
CHARACTER SET ( 7.4).
308
7.4.
SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description
| Default collation
| Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5
| Big5 Traditional Chinese
| big5_chinese_ci
|
2 |
...
| koi8r
| KOI8-R Relcom Russian
| koi8r_general_ci
|
1 |
...
| utf8
| UTF-8 Unicode
| utf8_general_ci
|
3 |
| cp866
| DOS Russian
| cp866_general_ci
|
1 |
| cp1251
| Windows Cyrillic
| cp1251_general_ci
|
1 |
...
| eucjpms | UJIS for Windows Japanese
| eucjpms_japanese_ci |
3 |
+----------+-----------------------------+---------------------+--------+
,
, , , ,
.
SHOW COLLATION . , LIKE,
cp1251, Windows- ( 7.5).
7.5. , Windows-1251
mysql> SHOW COLLATION LIKE 'cp1251%';
+---------------------+---------+----+---------+----------+---------+
| Collation
| Charset | Id | Default | Compiled | Sortlen |
+---------------------+---------+----+---------+----------+---------+
| cp1251_bulgarian_ci | cp1251 | 14 |
|
|
0 |
| cp1251_ukrainian_ci | cp1251 | 23 |
|
|
0 |
| cp1251_bin
| cp1251 | 50 |
|
|
0 |
| cp1251_general_ci
| cp1251 | 51 | Yes
|
|
0 |
| cp1251_general_cs
| cp1251 | 52 |
|
|
0 |
+---------------------+---------+----+---------+----------+---------+
7.5, cp1251 , :
cp1251_bulgarian_ci ();
cp1251_ukrainian_ci ();
cp1251_bin , ASCII- ;
MySQL
309
cp1251_general_ci ();
cp1251_general_cs ( ).
.
SHOW COLLATION Yes , , (. 7.5). cp1251, ,
cp1251_general_ci. , ( , ) cp1251,
CREATE TABLE, 7.6.
7.6. , cp1251
CREATE TABLE catalogs (
id_catalog INT(11) NOT NULL,
name TINYTEXT NOT NULL
) ENGINE=MyISAM CHARACTER SET cp1251;
,
, 7.7, . . .
7.7. cp1251
CREATE TABLE catalogs (
id_catalog INT(11) NOT NULL,
name TINYTEXT NOT NULL
) ENGINE=MyISAM CHARACTER SET cp1251 COLLATION cp1251_ukrainian_ci;
, ,
latin1
latin1_swedish_ci. , ,
CHARACTER SET
COLLATION, latin1 . , --default-character-set . --default-collation
. 7.8
cp1251 ( ) cp1251_ukrainian_ci ( ).
7.8. MySQL- cp1251
mysqld --default-character-set=cp1251
mysqld --default-character-set=cp1251
--default-collation=cp1251_ukrainian_ci
310
.
my.cnf (my.ini) [mysqld]
( 7.9).
7.9. my.ini
[mysqld]
default-character-set=cp1251
default-collation=cp1251_general_ci
, .
, .
( ).
character_set_client. , , character_set_connection. collation_connection.
character_set_results ,
. ( ) , , 7.10.
7.10.
SET character_set_client='cp1251';
SET character_set_results='cp1251';
SET character_set_connection='cp1251';
, 7.10,
SET NAMES '_' ( 7.11).
7.11. SET NAMES
SET NAMES 'cp1251';
7.3. MySQL
MySQL.
7.3.1. MySQL
MySQL-
VERSION() ( 7.12).
MySQL
311
7.12.
SELECT VERSION();
+------------------+
| VERSION()
|
+------------------+
| 5.1.56-community |
+------------------+
7.3.2.
COUNT() :
COUNT(expr)
COUNT(*)
COUNT(DISTINCT expr1, expr2, ...)
7.14 ,
tbl.
7.14. COUNT()
SELECT * FROM tbl;
+----+-------+
| id | value |
+----+-------+
| 1 |
230 |
| 2 | NULL |
| 3 |
405 |
| 4 | NULL |
+----+-------+
SELECT COUNT(id), COUNT(value) FROM tbl;
312
+-----------+--------------+
| COUNT(id) | COUNT(value) |
+-----------+--------------+
|
4 |
2 |
+-----------+--------------+
COUNT(*) , SELECT ,
WHERE.
7.3.3.
MIN() MAX()( 7.16).
7.16 , 7.13.
MySQL
313
ORDER BY. 7.18
id, .
7.18. MIN() MAX() ORDER BY
SELECT * FROM tbl ORDER BY id LIMIT 1;
+----+-------+
| id | value |
+----+-------+
| 1 | 230
|
+----+-------+
SELECT * FROM tbl ORDER BY id DESC LIMIT 1;
+----+-------+
| id | value |
+----+-------+
| 5 | NULL |
+----+-------+
7.3.4.
SUM() ( 7.19).
7.19.
SELECT SUM(id) FROM tbl;
+---------+
| SUM(id) |
+---------+
|
102 |
+---------+
7.3.5.
DATE_FORMAT(date, format) date
format. format , . 7.1.
314
7.1. DATE_FORMAT()
%a
(SunSat)
%b
(JanDec)
%c
(112)
%D
%d
(0131)
%e
(131)
%f
(000000999999)
%H
(0023)
%h
(0112)
%I
(0112)
%i
(0059)
%j
(001366)
%k
(023)
%l
(112)
%M
(JanuaryDecember)
%m
(0112)
%p
AM PM ( 12- )
%r
%S
(0059)
%s
(0059)
%T
, 24- (hh:mm:ss)
%U
(0052),
%u
(0052),
%V
(0153), .
%X
%v
(0153), .
%x
%W
(SundaySaturday)
%w
(06), 0
%X
, ,
, 4 , %V
%x
, ,
, , 4 , %v
%Y
, 4 (YYYY)
%y
, 2 (YY)
%%
, . 7.1, .
MySQL
315
MySQL- '2011-01-12 11:55:17'
'12.01.2011 11:55'. , 7.20.
7.20. DATE_FORMAT()
SELECT DATE_FORMAT(putdatetime,'%d.%m.%Y %H:%i') AS putdatetime FROM tbl;
+------------------+
| putdatetime
|
+------------------+
| 12.01.2011 11:55 |
+------------------+
7.3.6.
tbl,
:
id ;
fio , , ;
putdate .
.
TO_DAYS() 365,25 ( 7.22): 365 ;
0,25 ,
.
7.22.
SELECT
fio,
(TO_DAYS(NOW()) TO_DAYS(putdate))/365.25 AS putdate
316
FROM tbl;
+----------------+---------+
| fio
| putdate |
+----------------+---------+
| .. | 38.5462 |
| .. | 34.9870 |
| .. | 42.6530 |
| .. | 24.5339 |
+----------------+---------+
,
FLOOR() ( 7.23).
7.23.
SELECT
fio,
FLOOR((TO_DAYS(NOW()) TO_DAYS(putdate))/365.25) AS putdate
FROM tbl;
+----------------+---------+
| fio
| putdate |
+----------------+---------+
| .. |
38 |
| ..
|
34 |
| ..
|
42 |
| .. |
24 |
+----------------+---------+
7.3.7. IP-
INET_ATON(address) IP- address
( 7.24). XXX.YYY.ZZZ.WWW :
XXX
2563 + YYY
2562 + ZZZ
256 + WWW.
IP-,
BIGINT.
MySQL
317
7.4.
.
products id_catalog,
catalogs. id_catalog;
, 7.27.
7.27. id_catalog products
SELECT id_catalog FROM products ORDER BY id_catalog;
+------------+
| id_catalog |
+------------+
|
1 |
|
1 |
|
1 |
|
2 |
|
2 |
|
3 |
|
4 |
|
5 |
|
5 |
+------------+
318
7.27, .
, id_catalog.
DISTINCT ( 7.28).
7.28.
SELECT DISTINCT id_catalog FROM products ORDER BY id_catalog;
+------------+
| id_catalog |
+------------+
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
+------------+
7.28, .
GROUP BY, , ( 7.29).
GROUP BY SELECT- ORDER BY
LIMIT.
7.29. GROUP BY
SELECT id_catalog
FROM products
GROUP BY id_catalog
ORDER BY id_catalog;
+------------+
| id_catalog |
+------------+
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
+------------+
7.5.
, . 7.30 catalogs products,
products id_catalog, , . 7.1.
MySQL
319
products
catalogs
id_product
...
id_catalog
id_catalog
name
...
...
...
...
...
...
...
...
...
. 7.1.
320
7.31.
SELECT * FROM products
WHERE id_catalog = (SELECT id_catalog FROM catalogs
WHERE name = '');
+------------+---------------+------------+
| id_product | name
| id_catalog |
+------------+---------------+------------+
|
3 | N 1 |
1 |
|
4 | N 2 |
1 |
|
5 | N 3 |
1 |
+------------+---------------+------------+
7.31, :
SELECT * FROM products
:
SELECT id_catalog FROM catalogs WHERE name = ''
, (id_catalog),
MySQL ,
. .
,
. 7.32
catalogs,
products.
7.32. ,
SELECT name FROM catalogs
WHERE id_catalog = (SELECT id_catalog FROM products
WHERE id_product = (SELECT MAX(id_product)
FROM products));
+---------------+
| name
|
+---------------+
| |
+---------------+
id_product products:
SELECT MAX(id_product) FROM products
id_catalog,
id_product :
SELECT id_catalog FROM products
WHERE id_product = (SELECT MAX(id_product)
FROM products)
MySQL
321
id_catalog (. 7.32).
,
. . .
, ,
( 7.33).
7.33.
SELECT id_catalog, (SELECT MAX(id_product) FROM products)
FROM catalogs;
+------------+----------------------------------------+
| id_catalog | (SELECT MAX(id_product) FROM products) |
+------------+----------------------------------------+
|
1 |
9 |
|
2 |
9 |
|
3 |
9 |
|
4 |
9 |
|
5 |
9 |
+------------+----------------------------------------+