ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

PHP معرفی

<!-- /* Font Definitions */ @font-face {font-family:Helvetica; panose-1:2 11 5 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Courier; panose-1:2 7 4 9 2 2 5 2 4 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tms Rmn"; panose-1:2 2 6 3 4 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Helv; panose-1:2 11 6 4 2 2 2 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"New York"; panose-1:2 4 5 3 6 5 6 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:System; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MS Mincho"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS 明朝"; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Batang; panose-1:2 3 6 0 0 1 1 1 1 1; mso-font-alt:바탕; mso-font-charset:129; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:PMingLiU; panose-1:2 1 6 1 0 1 1 1 1 1; mso-font-alt:新細明體; mso-font-charset:136; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:"MS Gothic"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-alt:"MS ゴシック"; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Dotum; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:돋움; mso-font-charset:129; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimHei; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:黑体; mso-font-charset:134; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:MingLiU; panose-1:2 1 6 9 0 1 1 1 1 1; mso-font-alt:細明體; mso-font-charset:136; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:Mincho; panose-1:2 2 6 9 4 3 5 8 3 5; mso-font-alt:明朝; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Gulim; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:굴림; mso-font-charset:129; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:Century; panose-1:2 4 6 3 5 7 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Angsana New"; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:"Cordia New"; panose-1:2 11 3 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:Mangal; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:32768 0 0 0 0 0;} @font-face {font-family:Latha; panose-1:2 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1048576 0 0 0 0 0;} @font-face {font-family:Sylfaen; panose-1:1 10 5 2 5 3 6 3 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:67110535 0 0 0 159 0;} @font-face {font-family:Vrinda; panose-1:1 1 6 0 1 1 1 1 1 1; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:65539 0 0 0 1 0;} @font-face {font-family:Raavi; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131072 0 0 0 0 0;} @font-face {font-family:Shruti; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:262144 0 0 0 0 0;} @font-face {font-family:Sendnya; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Gautami; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2097152 0 0 0 0 0;} @font-face {font-family:Tunga; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:4194304 0 0 0 0 0;} @font-face {font-family:"Estrangelo Edessa"; panose-1:3 8 6 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:-2147459008 0 128 0 0 0;} @font-face {font-family:"Arial Unicode MS"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627421319 -2147483648 8 0 66047 0;} @font-face {font-family:TimesNewRoman; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Adobe Caslon Pro Bold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Adobe Caslon Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Adobe Garamond Pro Bold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Adobe Garamond Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Arno Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Caption"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro SmText"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Subhead"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Light Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd Caption"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd SmText"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd Subhead"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Bell Gothic Std Black"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bell Gothic Std Light"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bickham Script Pro Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:script; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:7 0 0 0 147 0;} @font-face {font-family:"Bickham Script Pro Semibold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:script; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:7 0 0 0 147 0;} @font-face {font-family:"Birch Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Blackoak Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Brush Script Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Chaparral Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Charlemagne Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Cooper Std Black"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eccentric Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Garamond Premr Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Garamond Premr Pro Smbd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Giddyup Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Hobo Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Kozuka Gothic Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Letter Gothic Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lithos Pro Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Mesquite Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Minion Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Minion Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Minion Pro Med"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Minion Pro SmBd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Myriad Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Myriad Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Myriad Pro Light"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Nueva Std Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"OCR A Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Orator Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Poplar Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Prestige Elite Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rosewood Std Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Stencil Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tekton Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Tekton Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Tekton Pro Ext"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Trajan Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:Marlett; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Lucida Console"; panose-1:2 11 6 9 4 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-2147482993 6144 0 0 31 0;} @font-face {font-family:"Lucida Sans Unicode"; panose-1:2 11 6 2 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-2147476737 14699 0 0 63 0;} @font-face {font-family:Verdana; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:"Arial Black"; panose-1:2 11 10 4 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Comic Sans MS"; panose-1:3 15 7 2 3 3 2 2 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Impact; panose-1:2 11 8 6 3 9 2 5 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Georgia; panose-1:2 4 5 2 5 4 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Medium"; panose-1:2 11 6 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Palatino Linotype"; panose-1:2 4 5 2 5 5 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-536870009 1073741843 0 0 415 0;} @font-face {font-family:"Trebuchet MS"; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Webdings; panose-1:5 3 1 2 1 5 9 6 7 3; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MV Boli"; panose-1:2 0 5 0 3 2 0 9 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 0 256 0 0 0;} @font-face {font-family:AngsanaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:BrowalliaUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:"Browallia New"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:CordiaUPC; panose-1:2 11 3 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:DilleniaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:EucrosiaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:FreesiaUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:IrisUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:JasmineUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:KodchiangUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:LilyUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:Aharoni; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:David; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"David Transparent"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:FrankRuehl; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Levenim MT"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:Miriam; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Miriam Transparent"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Miriam Fixed"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Fixed Miriam Transparent"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:Narkisim; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:Rod; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Rod Transparent"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Traditional Arabic"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:24577 0 0 0 64 0;} @font-face {font-family:"Arabic Transparent"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:Andalus; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:24577 0 0 0 64 0;} @font-face {font-family:"Simplified Arabic"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:"Simplified Arabic Fixed"; panose-1:2 1 0 9 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:Kartika; panose-1:2 2 5 3 3 4 4 6 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:8388611 0 0 0 1 0;} @font-face {font-family:"\@MS Gothic"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:FantasyMatrix; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:FantasyMatrixSmall; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Jokerman Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"University Roman Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Smudger Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"HolidayPi BT"; panose-1:5 12 1 2 1 2 9 2 2 2; mso-font-charset:2; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"OldDreadfulNo7 BT"; panose-1:4 8 8 5 6 1 7 1 8 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"MisterEarl BT"; panose-1:3 8 8 2 2 3 2 2 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Calligraph421 BT"; panose-1:3 6 7 2 5 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Blackletter686 BT"; panose-1:3 4 8 2 2 6 8 4 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Cataneo BT"; panose-1:3 2 8 2 4 5 2 6 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Staccato222 BT"; panose-1:3 9 7 2 3 4 7 2 4 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"ParkAvenue BT"; panose-1:3 2 6 2 5 5 6 8 7 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Square721 BT"; panose-1:2 11 5 4 2 2 2 6 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Broadway BT"; panose-1:4 4 9 5 8 11 2 2 5 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Microsoft Sans Serif"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627421663 -2147483648 8 0 66047 0;} @font-face {font-family:"Scruff LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Odessa LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Highlight LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"One Stroke Script LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Mekanik LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Tiranti Solid LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Pump Demi Bold LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Quixley LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"La Bamba LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Rage Italic LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Ruach LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Westwood LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Smudger LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Milano LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Victorian LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"University Roman LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Academy Engraved LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Orange LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"John Handy LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Jokerman LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Agency FB"; panose-1:2 11 5 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Arial Narrow"; panose-1:2 11 5 6 2 2 2 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arial Rounded MT Bold"; panose-1:2 15 7 4 3 5 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Blackadder ITC"; panose-1:4 2 5 5 5 16 7 2 13 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT"; panose-1:2 7 6 3 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT Black"; panose-1:2 7 10 3 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT Condensed"; panose-1:2 7 6 6 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Book Antiqua"; panose-1:2 4 6 2 5 3 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Bookman Old Style"; panose-1:2 5 6 4 5 5 5 2 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Bradley Hand ITC"; panose-1:3 7 4 2 5 3 2 3 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Calisto MT"; panose-1:2 4 6 3 5 5 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Castellar; panose-1:2 10 4 2 6 4 6 1 3 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Century Gothic"; panose-1:2 11 5 2 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Century Schoolbook"; panose-1:2 4 6 4 5 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Copperplate Gothic Bold"; panose-1:2 14 7 5 2 2 6 2 4 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Copperplate Gothic Light"; panose-1:2 14 5 7 2 2 6 2 4 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Curlz MT"; panose-1:4 4 4 4 5 7 2 2 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Edwardian Script ITC"; panose-1:3 3 3 2 4 7 7 13 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Elephant; panose-1:2 2 9 4 9 5 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Engravers MT"; panose-1:2 9 7 7 8 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Bold ITC"; panose-1:2 11 9 7 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Demi ITC"; panose-1:2 11 8 5 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Light ITC"; panose-1:2 11 4 2 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Medium ITC"; panose-1:2 11 6 2 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Felix Titling"; panose-1:4 6 5 5 6 2 2 2 10 4; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Forte; panose-1:3 6 9 2 4 5 2 7 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Franklin Gothic Book"; panose-1:2 11 5 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Demi"; panose-1:2 11 7 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Demi Cond"; panose-1:2 11 7 6 3 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Heavy"; panose-1:2 11 9 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Medium Cond"; panose-1:2 11 6 6 3 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"French Script MT"; panose-1:3 2 4 2 4 6 7 4 6 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Garamond; panose-1:2 2 4 4 3 3 1 1 8 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Gigi; panose-1:4 4 5 4 6 16 7 2 13 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Gill Sans MT Ext Condensed Bold"; panose-1:2 11 9 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans MT"; panose-1:2 11 5 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans MT Condensed"; panose-1:2 11 5 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans Ultra Bold"; panose-1:2 11 10 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans Ultra Bold Condensed"; panose-1:2 11 10 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gloucester MT Extra Condensed"; panose-1:2 3 8 8 2 6 1 1 1 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Goudy Old Style"; panose-1:2 2 5 2 5 3 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Goudy Stout"; panose-1:2 2 9 4 7 3 11 2 4 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Haettenschweiler; panose-1:2 11 7 6 4 9 2 6 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Imprint MT Shadow"; panose-1:4 2 6 5 6 3 3 3 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"MS Outlook"; panose-1:5 1 1 0 1 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Maiandra GD"; panose-1:2 14 5 2 3 3 8 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Monotype Corsiva"; panose-1:3 1 1 1 1 2 1 1 1 1; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"OCR A Extended"; panose-1:2 1 5 9 2 1 2 1 3 3; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Palace Script MT"; panose-1:3 3 3 2 2 6 7 12 11 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Papyrus; panose-1:3 7 5 2 6 5 2 3 2 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Perpetua; panose-1:2 2 5 2 6 4 1 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Perpetua Titling MT"; panose-1:2 2 5 2 6 5 5 2 8 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Pristina; panose-1:3 6 4 2 4 4 6 8 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rage Italic"; panose-1:3 7 5 2 4 5 7 7 3 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Rockwell; panose-1:2 6 6 3 2 2 5 2 4 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rockwell Condensed"; panose-1:2 6 6 3 5 4 5 2 1 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rockwell Extra Bold"; panose-1:2 6 9 3 4 5 5 2 4 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Script MT Bold"; panose-1:3 4 6 2 4 6 7 8 9 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tw Cen MT"; panose-1:2 11 6 2 2 1 4 2 6 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Tw Cen MT Condensed"; panose-1:2 11 6 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Wingdings 2"; panose-1:5 2 1 2 1 5 7 7 7 7; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Wingdings 3"; panose-1:5 4 1 2 1 8 7 7 7 7; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Bookshelf Symbol 7"; panose-1:5 1 1 1 1 1 1 1 1 1; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Lucida Sans"; panose-1:2 11 6 2 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lucida Sans Typewriter"; panose-1:2 11 5 9 3 5 4 3 2 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"MS Reference Sans Serif"; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:"MS Reference Specialty"; panose-1:5 0 5 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Tw Cen MT Condensed Extra Bold"; panose-1:2 11 8 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:ZWAdobeF; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:536885895 0 0 0 511 0;} @font-face {font-family:"Euro Sign"; panose-1:2 11 6 3 2 2 1 2 1 1; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 2 0 0 1 0;} @font-face {font-family:"Lucida Bright"; panose-1:2 4 6 3 7 5 5 2 4 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:7 0 0 0 147 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} ins {mso-style-type:export-only; text-decoration:none;} span.msoIns {mso-style-type:export-only; mso-style-name:""; text-decoration:underline; text-underline:single;} span.msoDel {mso-style-type:export-only; mso-style-name:""; text-decoration:line-through; color:aqua;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

١

PHP معرفی

Mohsen_mahyar@yahoo.com

 

شناخته می شود ، یک زبان اسکریپت “PHP : Hypertext Preprocessor “ که با نام کامل PHP

Java ، C از زبانهای PHP و دستورات (syntax) می باشد . بیشترترکیب ها HTML نویسی توکار

گرفته شده و قابلیتهای منحصر به فردی به آن اضافه گردیده است . هدف اصلی از این زبان Perl و

آنست

که به توسعه دهندگان وب امکان دهد تا به سرعت ، صفحات پویایی را تولید نمایند.

PDF امروزه صرفا یک پیش پرداز ابرمتن نیست . شما می توانید تصاویر ، فایلهای PHP توجه کنید که

و

تولید نموده یا بکار گیرید . PHP حتی پویانمایی های ” فلش “ را با اسکریپت های ساده

چه توانایی هایی دارد ؟ PHP

قابل اجرا CGI می توانید تمام کارهایی را که با سایر برنامه های PHP در ساده ترین سطح ، با

هستند ،

تولید صفحات پویا و یا ارسال و دریافت ، HTML انجام دهید. مانند گردآوری داده از فرم های

٢

پشتیبانی آن از بسیاری پایگاه داده هاست ، PHP ها. شاید قوی ترین و مهمترین خاصیت Cookie

.

نوشتن یک صفحه مرتبط با پایگاه داده به طرز غیر قابل باوری ، ساده است . هم اکنون این پایگاه

پشتیبانی می شوند. PHP داده ها توسط

Adabas D Ingres Oracle(OCI7andOCI8)

dBase InterBase Ovrimos

Empress FrontBase PostgreSQL

FilePro mSQL Solid

Hyperwave DirectMS-SQL Sybase

IBM DB2 MySQL Velocis

Informix ODBC Unix dbm

،NNTP ، SNMP، IMAP همچنین برای ارتباط با سایر سرویس ها ، از پروتکل هایی مانند PHP

و بسیاری دیگر پشتیبانی می کند. HTTP ، POP3

PHP تاریخچه مختصری از

شکل گرفت . Rasmus Lerdorf (rasmus@php.net) در پاییز سال ۱۹۹۴ توسط PHP فکر اولیه

در صفحه شخصی وی به کار گرفته شد ، تا اطلاعاتی از کسانی که رزومه وی را PHP در ابتدا نگارشی از

” Personal را می بینند ، نگاه داشته شود. اولین نگارش عمومی آن در اوایل سال ۹۵ ارایه شد و با نام

معرفی گردید . که البته شامل پارسری بسیار ساده بود که ماکرو های خاصی Home Page Tools “

Guestbook را می شناخت و نیز برخی کاربردهای مشترک در صفحات شخصی مانند شمارنده یا

وبرخی ابزارر های دیگر را شامل می شد.

نام بسته FI . نگارش ۲ “ ارایه گردید PHP/FI “ پارسر در نیمه سال ۹۵ بازنویسی شد و با نام

را تفسیر می کرد . پس از آن بسیاری HTML بود که فرم های داده Rasmus نرم افزاری دیگری از

در کد های خود استفاده کردند . در میانه سال ۹۶ میزان استفاده کنندگان به حدود ۱۵ PHP از

هزار سایت رسید . این میزان در نیمه سال ۹۷ در حدود ۵۰ هزار سایت مختلف بود. در همین زمان

از حالت یک پروژه شخصی درآمد و توسط تیمی توسعه یافت . این گروه نگارش جدیدی از PHP

به سرعت مورد استفاده قرار گرفت . هم PHP را ارایه دادند و پارسر آن را بازنویسی نمودند. 3 PHP

٣

برای بدست Zend آخرین نگارش این محصول است که در آن از موتور اسکریپت PHP اکنون نیز 4

آوردن قابلیت های بیشتر استفاده شده است .

“RedHat’s Stronghold بر روی بسیاری از محصولات تجاری مانند PHP و 4 PHP امروزه ، 3

استفاده PHP ارایه می گردد. هم اکنون برآورد می شود بیش ۵٫۱۰۰٫۰۰۰ سایت از web Server”

مایکروسافت استفاده می کنند IIS کرده اند که این میزان اندکی از تمامی سایتهای که از سرور های

5.03 میلیون) بیشتر است. )

استفاده کنیم ؟ PHP چگونه از

http://www.php.net است که می توان آنرا از سایت Open source نرم افزاری رایگان و PHP

طراحی شده اند معرفی گردیده PHP دریافت کرد. در این سایت بسیاری از نرم افزار هایی که برای کار با

و معرفی دستورات و توابع آن PHP و می توانید از آنها استفاده نمایید.همچنین دستورالعمل استفاده از

ویندوز در دسترس شماست. Help و فایل PDF ، Html درقالبهای مختلف از جمله

که یک بسته نرم افزاری رایگان است و در آن علاوه بر مفسر “ PHP Traid “ البته ابزارهایی مانند

Apache و نسخه تحت ویندوز وب سرور MySQL موتور پایگاه داده ، Perl مفسر زبان ، PHP

PHPED می باشد ویا نرم افزار MySQL و پایگاه داده PHP قرار گرفته ، ابزار مناسبی جهت کار با

http://download.com فراهم می آورد. از سایت Perl و PHP که محیطی دیداری جهت کار با

قابل تهیه می باشند.

۴

PHP آموزش

است . تاکید این آموزش بر روی راهنمایی دادن PHP آنچه می آید راهنمایی کاربردی برای آغاز کار بار

را انجام می دهند ، و نیز پاسخ دهی به SQL و پایگاه داده های web به مبتدیانی که کاربردهای کوچک

و.. می با شد . mail پرسشهای عمومی مانند چگونگی ارسال یک فرم توسط

PHP ۱- نخستین گام با

هماهنگ در یک سایت (footer) و زیر صفحه (header) ۲- ساخت سرآمد

mail برای ساخت و ارسال PHP ۳- استفاده از

برای تماس با یک پایگاه داده راه دور. MyODBC ۴- استفاده از

PHP ۵- اجرای ایمن اسکریپت های

PHP نخستین گام با

PHP معرفی . I

زبانی برای ساخت آسان صفحات پویای وب می باشد . این زبان راهی ساده تر برای انجام برنامه- PHP

نویسی های مربوط به وب را فراهم می سازد ، که پیش از این صرفا توسط زبانهای پیچیده و توانمندی

انجام می شده است . Perl و C مانند

به صورت ایده آلی به وب متصل شده است . چون اسکریپتهای آن درون صفحات وب و در PHP

یک زبان اسکریپت نویسی ” توکار “ خوانده PHP ، جای می گیرند HTML میان تگ ها و محتوای

می شود

توسعه دهندگان می توانند برنامه هایشان را در صفحات وب جاسازی نموده و آنرا پویا سازند.

همزمان می توانند داراری PHP آنها می توانند با برنامه ، همچون صفحات وب رفتار کنند. صفحات

باشند. این قابلیت به شما اجازه می دهد تا کاربردهای وب PHP و نیز کدهای HTML محتوای معمول

را بسرعت توسعه دهید.

تفاوت آشکاری میان بخش کدهای PHP ، به هر حال ، برخلاف برخی زبانهای اسکریپت نویسی وب

ایجاد می کند. HTML و محتوای PHP

دریافت می کند. ابتدا در صفحه به PHP هنگامی که یک وب سرور درخواستی را برای صفحات

نیز HTML می گردد و هر آنجه را که یافت اجرا می کند . بخشهای معمولی PHP دنبال کدهای

بدون تغییر به مرورگر ارسال می گردد.

۵

استفاده کنیم ؟ PHP چرا از .II

برای ایجاد محتوای محاوره ای PHP بودن آن ، دلایل بسیاری برای انتخاب Open Source گذشته از

بر روی سایت های وب ، وجود دارد.

دارد . C ساختار و ترکیبی بسیار شبیه زبان

می PHP. به آسانی آموخته و به کار گرفته می شوند PHP ، (Structures) نوع داده ها و ساختارهای

داند منظور شما چیست و نوع های داده را ، خود تغییر می دهد.

نیازی به دانستن دستور خاصی برای کامپایل برنامه ندارید ، برنامه شما خود ، در مرورگر اجرا می شود

زیاد اطلاع داشته باشید . PHP لازم نیست برای ابتدای کار و نوشتن برنامه های کاربردی در باره

را ارایه می دهد که به آسانی درون زبان قرارگرفته C سرویسی از مجموعه فایل های کتابخانه ای PHP

و با انعطاف بسیار به آن قابلیت پاسخ دهی سریع برای تغییرات در وب را می دهد .

برای کار در PHP انجام دهید ، با دیگر زبانها نیز قابل انجام است . اما PHP آنچه شما می توانید با

زمینه وب طراحی شده است . بنابراین کارهایی مشکل و خسته کننده برای برنامه نویسان که نوشتن

انجام می شود. PHP آنها را به زحمت می انداخت ، به آسانی با Perl آن در

وب سایت ها را قادر می سازد که با سرعت مبهوت کننده ای گسترش یابند . به این خاطر PHP

بسرعت برای صفحات پویا و پشتیبانی پایگاه داده ها به کار گرفته شده است .

کد های کوچک توکار در یک صفحه وب بسیار کارآمدند . به عنوان مثال ، در یک صفحه وب ایستا

ممکن است شما مقدار یک متغیر را بدست آورید . و سپس آنرا برای تغییرات پویای محتوای صفحه به کار

عبارتی را که نشانگر مرورگر وب کاربر است بر روی صفحه نمایش می دهد . ، PHP برید. این مثال

<?php

$browser = getenv("HTTP_USER_AGENT");

?>

<P>You are using the <?php echo($browser);?> web

browser.

</P>

چند مثال . III

Hello World ( الف

آنست که شروع به کار با آن کنید و ببینید که چه رخ می دهد. ما با PHP سریعترین راه برای آموختن

که شما پیش از این در آموختن سایر زبانها نیز آنرا به کار برده اید، “Hello World “ مثال معروف

۶

را در مرورگر به “HELLO WORLD” را آغاز می کنیم . این مثال ساده عبارت PHP کار با

می نویسد. echo () وسیله تابع

<?php

echo("Hello World\n");

?>

یک تابع echo() یک یا چند رشته متنی را به مرورگر برای نمایش می فرستد . در واقع echo ( ) تابع

نیست بلکه یک ساختار زبان است . اما مانند یک تابع عمل می کند. به ابن خاطر نیازی به پرانتزها

نیست و می توانید از آنها صرف نظر کنید.

بپردازیم . PHP اکنون اجازه دهید به برخی از ترکیبهای دستوری معمول در اسکریپت های

با علامتهای ” کوچکتر از “ و ” بزرگتر از “ نشانه گذاری می شود . که پس PHP ابتدا وانتهای بخش

نیز “ \n” . و یا پیش از آنها یک علامت سوال آمده است . پایان هرخط با یک ” ; “ مشخص می شود

یک خط جدید ایجاد می کند . و عبارات پس از آن در خط جدید نوشته می شود .

کد بالا را می توان به این شکل نیز نوشت .

<?php

echo "Hello World\n";

?>

Hello Web ( ب

را برای وب که پایه محاوره ای آن فرم هاست ، بازنویسی می کنیم. این Hello World مثال معروف

مثالی بسیار ساده از به کار گرفتن اسکریپت ، توسط یک فرم در مرورگر است . این اسکریپت یک ورودی از

کاربر ” نام وی “ را دریافت می کند و در پاسخ این نام را در پنجره مرورگر نمایش می دهد .

<form action="hello-web.php3" method="post">

<td>Name:</td>

<td><input type="text" name="frmName" size="24">

<input type="submit" value="Submit">

</form>

٧

Hello-web.html

مقادیر ارسال شده از فرم را می پذیرد و خود متغییر هایی به نام متغییرهای ورودی می ، PHP چون

در خود این قابلیت را دارد که به PHP سازد ، فقط یک خط برای تولید پاسخ کافیست . و به خاطر اینکه

ایجاد می HTTP (header) عنوان یک پرونده وب عمل کند ، اسکریپت به طور خودکار یک سرآمد

کند .تا برای مرورگر مشخص نماید که چه متنی را نمایش دهد.

Hello <?php echo($frmName); ?>!

hello-web.php3

را Hello و بعد از آن P را به مرورگر می فرستد . سپس تگ Html سرآمد فایل PHP ، در ابتدا

رسید آن را اجرا و نتیجه را به مرورگر ارسال کرده و PHP نمایش می دهد. ، هنگامی که به تگ آغازین

می رود و سایر بخشها را بدون تغییر ارسال می کند. HTML به حالت ، PHP بعد از تگ پایانی

و یا متغییرهای محلی که دارای URL یک متغیر می تواند از مقادیر ورودی یک فرم ، یا پارامتر

مقدار هستند ، تشکیل شود .

فوق را انجام دهد . این PHP و html تولید نمود که وظایف دو فایل PHP همچنین می توان یک فایل

فایل با تغییرات بسیار جزئی و از پیوند دو فایل پیشین پدید می آید.

دارا بودن محتوای پویا . IV

آشنا شویم . PHP بیشتر با “Tip of the Day “ بیایید بوسیله اسکریپت

در این مثال با توابع و ایده های جدیدی آشنا می شوید که البته لزومی ندارد همه آن را یکباره

بیاموزید .همچنین این اسکریپت ، مقدمه ای است برای کار با سیستم فایل .

<?php

srand((double)microtime()*1000000);

$tiplist = file("photo.tips");

$ntips = sizeof($tiplist);

$rtip = rand(0,$ntips-1);

$tip = $tiplist[$rtip];

echo $tip;

?>

٨

را فراخوانی می کند. نیاز به نوشتن چیزی در فایل “photo.tips” سطر دوم اسکریپت ، فایلی به نام

سبب می file () نیست چون ما فقط یک سطر از این فایل را خوانده و نمایش می دهیم . استفاده از تابع

ذخیره شود . نیازی به مشخص کردن یک $tiplist شود تا هر سطر فایل مربوطه ، در یک عنصر آرایه

یک نام را به عنوان آرگومان می پذیرد و خروجی file () برای استفاده از این تابع نیست .تابع handle

آن یک آرایه است که هر عضو آرایه با یک سطر فایل برابر است .

می sizeof دارای چندین مطلب می باشد که هر کدام در یک خط قرار دارند . توسط تابع tips فایل

ها نیز هست را پیدا کرد. این تابع tip توان تعداد سطر های موجود در فایل که مشخص کننده تعداد

تعداد عناصر یک آرایه را معین می کند . در سطر بعد ، یک عدد تصادفی میان صفر و تعداد عناصر

تولید می کند . چون اندیس آرایه در m و n یک عدد رندم میان rand(n,m) . آرایه تولید می شود

از ۰ شروع می شود ، PHP

ما تابع رندم خود را میان صفر و تعداد عناصر منهای یک ، تنظیم می کنیم .عدد تولید شده به عنوان

نمایش داده echo () اندیس آرایه به کار می رود. متنی که به صورت تصادفی انتخاب شده توسط تابع

می شود.

ایجاد سرآمد و زیر صفحه هماهنگ برای یک سایت

قرار می گیرند ؟ PHP درکد (footer) و زیر صفحه (header) چگونه سرآمد . I

توانایی آن در کاهش میزان اعمالی است که برای نگهداری ، PHP یکی از توانمندترین خصوصیات

سایت بایستی انجام دهید. با به کارگیری الگویی سازگار با سایت ، شما می توانید زحمتی را که برای

ایجاد صفحات

جدید نیاز است را کاهش دهید . همچنین می توانید به آسانی طراحی کل سایت خود را تغییر دهید .

این مثال

کاربردی ، چگونگی به کارگیری و دستیابی به یک الگوی سایت را به شما آموزش می دهد.

است . آنها شامل تمام اطلاعاتی HTML ها توسط تگهای footer و header اولین مساله ، طراحی

هستند

از صفحه شما را در HEAD که بایستی در تمامی صفحات شما نمایش داده شوند. سرآمد معمولا بخش

بردارد.

٩

و شاید آگهی های سایت و یک منو و سر آغاز صفحه .

و اطلاعات تماس برای سایت شماست . Copyright معمولا شامل اعلان Footer

header1:

<HEAD>

<TITLE>>My Cool Site</TITLE>

</HEAD>

<BODY BGCOLOR="#FFFFFF">

<H1>The Coolest Site Ever</H1>

footer1:

<PRE>

</PRE>

<CENTER>

<A HREF="http://www.coolsite.loc/legal.php3">Copyright</A> 1999 By

Me<BR>

Written by: <I>The Author</I><BR>

Questions? Write to <B>me@coolsite.loc</B><BR>

</CENTER>

</BODY>

سر آمد و زیر صفحه های پویا .II

مرحله بعد جانشین کردن بخشهایی از سرآمد و زیرصفحه ها ، که می خواهید پویا باشند ، با تگ ها

است .این بخشها می توانند شامل عنوان ، کلمات کلیدی ، توضیحات ، نشانی PHP و اسکریپت های

پست- الکترونیک و ... باشد .

header2:

<HEAD>

<TITLE><?php print $strTitle; ?></TITLE>

</HEAD>

<BODY BGCOLOR="#FFFFFF">

<H1><?php print $strCaption; ?></H1>

footer2:

١٠

<PRE>

</PRE>

<CENTER>

<A HREF="http://www.coolsite.loc/legal.php3">Copyright

</A>

1999 By Me<BR>

Written by: <I><?php print $strAuthor;

?></I><BR>

Questions? Write to <B><?php print $strContact;

?></B><BR>

</CENTER>

</BODY>

اکنون شما بایستی بتوانید در تمام صفحات خود به آنها دسترسی داشته باشید . این مرحله آسانتر از

دسترسی داشته باشند ، footer و header آنست که تصور می کنید. فایلهایی که می خواهند به

را فراخوانی کرده ، محتوای اختصاصی هر صفحه را header ، بایستی متغیرها را مقدار دهی کنند

را فراخوانی نمایید. یک مثال : footer نوشته و سپس

<?PHP

$strTitle = 'My Cool Site';

$strCaption = 'The Coolest Site Ever';

$strAuthor = 'The Author';

$strContact = 'me@coolsite.loc';

require ('/path/to/includes/header.php3');

?>

<P>This is a the text of your page. Make it as fancy as you want!</P>

<?PHP

require ('/path/to/includes/footer.php3');

?>

main1

جداسازی محتوا از علائم . III

بسیار خوب ، اکنون می خواهیم مثال پیچیده تری بیاوریم . مثلا شما می خواهید ، قادر باشید که

کل سایت خود را به آسانی و یکباره تغییر دهید . ساده footer و header مقادیر متغییرهای پویا

ترین راه برای این کار ، انتقال اطلاعات به یک فایل پیکربندی عمومی و ذخیره کردن بخشهای خاص

صفحه در یک آرایه ، می باشد. به این خاطر باید بدانید که از نظر برنامه نویسی آرایه یک لیست ساده

١١

است که توسط کلید های عددی و یا متنی می توان به اجزا آن دسترسی داشت . یک مثال برای فایل

پیکریندی در زیر آمده است:

config1:

<?PHP $aryConfig = array(

"main" => array (

"title" => "My Cool First Page" ,

"caption" => "Welcome to the Coolest Site Ever" ,

"author" => "The Author" ,

"contact" => "me@coolsite.loc" ) ,

"second" => array (

"title" => "My Cool Second Page" ,

"caption" => "More Coolness!" ,

"author" => "The Other Author" ,

"contact" => "other@coolsite.loc" )

);

?>

فایل پیکر بند ی فوق اطلاعات هدر را در بر دارد . این ف ایل مقاد یر همه م  تغیر ها ی پیکر بند ی را در

تمامی محدوده صفحات سا یت ، قابل دسترس ی م ی کند . اکنون ، پس از آنکه فایل پیکر بندی آماده شد

را با یستی تغ ییر ده ید تا مقاد یر متغ یرها را از آرا یه بخواند . ما هنوز م ی خواه یم footer و header،

بتوانیم مقاد یر سراسر ی را جانش ین مقاد یر مح لی نم اییم . به این صورت که اگر مطمئن شو یم مقدار

محلی موجود نباشد ، از مقادیر سراسری استفاده می شود.

header3:

<?PHP

if (empty ($strTitle)) { $strTitle = $aryConfig[$strPagename]["title"]; }

if (empty ($strCaption)) { $strCaption =

$aryConfig[$strPagename]["caption"]; }

?>

<HEAD>

<TITLE><?php print $strTitle; ?></TITLE>

</HEAD>

<BODY BGCOLOR="#FFFFFF">

<H1><?php print $strCaption; ?></H1>

١٢

footer3:

<?PHP

if (empty ($strAuthor)) { $strAuthor =

$aryConfig[$strPagename]["author"] } ;

if (empty ($strContact)) { $strContact =

$aryConfig[$strPagename]["contact"] } ;

?>

<PRE>

</PRE<

<CENTER>

<A HREF="http://www.coolsite.loc/legal.php3">Copyright</A> 1999 By

Me<BR>

Written by: <I><?php print $strAuthor; ?></I><BR>

Questions? Write to <B><?php print $strContact; ?></B><BR>

</CENTER>

</BODY>

بایستی تغییر کند . config و در پایان صفحه اصلی نیز برای دسترسی به فایل

main2:

<?PHP

$strPagename = 'main';

require ('/path/to/includes/config.php3');

require ('/path/to/includes/header.php3');

?>

<P>This is a the text of your page. Make it as fancy as you

want!</P>

<?PHP

require ('/path/to/includes/footer.php3');

?>

و در یک مرحله دیگر ، برای شما آسان خواهد بود که متن و محتوای اصلی صفحه را به یک فایل مجزا

PHP منتقل نمایید . این عمل اجازه تغییرات را به آسانی ،و بدون آنکه نگران از دست دادن کدهای

باشید ، در اختیار شما می گذارد . این عمل نیاز به تغییرات جدید در صفحه اصلی و نیز ایجاد یک فایل

دارد. Content

١٣

main3:

<?PHP

$strPagename = 'main';

require ('/path/to/includes/header.php3');

require ('/path/to/includes/contents.html');

require ('/path/to/includes/footer.php3');

?>

contents1:

This is a the text of your page. Make it as fancy as you want!

این عمل می تواند نقطه آغاز مناسبی برای شما و برای حرکت به سوی ساخت سایتهای پویا باشد .

Email برای تولید وارسال PHP به کار گیری

Mail بررسی تابع . I

فراهم mail() توسط تابع email زبان برنامه نویس وب محبوب ما روشی دستی و ساده برای ارسال

و با استفاده از واسط استاندارد و ساده ، که mail نموده است . این تابع یک روش کامل برای ارسال

را پنهان می کند : می باشد . mail مشکلات و خصوصیات خاص برنامه های سیستمی مسؤول ارسال

هستند که اگر mail دو مثال از برنامه های محبوب مدیریت ارسال و دریافت Qmail و Sendmail)

شما ، (tutorial) نبود شما بایستی مستقیما با آنها ارتباط برقرار می کردید . ) این آموختار mail تابع

آشنا feedback و ساختن یک فرم ساده PHP توسط اسکریت های email را با مفاهیم اولیه ارسال

می کند .

سه مقدار ضروری و یک مقدار اختیاری را می پذیرد. و نیز مقداری منطقی را که نشان mail() تابع

دهنده موفقیت یا عدم موفقیت ارسال است ، برمی گرداند .

١۴

و متن پیام که به ( Subject موضوع پیام ( فیلد ، ( To: نشانی پست الکترونیک گیرنده ( فیلد

(Extra عنوان پارامترهای اصلی به تابع داده می شوند . یک رشته اختیاری که شامل هدر اضافه

است نیز می تواند تعیین شود . ، Header)

bool mail(string msgTo, string msgSubject, string msgBody, string extraHeaders);

برای ارسال یک پیام شما به سادگی پارامترها را مقدار دهی می کنید . در این مثال از رشته های ثابت

استفاده می کنیم تا کاربرد اصلی تابع شرح داده شود . اولین پارامتر نشانی پست الکترونیک فردی را

را ارسال کنیم . دومین پارامتر عنوان و موضوع پیام mail تعیین می کند که ما می خواهیم برای او

را قرار می From: است . پارامتر سوم متن نامه است و در پارامتر چهارم به صورت اختیاری ما هدر

را اضافه می X-Mailer دهیم و در آن نشانی را که می خواهیم پاسخ به آن ارسال شود ، می آوریم . و

کمک کند تا تشخیص بدهد که پیام از یک منبع خودکار ارسال شده email کنیم تا به برنامه مدیریت

است . زمانی که شما یک هدر انتخابی را تولید می کنید بیاد داشته باشید که هر هدر اضافه را با یک

جدا نمایید . وگرنه متن پیام ، ممکن است در هم و غیر قابل استفاده شود . پیام ( \n) linefeed

ارسال plain text های ارسالی از طریق این تابع با فرمت

خواهند شد .

mail ( "knoblock@att.tld", "Use PHP Everyday",

"Don't forget to floss and use PHP everyday!",

"From: hygienist@phphelp.tld\nX-Mailer: My PHP Script\n");

بیشتر اوقات شما نمی خواهید مقادیر پارامترها را با رشته های ثابت پر کنید . بلکه می خواهید

یک فایل ) PHP متغییرهایی را استفاده نمایید . ممکن است بخواهید این مقادیر را از یک بخش اسکریپت

مقدار دهی اولیه ) یا از یک فرم ثبت نام بدست آورید. این عمل همانند آنست که شما بخواهید مقادیر

ارائه شده توسط یک فرم را بکار برید یا متغییرها را به صورت مدون برای ارسال پیام ، تولید نمایید . در

این صورت ، رشته های معین را با متغییرهای رشته ای جانشین می کنیم .

mail ($strMailTo, $strSubject, $strBody, $strXHeaders);

١۵

افزودن اطلاعات هدر . II

به شما اجازه می دهد که فیلدهای هدر بیشتری را به هدر پیام mail () همانطور که اشاره شد تایع

مشخص کردن این است که ( Extra Header) خود اضافه نمایید . یک کاربرد برای هدرهای اضافی

پیام بوسیله

remailer یک برنامه تولید شده است . هر اسکریپتی که نامه را تولید کند ، می تواند به عنوان یک

ارسالی از فرم ، از سوی شخصی که فرم را email نامیده شود. گاهی مفید است که به نظر آید

کرده ، فرستاده شده است . مانند زمانی که از یک فرم برای ثبت نام کاربر در یک لیست پستی submit

X-Header با نشانی ثبت نام کننده ، بازنویسی شده و یک From: استفاده می شود . در کد زیر فیلد

شما ارسال شده ، اضافه گردیده است .معین remailer از سوی اسکریپت mail . که مشخص می کند

از یک email از سوی اسکریپت شما می آید برای مدیر سایت مشخص می کند، که mail کردن اینکه

منبع خودکار ارسال شده است و اگرمشکلی باشد ، از سوی اسکریپت شما رخ داده است . ما تابع

ازسال شده ، به کار برده ایم : PHP را برای شناسایی پیامی که از سوی یک اسکریپت phpversion ()

mail($list_request, "Subscribe", "Subscribe", "From: $email_address\nX-Mailer:

PHP/" . phpversion());

در دسترس باشند . به From : برخی لیست سرور ها نیاز دارند که نام و نام خانوادگی کاربر در فیلد

اضافه می کنیم . ضروری است که راهی برای درج From این منظور ، متغیرهایی برای نام ، در فیلد

کوتیشن در یک عبارت که بوسیله کوتیشنها مشخص می شود بیابیم . ( عبارتی که ابتدا و انتها آن با

پیش از علائم کوتیشن (‘\’) backslash کوتیشن مشخص می شود .) به این منظور بایستی از علامت

نام ونام خانوادگی استفاده کرد . نشانی پست الکترونیک در میان دو علامت کوچکتراز و بزرگتر از

قرار می گیرد تا از متن اطراف آن متمایز گردد .

$from = "From: \"$first_name $last_name\"

<$email_address>\nX-Mailer: PHP/" . phpversion();

mail($list_request, "Subscribe", "Subscribe", $from);

١۶

استفاده می شود ؟ Mail () چه هنگامی از تابع .III

داشتن یک تابع آسان برای ارسال نامه ، هنگامی که یک اسکریپت بخواهد پیامهای متعددی را ارسال

نماید ، بسیار مفید است . این تابع فقط یک خط از کد را بخود اختصاص می دهد . همچنین کمک می

بخواهد در یک عبارت شرطی بیاید نیز به خوبی حفظ نماید mail () کند تا کد خوانایی خود را ،اگر تابع

و یا معیارهای command syntax بدون هراس از mail . همچنین به خوبی توانایی محاوره با برنامه

Qmail و Sendmail یونیکس را دارد . گرچه واسط mail ایمنی مورد نیاز برای اجرای یک برنامه

اسکریپت شما را تا حدودی در برابر تغییراتی که mail () استاندارد شده اند ، استفاده از تابع

به mail() ایجاد نماید ، حفاظت می کند . استفاده از تابع Sendmail ممکن است مدیر در برنامه

ویا Sendmail با استفاده از mail این معناست که شما مجبور نیستید خودتان تابعی برای ارسال

بنویسید . Qmail

مثال زیر درباره استفاده از چند تابع در یک اسکریپت ، برای آگاه کردن مدیر هنگامی که فرمی تکمیل

پاسخ برای کاربر می باشد .( توجه داشته باشید که این یک email گردید و در همان لحظه ، ارسال یک

طرح اولیه است و ممکن است مثالی عملی نباشد .)

if ($notify)

{

// notify admin

$mailTo = "admin@some.com";

$msgSubject = "Downloading MediaKit";

$msgBody = "$name, $company, $address, $email_address,

$demographics";

$xHeaders = "From: $email_address\nX-Mailer: PHP/" . phpversion();

mail ($mailTo, $msgSubject, $msgBody, $xHeaders);

}

// thank customer

$mailTo = $email_address;

$msgSubject = "Thank You for Downloading our MediaKit";

$msgBody = "Please feel free to contact us if you have any questions or

desire a quote.\nThank You.\n";

$xHeaders = "From: admin@some.com\nX-Mailer: PHP/" . phpversion();

mail ($mailTo, $msgSubject, $msgBody, $xHeaders);

١٧

Sendmail ارتباط با برنامه . IV

سیستم را به طور مستقیم بکار برید . شاید بخواهید mail به شما اجازه می دهد که برنامه PHP البته

موجود است ، بکار برید . mail که این کار را با استفاده از مشخصات ویژه ای که فقط در یک برنامه خاص

یا دیگر هدر های اختیاری در روشی From : ایجاد هدر ، sendmail هدف دیگر از فراخوانی مستقیم

خواناتر است .

به این موضوع آشناترند .) به Perl مانند نوشتن در فایل است . ( برنامه نویسان mail فراخوانی یک برنامه

پیام شما ( ” صدازدن “ : روش ارتباط pipe یک برنامه را برای popen () جای باز کردن یک فایل ، تابع

برای puts () ایجاد می نماید . تابع mail مشخص می کند . این تابع یک ارتباط با برنامه (UNIX استاندارد

برقرار شده ،به کار popen () که ارتباط آن بوسیله تابع ، mail نوشتن هدرهای پیام و متن آن در برنامه

متفاوتی را بکار برید ، فکر خوبی است که مسیر mail می رود. چون ممکن است شما بخواهید برنامه

را در یک متغیر ذخیره نمایید . شما می توانید نشانی گیرنده را در متغیری ذخیره popen () موجود در

است . Sendmail کرده تا تغییرات در آن به آسانی انجام شود . اسکریپت زیر مثالی از بکارگیری برنامه

<?php

$fd = popen("/usr/sbin/sendmail -t","w");

fputs($fd, "To: myaddress@domain.tld\n");

fputs($fd, "From: Me \n");

fputs($fd, "Subject: Test message from my web site\n");

fputs($fd, "X-Mailer: PHP3\n");

fputs($fd, "Testing.\n");

pclose($fd);

?>

شما باید به تابع ، نام pipe باز می کند . برای بازکردن یک mail به برنامه pipe یک popen () تابع

می popen به تابع “Write” برای “w” . برنامه و نیز نوع ارتباطی که بایستی برقرار شود را بدهید

نوشته شود “r” برقرار کند . اگر Sendmail به PHP برای ارسال اطلاعات از سوی pipe گوید که یک

هر خط fputs() باز نماید . تابع PHP ، تابع بایستی پایپی در خلاف جهت و برای ارسال اطلاعات به

می نویسد . این تابع نیاز دارد که ما به آن یک اشاره فایل و رشته ای که می Sendmail پیام را در

خواهیم نوشته شود را بدهیم .اشاره گر فایل که هنگام باز شدن فایل آنرا بدست آورده ایم ، می گوید که

وسایل به عنوان فایل در نظر گرفته می شوند . ) پیام خود ، Unix پیام به کجا بایستی ارسال شود . ( در

بسته می شود . pclose () شامل یک رشته است . هنگامی که کار ما پایان یافت ، پایپ بوسیله تابع

برای کاهش میزان اشتباه به کار برید . Sendmail را هنگام کار کردن مستقیم با (-t) توجه : گزینه

پیام را تجزیه handle می گوید که Sendmail به (-t) انتخاب : Sendmail بنابه توضیحات برنامه

١٨

بکار برد . تایک لیست مشخص و مجزا از ( BCc و Cc ، To : کند . و تمامی انواع گیرندگان را ( مانند

این امتیاز را در حالی به شما می دهد که امکان Sendmail گیرندها بدست آید . خط فرمان ساده

معرفی گیرنده غیر از آنچه در هدر ها لیست شده را از دست می دهید .

ایجاد نشانی پست الکترونیک پوششی است .اگر ، mail یک هدف دیگر از دسترسی مستقیم به برنامه

برای ارسال mail () شما در میزبان دیگری قرار دارد ، ممکن است شما هنگامی که از تابع mail برنامه

استفاده می کنید ، ببینید پیامها به خاطر اینکه از نشانی ، غیر از نشانی های پوشش یافته ، email

کاهش می Sendmail ارسال شده اند : برگشت می خورند . این مشکل توسط ارتباط مستقیم با برنامه

یابد .

را برای مشخص کردن آدرس پوششی به کار برید. –f سوئیچ

-f email@address.com

// Configuration

$announce_subject = "Message From Our Web Site";

$announce_from_email = "editor@somesite.com";

$announce_from_name = "Our Site";

$announce_to_email = "listaddr@listhost.com";

$body = "Announcement. Our site has a special offer today.

Please visit. Thank you.";

$MP = "/usr/sbin/sendmail -t";

$spec_envelope = 1;

// Access Sendmail

// Conditionally match envelope address

if($spec_envelope)

{

$MP .= " -f $announce_from_email";

}

$fd = popen($MP,"w");

fputs($fd, "To: $announce_to_email\n");

fputs($fd, "From: $announce_from_name

<$announce_from_email>\n");

fputs($fd, "Subject: $announce_subject\n");

fputs($fd, "X-Mailer: PHP3\n");

fputs($fd, $body);

pclose($fd);

١٩

email ارسال ایمن .V

سیستم را فراخوانی می کنیم . بایستی مراقب باشیم که چه کاراکترهایی به آن mail هنگامی که برنامه

ارسال کرده ایم . چون ما یک پایپ یونیکس را بازکرده ایم برای کاربران بداندیش این امر را ممکن می

یونیکس را در فرم ورودی بنویسند و بعد آن را به shell های پوسته meta character سازد تا

بفرستند . نتیجه ممکن است فاجعه بار باشد . Sendmail

هنگامی که اسکریپت کنترل کننده یک فرم را می نویسید که قرار است داده های وارد شده توسط کاربران

بفرستند ، شما بایستی به دقت مراقب ورودی های کاربر باشید . به همه کاربران mail را به یک برنامه

های meta character (. آنچنان نگاه کنید که شاید آنها دشمن باشند . ( رفتار غیر مسؤولانه ای دارند

و یا “From :” ، “TO :” استفاده شود مانند Sendmail را ، که بایستی توسط Shell پوسته

از ورودی حذف نمایید . به جای حذف کاراکترهای نادرست می توانید به گونه ای متغیر ، “Subject”

ورودی را تعریف نمایید که صرفا عبارتهای مجاز را دریافت کند . به عنوان مثال ، ورودی خود را به این

شکل تعریف نمایید :

$data =~ s/[^A-Za-z0-9_]//gs;

از یک فرم Mail ارسال . VI

البته هریک از هدرها ویا متن پیام می توانند توسط متغیرهایی معرفی و مقداردهی شوند .این یک مثال

کاملتر از اسکریپت قبلی است که به صورت یک اداره گر ساده فرم، توسعه داده شده است . مثال ،

تقسیم ، Sendmail متغیرهایی را معرفی می کند و کد را به بخش کوچک پیکربندی و اسکریپت آشنای

به عنوان بخش پیکربندی برای مقداردهی متغیرهای کلیدی ، عمل می ، PHP می کند . بخش اول کد

خود را در یک متغیر ذخیره کنید . در این صورت نیازی به mail نماید . مفید است که مسیر برنامه

جستجو در کد و تغییر قسمتهای لازم، در صورتی که مسیر برنامه تغییر کند ، نخواهید داشت . بخش دوم

با هم PHP و HTML کدهای ، PHP را انجام می دهد . در روش صحیح نوشتن mail ، عمل ارسال

آمیخته می شوند تا پس از آنکه فرم کامل شد توسط همان صفحه ، اطلاعات جمع آوری شده، از طریق

( From : به مدیر سایت ارسال شود . اگر فرم شامل نشانی پست الکترونیک پرکننده ، ( فیلد mail

به کاربر و پاسخ دهی به آن را جهت تایید عضویت ، آسان می کند . بر اساس email باشد : ارسال یک

در میان دو نشانه ”<“ و ”>“ قالب email با قرار گرفتن نشانی From : ، پروتکلهای مربوطه ، فیلد

بندی شده است :

“ From : $frmName < $frmEmail> \n”

٢٠

به صورت خودکار PHP هر فرم دارای نام متغیرهای ورودی است . هنگامی که فرم تکمیل و تایید شد

اجزای فرم وجود دارد ، ایجاد می کند و آنها را با NAME متغیرهایی با نام هایی که در خاصیت

اسکریپت در PHP مقادیری که کاربر وارد نموده است مقداردهی می نماید . این متغیرها در بخش

دسترس خواهند بود. برای هر متغیر یک خط شامل مقدار آن ، در پیام تولید شده اضافه می شود .

<?php

/* Configuration -----------------------------------------*/

/* Mail results to this address */

/* Set this to the email address you wish to receive mail */

/* from the form submissions at. */

$TO = "YourEmailId@YourISPDomain.SomeTopLevelDomain";

/* Specify system mail program */

/* Set this to the path to your mail program. Check with */

/* your server administrator for the proper location. */

$MP = "/usr/sbin/sendmail -t";

?>

<?php

/*-------------------------------------------------------*/

/* Decide if we should display a new form or send the */

/* form data by email. */

/* To make this decision, the script can check for the */

/* existence of 1) the action variable defined by a */

/* hidden field; 2) a required form field that you know */

/* will always be set on submission; or you may set the */

/* action variable to a particular value that can be */

/* checked to determine the action to take. I chose */

/* to simply check for the existence of the hidden */

/* action variable (which is always set as long as we */

/* give a value in the hidden field). */

/*-------------------------------------------------------*/

if ($frmAction)

{

/*-------------------------------------------------------*/

/* A thank you message (or other response) goes here. We */

/* switch to HTML mode to make it easy to include any */

/* tags you wish without worrying about quoted */

/* attributes. */

/*-------------------------------------------------------*/

?>

<div align="center">

<table width="350" border="2">

<tr>

<td bgcolor="#C0C0C0">

<p>Thank you for requesting a personalized quote for our products

and services.

</p>

</td>

</tr>

٢١

</table>

</div>

<?php

/*-------------------------------------------------------*/

/* The real work gets done here by opening a pipe to */

/* sendmail, which sends the contents of the submitted */

/* form by email to the address specified in the */

/* configuation section (which can acutally be an */

/* an included initialization file if you want to get */

/* fancy). For each variable we expect the form to */

/* to submit, we output as part of the email. */

/*-------------------------------------------------------*/

$fd = popen($MP,"w");

fputs($fd, "To: $TO\n");

fputs($fd, "From: $frmName <$frmEmail>\n");

fputs($fd, "Subject: Message from your web site\n");

fputs($fd, "X-Mailer: PHP3\n");

fputs($fd, "Name: $frmName\n");

fputs($fd, "Phone: $frmPhone\n");

fputs($fd, "Fax: $frmFax\n");

fputs($fd, "Email: $frmEmail\n");

fputs($fd, "Address: $frmAddress\n");

fputs($fd, "Price range: $frmPriceRange\n");

fputs($fd, "Details: $frmFurther");

pclose($fd);

/*-------------------------------------------------------*/

/* Here the script must exit so we don't display the */

/* form again once the thank you message has been */

/* displayed and the mail sent. */

/*-------------------------------------------------------*/

exit;

} else {

// start else clause

?>

<div align="center">

<form action="mail.php3" method="post">

<table>

<tr><td colspan="2">

<p>Please enter your information for a personal quote.

</p>

</td>

</tr>

<tr>

<td>Name:</td>

<td><input type="text" name="frmName" size="24">

</td>

</tr>

<tr>

<td>Phone:</td>

٢٢

<td><input type="text" name="frmPhone" size="24">

</td>

</tr>

<tr>

<td>Fax:

</td>

<td><input type="text" name="frmFax" size="24">

</td>

</tr>

<tr>

<td>Email:

</td>

<td> <input type="text" name="frmEmail" size="24"><br>

</td>

</tr>

<tr>

<td>Address:

</td>

<td><input type="text" name="frmAddress" size="24">

</td>

</tr>

<tr>

<td>Price Range:

</td>

<td><input type="text" name="frmPriceRange" size="24">

</td>

</tr>

<tr>

<td>Details:

</td>

<td><input type="text" name="frmFurther" size="24">

</td>

</tr>

<tr>

<td>

<!-- To determine whether the script should display the form or

mail the data, you can check for existence of a required field or

this special action variable. -->

<input type="hidden" name="frmAction" value="formmail">

<input type="submit" value="Submit">

</td>

<td>&nbsp;

</td>

</table>

</div>

<br>

</form>

<?php

} // end else clause

?>

٢٣

وپذیرش HTML این دستورالعمل مثالی از اینکه چگونه یک اسکریپت وب می تواند برای تولید فرم

مقادیر تاییده شده فرم ، بکار رود است . این امر اینگونه رخ می دهد : در اولین باری که اسکریپت

ارسال می گردد . اسکریپت (client) فرم به مرورگر مشتری HTML فراخوانده می شود ، بخشهای

فرم ، برای فراخوانی همان action پس از آن بیکار می ماند تا کاربر مقادیر فرم را تایید کند . پارامتر

اسکریپت تنظیم شده است . اسکریپت به مقادیر توجه می کند تا ببیند آیا از سوی فرم فراخوانی شده

به صورت مخفی درنظر گرفت تا براساس مقادیر ارسالی ، action است؟همچنین می توان متغیری برای

مقداردهی شود . action متغییر

این مثال ، یک اسکریپت آموزشی است و به تعداد ورودی مرتبط است . می توان اداراه گر فرمی ساخت که

برای هر فرم بدون توجه به تعداد ورودی ها عمل نماید .

برای اتصال به یک پایگاه داده راه دور MyODBC به کارگیری

MyODBC اصول اولیه استفاده از . I

راه انداز (source) است . منبع ODBC پشتیبانی کامل آن از MySQL یکی از گیرا ترین خصوصیات

در اختیار ODBC برای علاقمندان در اکثر مراکزتوسعه و بهینه سازی دستیابی به ODBC و واسط

پشتیبانی شده است . شما می توانید از MySQL و بسیاری دیگر در ODBC است . همه توابع 2.5

خود استفاده نمایید . این آموختار نیز MySQL ( برای تماس با کارگزار (سرور Microsoft Access

MySQL برای سرویس دهنده پایگاه داده ODBC یک راه انداز MyODBC . بر این اساس است

تولید گردیده است . توسط برنامه TCX Data-Consult است که توسط شرکت سوئدی

پشتیبانی می کند . ODBC(Open DataBase Connectivity) از MySQL ، MyODBC

استفاده می کنیم ؟ MyODBC - چرا برای اتصال از

شما می توانید : MyODBC با

- ارتباط با سرویس دهنده پایگاه داده راه دور را ، از هر نقطه ای که شما به یک برنامه رومیزی مانند

دسترسی داشته باشید، برقرار نمایید . Microsoft Access

یک پایگاه داده به یک سرویس دهنده راه دور (Export) - ارسال

٢۴

یک پایگاه داده از یک سرویس دهنده راه دور (Import ) - دریافت

یک پایگاه داده محلی به یک پایگاه داده راه دور (link) - اتصال

خود را online برای ارسال یک پایگاه داده هنگامی که شما اولین پایگاه داده راه دور یا : Exporting

قرار Online ایجاد می کنید ، کارآمد است .اگر شما یک پایگاه داده دارید که می خواهید آن را به صورت

نمایید . این عمل (export) ارسال ODBC بوسیله یک اتصال MySQL به Access دهید . آنرا از

به نوآموزان اجازه می دهد تا پایگاه داده های خود را بدون MyODBC . بسیار آسان انجام خواهد شد

های سودمند ، در اینترنت قرار دهند .نکته مهم application یا Unix نیاز به آموختن فرمانهای پوسته

یک پردازش ایستا در ارسال یک جدول از سرویس دهنده محلی exporting آنست که توجه داشته باشید

راه دور در هر بار انجام آن ، می باشد . معمولا فیدبکی از شاخص پیشرفت عملیات (server) به کارگزار

SQL به کارگزار SQL می کنید ، دستورات export دریافت نمی شود . هنگامی که شما یک جدول را

و برای درج داده CREATE TABLE راه دور، فرستاده می شوند . برای ایجاد یک جدول، دستور

راه دور ارسال می شوند . اگر جدول پیش از این ایجاد شده باشد ، SQL به کارگزار INSERT، ارسالی

UPDATE فرستاده نخواهد شد و اطلاعات جدید ارسالی از دستور CEARTE TABLE عبارت

استفاده می کنند .

دریافت جدول از یک پایگاه داده راه دور هنگامی که شما می خواهید یک گزارش از : Importing

یک جدول به import اطلاعات ذخیره شده در آن تهیه نمایید ، می تواند بسیار ارزشمند باشد . با

گرد آوری شده اند ، online شما می توانید ، نمودارها یا گزارشهایی از داده هایی که به صورت Access

به آسانی تهیه نمایید . نکته مهم آنست که دریافت یک جدول از یک پایگاه داده راه دور ، در یک سرویس

دهنده محلی پردازشی ایستاست و معمولا فیدبکی از شاخص پیشرفت دریافت نمی شود .

پیوند دهی ؛ هنگامی که شما یک جدول محلی را به یک جدول راه دور متصل می کنید ، به :Linking

می دهید Access کاربران محلی خود اجازه تغییرات در جدول راه دور را از طریق واسط گرافیکی کاربر

به جدول محلی اضافه شود و یا تغییر نماید؛ ، Access . برای مثال ، اگر یک سطر بوسیله یک فرم

تغییرات در جدول پیوند شده راه دور نیز اعمال می گردد وآنرا به هنگام می کند .این ارتباط به کاربران

خود را به وسیله محیطی دوست داشتنی و با کاربری online مبتدی اجازه می دهدکه پایگاه داده های

ساده ، نگه داری نمایند . یکی از فواید اتصال جداول آنست که هر تغییری که توسط کاربرد پایگاه داده

محلی صورت پذیرد ؛ در پایگاه داده راه دور نیز اثرخواهد کرد .این عمل پردازشها بر روی پایگاه داده راه

دور را بیشتر قابل رؤیت می کند .

نیز انجام داد . براخی Unix و خط فرمان پوسته MySQL تمامی این اهداف را می توان با استفاده از

اوقات کارشناسان ومتخصصین کار کردن با خط فرمان را بیشتر می پسندند . اما برای بسیاری از مردم

راهی آسان برای دریافت داده هایشان از کارگزار راه دور، و یا ODBC ( ها و کارکنان اداری client)

٢۵

می باشد . online تولید نمودارهای قالب بدنی شده‘ دلپذیر و گزارشهای مناسبی از داده های

یک گزینه مهم در میان ابزار های مورد نیاز توسعه دهنگان است . که به شما اجازه می دهد MyODBC

شان بوسیله چارچوب و برنامه online ، تا به مشتریان یک واسط ساده و منعطف برای پایگاه داده های

کاربردی - که با آن راحت هستند - معرفی نمایید . برای توسعه دهندگان کاربردهای وب ، اجازه یافتن

کاربران برای به هنگام رسانی پایگاه داده های راه دور از محل کار ، باعث صرفه جویی در زمان می شود .

PHP ورود داده و مدیریت پایگاه داده می تواند از محل کار درست در زمانی انجام شود که یک اسکریپت

صفحات پویایی را بر پایه اطلاعات جداول پایگاه داده ، تولید می نماید .

MyODBC (Download) بارگذاری . II

به نشانی MySQL سایت Downloads در بخش MyODBC بسته قابل بارگذاری

بروید و MySQL موجود است . به بخش نرم افزارهای مرتبط با http://www.mysql.com

را انتخاب نمایید . Download for MyODBC

را آزمایش نمایید ، سایتی را برگزینید MySQL توجه : برای بارگذاری سریعتر یکی از سایتهای آینه ای

که به شما نزدیکتر باشد .

در Unix به خوبی گونه های مختلف موجود در NT و چارچوبهای windows 9x برای MyODBC

در بسته فوق موجود است . اگر شما صرفا برنامه کاربردی آن را MyODBC دسترس است . کد منبع

موجود در بسته چشمپوشی نموده و فقط برنامه C می خواهید می توانید بدون مشکل ، از کدهای

اجرایی را نصب نمایید .

توزیع شده است ، چون یک اشکال NT و win 9x در نسخه های مجزایی برای MyODBC : توجه

از شناسایی سیستم عامل جلوگیری می کند . ، Microsoft ODBC در نصب

شماره ۲٫۵ است . آخرین نگارش از بسته قابل بارگذاری در نشانی زیر موجود ، MyODBC نگارش فعلی

مطمئن شوید که آخرین نگارش که . http://www.mysql.com/doanloads/myodbc : است

MyODBC تمامی بروز رسانی ها و رفع نواقص را در بر دارد مورد استفاده قرار می دهید . فایل فشرده

1.5 است. MB در حدود

MyODBC نصب

را اجرا نمایید . هنگامی که شما پردازش نصب را آغاز نمودید ، اولین پنجره ای که setup.exe فایل

کلیک “ continue “ است که بایستی بر روی MS ODBC مشاهده خواهید کرد ؛ پنجره نصب

OK را انتخاب نموده و بر روی MySQL . نمایید . در این بخش پنجره نصب راه اندازها پدیدار می شود

٢۶

کلیک نمایید. اگر مشکلی در نصب پیش آید گزینه نصب وابسته به نگارش را که با کلیک کردن بر دکمه

Advanced Installation خواهید یافت ، انتخاب کنید . این دکمه پنجره محاوره Advanced

را خواهد آورد . Options

به MyODBC موجود است . اگر راه انداز version اطلاعات بیشتر در مورد نگارش راه انداز در پنجره

است . Data Source درستی نصب شده باشد ، پنجره بعدی که مشاهده خواهید کرد مربوط به محاوره

ندارد . شما می توانید با MyODBC است و ربطی به MS ODBC این پنجره محاوره ، بخشی از

فراخوانی

MyODBC یک مثال از منبع داده ای که توسط ، Data Source در پنجره Sample MySQL

setup را انتخاب کرده و دکمه MySQL entry نصب شده است را ملاحظه نمایید . اگرچه می توانید

پیکربندی خواهیم کرد . هنگامی که MS Access را برای ادامه کلیک کنید . اما ما اتصال راه دور را از

جدید . ODBC کار به اتمام رسید ، شما بایستی پیامی مبنی بر پایان موفقیت آمیز نصب راه انداز

کلیک کنید . OK مشاهده نمایید . سپس بر

پیکربندی و برقراری تماس . III

- ایجاد ارتباط با یک پایگاه داده راه دور موجو د.

برای ارتباط با پایگاه داده راه دور استفاده می کنیم Access پس از آنکه شما راه انداز را نصب کردید ، از

. پایگاه داده باید برای دسترسی راه دور تنظیم شده باشد . در بسیاری از ارائه دهنگان خدمات میزبانی

وب ، این عمل فقط با یک درخواست انجام می شود . لطفا از مدیر یا گروه پشتیبانی ارائه دهنده خدمات

پرسش نمایید . MySQL میزبانی وب خود ، درباره فعال سازی دستیابی راه دور به پایگاه داده

Data Source Name مناسب را انتخاب و یک ODBC را ایجاد کنید . راه انداز Data Source یک

برای برنامه های کاربردی ویندوز ، ایجاد نمایید . برخی تنظیمات پیچیده و بسیاری اصطلاحات (DSN)

که شما ممکن است با آنها نا آشنا باشید ، وجود دارد . اما براحتی مراحل را دنبال کنید تا به پایان ویزارد

برسید .

Data Source در پنجره New کلیک نمایید. بر روی File | Get External Data |Import برروی

بایستی پدیدار شود . MyODBC کلیک نمایید . پنجره محاوره راه انداز

ایجاد یک منبع داده جدید

٢٧

در این بخش شما بایستی یک منبع داده جدید ایجاد نمایید . یک منبع داده ، مکانی است که”داده“ از

همان نام پایگاه داده است . هنگامی (DSN) منتقل می گردد . نام منبع داده ، ODBC طریق اتصال

که شما یک منبع پایگاه داده ایجاد می کنید ، هرنامی که دوست دارید می توانید به آن بدهید .

استفاده از ویزارد برای ایجاد یک منبع داده جدید

اولین مرحله ، ایجاد یک منبع داده جدید ویندوز است . این مرحله به برنامه های کاربردی ویندوز اجازه

New را انتخاب نموده و بر User Data Source . شما مرتبط شوند ODBC می دهد تا به پایگاه داده

موجود را نشان می دهد که شما می ODBC کلیک نمایید . پنجره بعدی ، فهرستی از راه انداز های

توانید با آنها یک منبع داده ایجاد نمایید. ( می توانید به هر میزان که نیاز داشته باشید منبع داده با هریک

از راه انداز های موجود

را انتخاب کنید . MySQL ایجاد نمایید .) راه انداز

ODBC صفحه اطلاعات پالایش شده ای نمایش داده می شود که شامل نوع منبع داده و راه انداز

انتخابی است . بر این اساس ، مرحله بعد به صورت اختیاری است و پیکربندی تنظیمات اختصاصی راه

پدیدار می شود . این MyODBC کلیک نمایید. پانل تنظیم راه انداز Next انداز می باشد بر روی

تنظیمات کارگزار راه دور و سایر تنظیمات سازگار را مشخص ، DSN صفحه به شما اجازه می دهد تا نام

شما یکتا باشد را می توانید برای این منبع داده windows DSN نمایید .شما هرنامی که در فهرست

انتخاب کنید .

و فیلد پورت Password، User ، Server پورت پیش فرض برای اکثر مواقع درست است . مقدار

نباید در صفحه نصب مشخص شده باشند . اگر آنها را در این بخش ، مشخص کرده اید ؛ به عنوان مقادیر

پیش فرض در ارتباط های بعدی استفاده خواهند شد . مقادیر ، می توانند در زمان استفاده و در صورت

نیاز تغییر کنند.

مرجع سریع تنظیمات

استفاده خواهد شد. ( این نام می تواند هرجه شما می خواهید windows نام پایگاه داده شما که توسط

باشد ، هرجه به شما کمک کند تا پایگاه داده را به خاطر آورید و یا تشخیص دهید ، بهتر است.)

Windows DSN

میزبان کارگزار پایگاه داده ( می توانید از فراهم کننده خدمات میزبانی وب خود Domain و یا IP آدرس

آنرا دریافت نمایید .)

MySQL Host

نام پایگاه داده راه دور است .( توسط فراهم کننده خدمات میزبانی وب و یا شما هنگامی که پایگاه داده را

ایجاد کرده اید ، بدست می آید . )

MySQL

Database Name

نام کاربری است که می تواند به پایگاه داده راه دور متصل شود . ( از فراهم کننده خدمات میزبانی وب

دریافت نمایید . )

User

٢٨

رمز عبوری است که برای دسترسی به پایگاه داده راه دور نیاز است . ( از میزبان وب خود بخواهید .)

شما بایستی سطوح دسترسی درستی برای انجام برخی اعمال خاص مانند ایجاد و یا از بین بردن جداول

می دهند . یکی برای فقط خواندن Password و User ID اتخاذ نمایید . برخی مدیران به شما سه جفت

(SELECT , INSERT , UPDATE) یکی برای دسترسی در حد خواندن و نوشتن ، (SELECT) ،

(CREATE TABLE , DROP TABLE , ALTER TABLE ) و دیگری برای کنترل در سطح مدیر

SQL به اضافه تمام عبارات و دستورات دیگر

Password

بتواند Access را برای مثال انتخاب کرده است . به خاطر آنکه MS ACCESS نکته : این آموختار

کار کند ، شما بایستی مراحل زیر را دنبال نمایید : MyODBC بهتر با

- شما بایستی یک کلید اصلی در جدول داشته باشید .

گاه فهرست ) در تمام جداولی که می خواهید ، قادر به بروز رسانی آنها ) timestamp - بایستی یک

شوید ، داشته باشید .

را مقایسه می single float هنگامی که Access . استفاده نمایید double float - فقط از فیلدهای

کند، دچار مشکل می شود .

ارتباط برقرار می کنید ، انتخاب MySQL را هنگامی که با “return matching rows “ - گزینه

نمایید.

گزارش می دهد . اگر OLE OBJECTS را به عنوان BLOB ستونهای ، NT بر روی Access -

بوسیله دستور TEXT داشته باشید ، بایستی ستون را به Memo شما می خواهید ستونهای

تغییر دهید . ، ALTER TABLE

را به خوبی استفاده کند . اگر شما با این مساله مشکلی DATE همیشه نمی تواند ستونهای Access -

تغییر دهید. DATE TIME پیدا کردید ، این ستونها را به

از MySQL نادرستی ایجاد کند که SQL پرس وجوهای Access - در برخی حالات ، ممکن است

“Query | SQL Specific | Pass-Through درک آن ناتوان باشد ، شما می توانید این مشکل را با انتخاب

حل نمایید . Access “ از منوی

بر می Select Data Source ایجاد شد ، به پنجره محاوره (data source) اولین باری که منبع داده

کلیک نمایید . بایستی یک OK گردید . منبع داده ای را که ایجاد کرده اید از لیست انتخاب نمایید . بر

نسخه از جدول در پایگاه داده راه دور با تمام داده های شما ایجاد شده باشد . هیچ چیزی مبنی بر تایید

نمایید . (link) ارسال داده، نخواهید دید . شما نیاز داری تا جدول را به پایگاه داده راه دور متصل

٢٩

دریافت وارسال جداول . IV

دریافت یک جدول از یک پایگاه داده راه دور

را انتخاب نمایید . به (Tables) را باز نمایید . در پنجره پایگاه داده ، قطعه جداول Access پایگاه داده

را انتخاب نمایید . “Import” ، Get External Data بروید و سپس از File منوی

را انتخاب نموده ، پنجره محاوره ”To an External File or Database“ در محاوره ، گزینه

را ODBC Database گزینه ، Save As Type نمایش داده می شود . در بخش “Save As”

انتخاب نمایید .

پدیدار می شود . اگر جدولی که می خواستید “Import Object” کلیک نمایید .پنجره Import بر

کلیک کنید . Ok دریافت نمایید در لیست باشد ، آنرا انتخاب کرده و بر

دریافت می کند . ODBC جدول را بوسیله پرس و جو با پایگاه داده راه دور از طریق اتصال Access

Access این اتصال برای یک جدول بزرگ می تواند کند باشد . بنابراین یک فنجان قهوه صرف نمایید تا

کار خود را انجام دهد !

ارسال یک جدول به پایگاه داده راه دور

بخش جداول را انتخاب کنید . جدولی را برای Database را باز کنید . در __________پنجره Access پایگاه داده

مشاهده Export بروید ، پنجره Get External Data ارسال انتخاب کرده به منوی فایل و سپس به

کلیک نمایید . پنجره انتخاب منبع داده Ok می شود . اگر نام جدول همانی است که شما می خواهید ، بر

را انتخاب نمایید .ما یک منبع داده جدید Machine Data Source ، (tab) پدیدار می شود . بخش

New صرفا برای این پایگاه داده ایجاد می کنیم . این امر تماس مجدد با پایگاه داده را آسان می کند . بر

را انتخاب User Data Source . باز می شود Create New Data Source کلیک نمایید . پنجره

کلیک کنید . پانل ، Next را از لیست برگزینید . بر MySQL کلیک کرده و راه انداز Next نمایید. بر

کلیک نمایید . Finish اطلاعات راه انداز شما را نشان می دهد . بر روی

بر می گردید . منبع داده ای Select Data source پس از آنکه منبع داده ایجاد شد . شما به محاوره

کلیک کنید . این امر بایستی یک نسخه مشابه از Ok را که ایجاد کرده اید از لیست انتخاب نمایید . و بر

جدول بر روی پایگاه داده راه دور با تمام داده های شما ایجاد کند .شما بایستی جدول را به پایگاه داده

راه دور منتقل نمایید. برای اتصال جدول ، از بخش جداول ، جدول مورد نظر را انتخاب کرده به

ODBC Database فایلهایی از نوع ، link در پنجره ، File|Get External Data | link Tables

Machine Data ظاهر می شود . از بخش ، Data Source () ، را انتخاب نمایید . پنجره محاوره

نام منبع داده پایگاه داده خود را مجددا انتخاب نمایید . چندین پنجره خواهند آمد اولی شاید ، Source

از شما بپرسد کدام جدول را می خواهید پیوند دهید ؟ جدول مورد نظر را انتخاب کنید . دیگر ی ممکن

٣٠

است از شما بپرسد کدام ستون بایستی دارای مقادیر یکتا باشد .( کلید اصلی ).اکنون جدول دوم با همان

نام ظاهر می شود . اما یک آیکن ” کره “ نشان می دهد که این جدول راه دور است . شما می توانید با

این جدول مانند دیگر جداول کار کنید . ایجاد یک گزارش بر پایه آن یا ایجاد یک فرم که شما می توانید

برای بروز رسانی جدول راه دور استفاده کنید .

اخطار : ممکن است تغییر نام برخی ستونها در جدولی که می خواهید ارسال کنید ضروری باشد .

رزرو شده اند . به ، SQL برخی کلمات را برای خود ذخیره ( رزرو ) کرده است . اکثر عبارات MySQL

یک کلمه رزرو شده است . بنابراین شما نمی توانید از آن به عنوان نام یک ستون UPDATE عنوان مثال

استفاده کنید . جز آن ، نام توابع نباید با نام جداول و یا ستونها یکسان باشد .

بروید . و File | Get External Data | Link Table را باز کنید . به Access یک پایگاه داده تهی

را انتخاب و نام پایگاه داده Machine Data Source را انتخاب نمایید. بخش ODBC فایلهایی با نوع

کلیک نمایید . Ok خود را از لیست برگزینید . بر

پدیدار می شود . شما بایستی یک فهرست از نام جداول ببینید . جدولی را که می Link Table محاوره

کلیک کنید . Ok خواهید به آن متصل شوید انتخاب و بر

خواهد آمد . شما فهرستی را می بینید . از آن میان ستون یا Select Unique Identifier محاوره

ستونهایی را که می خواهید به عنوان کلید اصلی باشند ، مشخص نمایید .

شما بایستی یک جدول راه دور در بخش جداول خود ببینید . نشانه ” کره “ مشخص می کند که یک

جدول به منبع داده راه دور متصل شده است . جدول را باز کنید بایستی داده های خود را در آن ببینید .

مشکلی دارد که بر ارسال جداول به پایگاه داده راه دور اثر می گذارد . نام MS Access اخطار : 2000

File | Export | Select ODBC جدول هنگام صدور پایگاه داده ارسال نمی شوند . اگر شما فقط به

ظاهر خواهد شد. این مشکل توسط مایکرو سافت ODBC را انتخاب کنید یک خطا MyODBC رفته و

وجود ندارد . البته اتصال به جداولی که در پایگاه داده راه دور Access حل شده ودر ویرایش جدید

شما مشکل داشت می توانید از Access وجود دارند مشکل ایجا نمی کند . در صورتی که

برای ارسال جداول استفاده نمایید . Access 95/ 97/XP

MyODBC انتخاب ها و سازگاری با

ODBC سازگاری با

MySQL وجود دارد . این نکات از راهنمای ODBC چند نکته برای سازگارکردن داده های شما با

مقادیری ویژه اند . اما با استفاده از مقادیر نشان داده شده در جدول (“Zero”) گرفته شده است . مقادیر

می توانید آنها را نگهداری کرده و یا به طور صریح به آنها ارجاع دهید . همچنین می توانید به جای آن از

٣١

که در “zero” 0‘ یا ۰ استفاده کنید که برای نوشتن نیز آسانتر است . مقادیر زمان وتاریخ

و بالاتر تبدیل MyODBC در 2.50.12 NULL به کار رفته باشند به طور اتوماتیک به MyODBC

نمی تواند چنین مقادیری را بکار برد. ODBC می شوند. چون

را به عنوان TEXT و مقادیر LONGVARBINARY را به عنوان BLOB مقادیر MyODBC

تعریف می کند . LONGVARCHAR

می تواند ذخیره شود . هنگامی که تاریخ - 0000 MyODBC 0000 ‘ در -00- تاریخ بخصوص ’ 00

و MYODBC در 2.50 NULL استفاده می شود . به طور خودکار به MyODBC 00-00 ، در

نمی تواند این نوع تاریخ را بکار برد. ODBC بالاتر تبدیل می گردد چون

بر می گردانند و نوع ستونهایی که به عنوان CHAR را بجای VARCHAR توابع رشته ای ، اکنون

تبدیل می شوند. این عمل باعث بهتر شدن عملکرد VARCHAR ذخیره شده اند به صورت CHAR

را دچار MySQL می گردد. ولی ممکن است برخی از کلاینت های قدیمی MyODBC راه انداز

استفاده کنند . CHAR بجای نوع فیلد VARCHAR مشکل نمایند.آنهایی که نمی توانند از نوع فیلد

MyODBC آموختن انتخابهای

موثراند انتخاب ODBC به کاربر اجازه می دهد تا چندین انتخاب را که بر رفتار اتصال MyODBC

نماید. برخی از گزینه ها را شرح می دهیم .

Trace MyODBC

ارسال شده اند MyODBC که __________به کارگزار SQL از دستورات (LOGGING) این گزینه واقعه نگاری

را فعال می سازد. انتخاب فوق زمانی که شما با اتصالی دشوار به پایگاه داده ، روبرو هستید مفید است .

نوشته می شود . ( توجه کنید که شما بایستی C:\ و در درایو “myodbc.log” گزارش در فایل

خودداری کنید .) اولین mysql2.dll را برای این انتخاب استفاده نمایید و از بکارگیری MySQL.dll

MySQL به کارگزار MyODBC باری که شما یک فایل گزارش ایجاد کردید پرس وجو هایی که

فرستاده است را بررسی کنید . بایستی بتوانید پرس و جوها را به وسیله جستجوی

بیابید . MyODBC.log در فایل ">mysql_real_query" رشته

ALLOW BIG results

به کار رود تا به بهینه ساز گفته DISTINICT و GROUP BY می تواند با SQL_BIG_ Result

مسقیما جداول MySQL ، شود مجموعه پاسخ می تواند سطرهای بسیاری داشته باشد . در این حالت

موقت

٣٢

در این حالت ، ترجیح می دهد تا یک مرتب سازی انجام دهد به MySQL . را در صورت نیاز بکار برد

انجام دهد . GROUP BY جای آنکه یک جدول موقت بر روی عناصر

Don’t Prompt on Connect

ایجاد می شود از کاربر نخواهد خواست تا به صورت دستی ، نام کاربری ODBC هنگامی که یک اتصال

و رمز عبور را وارد نماید ( واحتمالا سایر اطلاعات مورد نیاز )

سایر گزینه ها از این قرارند :

Ignore # in #.table.

Use manager cursors (experimental).

Don't use setlocale.

Pad CHAR to full length.

Return table names in SQLDescribeCol.

Use compressed protocol.

Ignore space after function names.

Don't optimize column width.

Force use of named pipes.

Change BIGINT columns to INT.

No catalog (experimental).

Read options from C:\my.cnf.

٣٣

PHP اجرای ایمن اسکریپت های

استفاده از مخفی کننده اسکریپت

برای اتصال به یک پایگاه داده نیاز است که رمز های عبور آن در برخی قسمتهای اسکریپت وجود داشته

باشد . اسکریپت های دیگر شما ممکن است اطلاعات حساس خود را داشته باشند . این اطلاعات اگر شما

خود را پنهان نکنید ، ممکن است افشا شوند . حفاظت کردن اسکریپتهایتان از PHP اسکریپت های

گفته می شود . هنگامی که شما یک اسکریپت را می پوشانید توسط “wrapping” چشمهای کنجکاو

اسکریپت دیگری که برنامه اصلی شما را پنهان کرده و آزمایشهای ایمنی را برای حصول اطمینان از

دستیابی مجاز انجام می دهد ، فراخوانی می گردد .

دیگر کاربران رمز عبورها را چگونه می بینند ؟

دو راه وجود دارد :

۱ )اگر شما به اندازه کافی دقت به خرج ندهید و رمز عبورهای خود را در ریشه اصلی وب تان و در درون

تجزیه و تحلیل نمی شود، قرار دهید (مانند PHP فایلی که توسط مفسر

هر کسی می تواند آنرا دریافت کند و محتویاتش را بدست آورد . ( http://www.mysite.com/pass.txt

این امر به شدت نادرست است .

۲ ) اگر شما رمز عبورهای خود را در فایلی قرار دهید که می تواند توسط وب سرور به طور مستقیم یا

بوسیله دیگر کاربرانی که در گروه شما و در همان سرور هستند ، خوانده شود .بکار گیری این روش بجز

توسط افرادی که می توانند یک وب سرور اختصاصی داشته باشند توصیه نمی شود .

اگر شما رمز عبور ها را در یک فایل که توسط دیگر کاربران قابل خواندن است ، قرار دهید آنها می توانند

به شاخه شما رفته و فایلها را مسقیما بخوانند . برخی میزبانهای وب از این Telnet ویا FTP بوسیله

را هنگامی که شما وارد “usr/home/username”). جلوگیری می کنند “chrooting” رفتار توسط

برای تغییر ریشه است .) اما بسیاری از میزبانها UNIX دستور Chroot . می شوید برابر با ”/“ می کند

در مورد فایلهایی که صرفا اجازه خواندن آن به وب سرور داده شده است ، اجازه دسترسی را به دیگر

کاربران نمی دهند. در این حالت نیز دیگران می توانند اسکریپتی بنویسند که با مشخه کاربری

کار کند . و این اسکریپت می تواند به تمام فایلهایی که در سرور وجود دارد و صرفا توسط “nobody”

آن خوانده می شود ، دسترسی پیدا کند.

٣۴

چگونه از این امر جلوگیری می کند ؟ Wrapping

نام کاربری کسی که به فایل می تواند دسترسی داشته باشد را برابر نام کاربری شما قرار Wrapping

می دهد . یک مخفی کننده ایمن ، چندین بررسی و آزمون امنیتی بر روی درخواستها ، قیل از اجرای آنها

انجام می دهد .

چیست ؟ Php-cgiwrap

یک اسکریپت مخفی کننده برای برنامه های cgiwrap . است PHP یک اسکریپت مخفی کننده برای

تهیه شده و PairNetworks آنست که توسط PHP نسخه مربوط به php-cgiwrap است و Perl

صرفا بر روی سرورهای آنان کار می کند . اگر از میزبان دیگری استفاده می کنید روشهای دیگری برای

مخفی کردن وجود دارد که می توانید از آنها استفاده کنید .

پوشش شفاف

مربوط به پوشش شفاف برای ایمنی صفحات است . برخی میزبانان وب PHP آخرین بحث ما درباره

استفاده نمایند و .php ارایه کرده اند . اگر صفحات از پسوند 3 PHP پوشش شفاف لاینفکی برای صفحات

در این صورت شما اصلا متوجه نخواهید شد که صفحات شما از پوشش استفاده می کنند اما نکته مهم

آنست که از فراهم کننده خدمات میزبانی وب خود در این باره پرسش نمایید .

استفاده کنید تا به طور mod-rewrite راههای مختلفی برای اجرای این کار وجود دارد . شما می توانید از

از طریق اسکریپت مخفی کننده ارسال شود . یا از خدمات سرور PHP خودکار تمام درخواستهای

استفاده نمایید . برای اطلاعات بیشتر از نشانی Apache suExec

استفاده کنید . http://www.apache.org/docs/suexec.htm

اخطار : اگر میزبان وب شما راهی برای اجرای ایمن اسکریپت هایتان پیش بینی نکرده ، و راهی برای

مخفی کردن رمز عبور ها از دید کاربران کنجکاو ندارید. بایستی به میزبانی مراجعه کنید که بیشتر نسبت

به امنیت کاربران اهمیت قایل است .

Mohsen_mahyar@yahoo.com

 

   + MOHSEN GHASEMI - ٥:٤٩ ‎ب.ظ ; ۱۳۸٩/۳/٢٩