Professional Documents
Culture Documents
اﻟﻤﻘﺪﻣﺔ 3 ...........................................................................................
اﻟﺒﺪاﯾﺔ ﻣﻊ 5 ................................................................................. php
اﻟﻔﺼﻞ اﻷول ) اﻟﻤﺘﻐﯿﺮات 6 ................................................... ( variables
اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ ) ﻋﺒﺎرات اﻟﺸﺮط واﻟﺘﻜﺮار ( 14 ................................................
اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ ) اﻟﻌﻼﻣﺎت اﻟﻤﻨﻄﻘﯿﺔ ( 19 ........................................................
اﻟﻔﺼﻞ اﻟﺮاﺑﻊ ) اﻟﻤﺼﻔﻮﻓﺎت ( 21 ................................................................
اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ) اﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ ( 34 .........................................................
اﻟﻔﺼﻞ اﻟﺴﺎدس ) اﻟﺪوال اﻟﺮﯾﺎﺿﯿﺔ واﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻷرﻗﺎم ( 37 ...............................
اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ) ﺗﻌﺮﯾﻒ واﺳﺘﺪﻋﺎء اﻟﺪوال ( 38 ................................................
اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ )اﺳﺘﺨﺪام JSONﻟﺘﺨﺰﯾﻦ وﺟﻠﺐ اﻟﺒﯿﺎﻧﺎ ( 41 ..................................
اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ) رﻓﻊ اﻟﻤﻠﻔﺎت إﻟﻰ اﻟﺨﺎدم ( 44 ..................................................
اﻟﻔﺼﻞ اﻟﻌﺎﺷﺮ ) دوال ﻣﻨﻮﻋﺔ ( 49 ...............................................................
اﻟﻔﺼﻞ اﻟﺤﺎدي ﻋﺸﺮ ) دوال اﻷﻣﻦ واﻟﺤﻤﺎﯾﺔ ( 78 .............................................
اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ ﻋﺸﺮ ) دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺼﻮر ( 62 ..........................................
اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ ﻋﺸﺮ ) دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺳﯿﺮﻓﺮ 71 ................................... ( FTP
اﻟﻔﺼﻞ اﻟﺮاﺑﻊ ﻋﺸﺮ ) اﺷﺘﻤﺎل اﻟﻤﻠﻔﺎت واﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ( 75 ...................................
اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ وﺗﺘﺒﻊ اﻷﺧﻈﺎء ( 91 ............................................
اﻟﻔﺼﻞ اﻟﺴﺎدس ﻋﺸﺮ )103 .......................................... ( session & cookies
اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ﻋﺸﺮ ) 106 ............................................................ ( MYSQL
اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت 110 ......................................................... ( sql
اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ ) دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ 118 ....................................... ( MYSQL
اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ 126 ........................................ ( OOP
ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ 139 ..................................................................................
)(3 اﻟﻣﻘدﻣﺔ
اﻟﻤﻘﺪﻣﺔ
ﻓﻜﺮت ﺑﺘﻌﻠﻢ ﺗﺼﻤﯿﻢ ﻣﻮاﻗﻊ اﻹﻧﺘﺮﻧﺖ وأﻧﺎ ﻟﻢ ﯾﻜﻦ ﻟﻲ أي ﺧﻠﻔﯿﺔ ﻣﺴﺒﻘﺔ ﻓﻲ اﻟﺒﺮﻣﺠﺔ وﻟﺴﺖ
ﺻﺎﺣﺐ أﺧﺘﺼﺎص ﻓﻲ ھﺬا اﻟﻤﺠﺎل واﻧﺎ ﻣﺠﺮد ھﺎوي أﻋﺸﻖ اﻟﺒﺮﻣﺠﺔ وﻻزﻟﺖ أﺗﻌﻠﻢ اﻟﻰ ﺣﺪ ھﺬه
اﻟﻠﺤﻈﺔ ﻋﻨﺪﻣﺎ ﺑﺪأت أﺗﻌﻠﻢ اﻟﺒﺮﻣﺠﺔ ) وﻻ ازال ( أﺣﺒﺒﺘﮭﺎ ﺑﺸﻜﻞ ﺟﻨﻮﻧﻲ وأﺻﺒﺤﺖ اﻟﺒﺮﻣﺠﺔ ﺗﺄﺧﺬ ﻛﻞ
وﻗﺘﻲ ﺣﯿﺚ أﺻﺒﺤﺖ أﻣﻀﻲ ﻓﻲ اﻟﯿﻮم ﻣﻦ 10اﻟﻰ 15ﺳﺎﻋﺔ اﻣﺎم ﺷﺎﺷﺔ اﻟﻼﺑﺘﻮب وﻓﻲ ﺑﻌﺾ
اﻷﺣﯿﺎن اﺳﺘﻤﺮ ﻷﻛﺜﺮ ﻣﻦ 30ﺳﺎﻋﺔ ﺑﺸﻜﻞ ﻣﺘﻮاﺻﻞ ,ﻓﻲ اﻟﺒﺪاﯾﺔ أﻛﺒﺮ ﻣﺸﻜﻠﺔ واﺟﮭﺘﻨﻲ ھﻲ أﻧﮫ ﻻ
ﺗﻮﺟﺪ ﻛﺘﺐ ﺿﺨﻤﺔ وﺗﺸﻤﻞ ﻛﻞ ﺟﻮاﻧﺐ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ واﻟﻤﺤﺘﻮى اﻟﻌﺮﺑﻲ ﺿﻌﯿﻒ ﻟﻠﻐﺎﯾﺔ واﻟﻤﺸﻜﻠﺔ
اﻷﻛﺒﺮ ھﻲ أﻧﻲ ﻻ أﺟﯿﺪ اﻟﻠﻐﺔ اﻹﻧﺠﻠﯿﺰﯾﺔ ﺑﺸﻜﻞ ﺟﯿﺪ ﻟﺬا ﺗﻘﺮﯾﺒﺎ ً ﻗﺮأت أﻛﺜﺮ اﻟﻜﺘﺐ اﻟﻌﺮﺑﯿﺔ اﻟﺘﻲ ﻛﺘﺒﺖ
ﻓﻲ ھﺬه اﻟﻠﻐﺔ وﺑﻤﺎ أن أﻛﺜﺮھﺎ ھﻮ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﺻﻔﺤﺎت ﻟﯿﺲ إﻻ وأﻏﻠﺐ اﻟﻤﻌﻠﻮﻣﺎت اﻟﺘﻲ
ﻓﯿﮫ ھﻲ ﻓﻘﻂ أﺳﺎﺳﯿﺎت اﻟﻠﻐﺔ وﻋﻨﺪ ﻗﺮاءة ﻛﺘﺎب ﺗﺠﺪ إن ﻛﻞ ﻣﺎﻓﯿﮫ ﺗﻘﺮﯾﺒﺎ ً ھﻮ ﻣﻮﺟﻮد ﻓﻲ ﻛﺘﺎب آﺧﺮ
ﻣﻊ إﺿﺎﻓﺔ ﺑﺴﯿﻄﺔ ﻟﺬا ﻓﻜﺮت ﺑﺄن أﺟﻤﻊ ﻛﻞ ﻣﻌﻠﻮﻣﺔ ﺟﺪﯾﺪة أﺗﻌﻠﻤﮭﺎ ﻓﻲ ھﺬه اﻟﻠﻐﺔ وادوﻧﮭﺎ ﺑﺸﻜﻞ
ﻣﺨﺘﺼﺮ ﻟﯿﺴﮭﻞ ﻋﻠﻲ اﻟﻮﺻﻮل ﻟﮭﺎ ﻋﻨﺪ ﻧﺴﯿﺎﻧﮭﺎ ﻟﺬا أﻧﺸﺄة ﻣﺮﺟﻊ ﺑﺴﯿﻂ ﺧﺎص ﺑﻲ ﻟﮭﺬ اﻟﻐﺔ ,وﺑﻌﺪ
ﻓﺘﺮة أﺻﺒﺢ ﻓﯿﮫ ﻣﺠﻤﻮﻋﺔ ﻻ ﺑﺄس ﺑﮭﺎ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت ﻓﻔﻜﺮت أن أﻧﺸﺮھﺎ ﺑﺸﻜﻞ ﻛﺘﺎب ﻟﯿﺴﺘﻔﺎد ﻣﻨﮭﺎ
ﻛﻞ ﻣﻦ ﯾﺤﺐ ﺗﻌﻠﻢ ﻟﻐﺔ اﻟـ , phpﻟﺬا ﻗﺪ ﺗﺠﺪون ﻓﻲ ھﺬا اﻟﻜﺘﺎب اﻟﻜﺜﯿﺮ ﻣﻦ اﻹﺧﺘﺼﺎر ﻓﻲ ﺷﺮح
اﻷواﻣﺮ وﻟﻢ أﺿﻊ أﻣﺜﻠﺔ ﻣﻄﻮﻟﮫ ﺑﻞ ﻓﻘﻂ أﻣﺜﻠﺔ ﺑﺴﯿﻄﺔ ﻟﺘﺼﻞ اﻟﻔﻜﺮة .
وﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ أﻧﺸﺄت ﻣﺮاﺟﻊ ﺧﺎﺻﺔ ﺑﻲ ﺗﺸﻤﻞ ﻋﺪة ﻟﻐﺎت وﺗﻘﻨﯿﺎت ﻣﻨﮭﺎ ﻣﺮﺟﻊ ﻟﻠﻐﺔ HTML
وﻣﺮﺟﻊ ﻟﻠﻐﺔ CSSوﻣﺮﺟﻊ ﻟﻠﻐﺔ JavaScriptوﺳﺄﻧﺸﺮھﺬه اﻟﻜﺘﺐ ﻗﺮﯾﺒﺎ ً ﻟﺘﻜﻮن ﻣﺘﺎﺣﺔ ﻟﻠﺠﻤﯿﻊ .
ﻣﻼﺣﻈﺔ /ھﺬه ھﻲ اﻟﻄﺒﻌﺔ اﻷوﻟﻰ ﻣﻦ اﻟﻜﺘﺎب طﺒﻌﺖ ﺑﺘﺎرﯾﺦ 2014/4/20وﻣﻦ اﻟﻤﺤﺘﻤﻞ أن أﺿﯿﻒ
ﻋﻠﻰ ھﺬا اﻟﻤﺮﺟﻊ اﻟﺼﻐﯿﺮ ﺑﻌﺾ اﻹﺿﺎﻓﺎت وأﺟﺮي ﻋﻠﯿﮫ ﺑﻌﺾ اﻟﺘﻌﺪﯾﻼت وأﻧﺸﺮه ﻛﻄﺒﻌﮫ ﺛﺎﻧﯿﺔ )
ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ ( .
ارﺣﺐ ﺑﻜﻞ أﺳﺌﻠﺘﻜﻢ واﺳﺘﻔﺴﺎراﺗﻜﻢ وأﯾﻀﺎ ً ﻛﻞ أﻗﺘﺮاﺣﺎﺗﻜﻢ ﻷﻧﮫ ﻛﻤﺎ ﻗﻠﺖ ﺳﺎﺑﻘﺎ ً إﻧﻲ ﻻزﻟﺖ ﻓﻲ ﺑﺪاﯾﺔ
طﺮﯾﻘﻲ ﻓﻲ اﻟﺒﺮﻣﺠﺔ وﻻ زﻟﺖ اﺗﻌﻠﻢ ﺷﻲء ﺟﺪﯾﺪ ﻛﻞ ﯾﻮم .
phpھﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻹﻧﺸﺎء ﺗﻄﺒﯿﻘﺎت وﺻﻔﺤﺎت ﻣﻮاﻗﻊ اﻹﻧﺘﺮﻧﺖ وأن phpھﻲ إﺧﺘﺼﺎر
ﻟـ ) ( Personal Home Pagesوﺗﻌﻨﻲ اﻟﺼﻔﺤﺎت اﻟﺸﺨﺼﯿﺔ Rasmus Lerdof ,ھﻮ ﻣﻦ
أﻧﺸﺄ ﻟﻐﺔ phpوﻓﻲ اﻟﺒﺪاﯾﺔ ﻛﺎﻧﺖ ﻟﻐﺔ phpﻟﻐﺔ ﺑﺴﯿﻄﺔ ﻟﻜﻦ ﻣﻤﺎ ﺳﺎھﻢ ﻓﻲ ﺗﻮﺳﻌﮭﺎ ھﻮ ان ﺻﺎﺣﺒﮭﺎ
ﻗﺪ طﺮﺣﮭﺎ ﻋﻠﻰ اﻹﻧﺘﺮﻧﺖ ﺑﺸﻜﻞ ﻣﺠﺎﻧﻲ وﺟﻌﻠﮭﺎ ﻣﻔﺘﻮﺣﺔ اﻟﻤﺼﺪر أي أﻧﮫ ﯾﻤﻜﻦ ﻷي ﺷﺨﺺ اﻟﺘﻌﺪﯾﻞ
أو اﻹﺿﺎﻓﺔ ﻋﻠﯿﮭﺎ ,وﻣﻦ ﻓﺘﺮة إﻧﺸﺎﺋﮭﺎ اﻟﻰ اﻵن ﺗﻢ إﺿﺎﻓﺔ اﻟﻜﺜﯿﺮ ﻣﻦ اﻹﺿﺎﻓﺎت ﻋﻠﯿﮭﺎ ﻣﻦ ﻗﺒﻞ
اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﻤﺒﺮﻣﺠﯿﻦ ﻓﺎﺻﺒﺤﺖ ﻟﻐﺔ phpﻟﻐﺔ ﻗﻮﯾﺔ وﻓﯿﮭﺎ اﻟﻜﺜﯿﺮ ﻣﻦ اﻟﻤﯿﺰات ﺣﯿﺚ أﻧﮭﺎ ﺗﻌﺘﺒﺮ ﻣﻦ
اﻟﻠﻐﺎت ﺳﮭﻠﺔ اﻟﺘﻌﺎﻣﻞ وﺳﺮﯾﻌﺔ ﻓﻲ ﺗﻨﻔﯿﺬ اﻟﺒﺮاﻣﺠﯿﺎت وﻟﻐﺔ آﻣﻨﮫ وھﻲ ﺗﻌﻤﻞ ﻋﻠﻰ ﺟﻤﯿﻊ أﻧﻀﻤﺔ
اﻟﺘﺸﻐﯿﻞ ﺑﺨﻼف اﻟﻜﺜﯿﺮ ﻣﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ اﻷﺧﺮى ,وﻛﻞ ذﻟﻚ ﺳﺎھﻢ ﺑﺄﻧﺘﺸﺎر ھﺬه اﻟﻠﻐﺔ إﻧﺘﺸﺎرا ً
واﺳﻌﺎ ً ﺣﯿﺚ ﯾﻌﺘﻘﺪ اﻟﺒﻌﺾ إن %75ﻣﻦ ﻣﻮاﻗﻊ اﻹﻧﺘﺮﻧﺖ ﻣﺼﻤﻤﺔ ﺑﮭﺬه اﻟﻠﻐﺔ وﻣﻦ ﺑﯿﻦ ھﺬه اﻟﻤﻮاﻗﻊ
ﻣﻮﻗﻊ اﻟﺘﻮاﺻﻞ اﻹﺟﺘﻤﺎﻋﻲ , Facebookﻟﻐﺔ phpﺗﻌﺘﺒﺮ ﻟﻐﺔ ﻣﻦ طﺮف اﻟﺨﺎم Serverﺣﯿﺚ أن
ﻣﻌﺎﻟﺠﮭﺎ ﯾﻮﺟﺪ ﻋﻠﻰ اﻟﺨﺎدم أي أﻧﻚ إذا ﻛﺘﺒﺖ ﺑﺮﻧﺎﻣﺞ ﺑﮭﺬه اﻟﻠﻐﺔ وﺣﺎوﻟﺖ ﺗﺸﻐﯿﻠﮫ ﻣﺒﺎﺷﺮﺗﺎ ً ﻣﻦ
اﻟﻤﺘﺼﻔﺢ ﻓﺈﻧﮫ ﻟﻦ ﯾﻌﻤﻞ ﻷﻧﻚ ﯾﺠﺐ أن ﺗﺮﻓﻊ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ﺧﺎدم ﻋﻠﻰ اﻹﻧﺘﺮﻧﺖ وﺑﻤﺎ أن ھﺬه
اﻟﻌﻤﻠﯿﺔ ﺳﺘﻜﻮن ﺑﻄﯿﺌﺔ إذ أﻧﻨﺎ ﻧﺤﺘﺎج اﻟﻰ ﺗﺠﺮﺑﺔ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﻧﻜﺘﺒﮫ واﻟﺘﻌﺪﯾﻞ ﻋﻠﯿﮫ ﻣﺮارا ً وﺗﻜﺮارا ً
ﻗﺒﻞ أن ﯾﻜﺘﻤﻞ ﻟﺬا ﺗﻮﺟﺪ ھﻨﺎك اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺗﺴﻤﻰ ﺳﯿﺮﻓﺮ ﻣﺤﻠﻲ وإن ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ھﻮ
ﻋﺒﺎرة ﻋﻦ ﺳﯿﺮﻓﺮ ) ﺧﺎدم ( ﯾﺘﻢ ﺗﻨﺼﯿﺒﮫ ﻋﻠﻰ ﺟﮭﺎزك اﻟﺸﺨﺼﻲ وﺑﮭﺬا ﯾﻤﻜﻨﻚ ﺗﺸﻐﯿﻞ ﻣﺎ ﺗﻜﺘﺒﮫ ﺑﻠﻐﺔ
اﻟـ phpﺑﺪون اﻟﺤﺎﺟﺔ ﻟﻸﺗﺼﺎل ﺑﺎﻹﻧﺘﺮﻧﺖ وﻣﻦ ھﺬه اﻟﺒﺮاﻣﺞ AppServو Apache Serverو
Xampوﻏﯿﺮھﺎ اﻟﻌﺪﯾﺪ وﯾﻤﻜﻨﻚ أن ﺗﻨﺰل واﺣﺪأ ﻣﻦ اﻹﻧﺘﺮﻧﺖ وﺗﻨﺼﺒﮫ ﻋﻠﻰ ﺟﮭﺎزك ﻟﺘﺘﻤﻜﻦ ﻣﻦ
اﻟﻌﻤﻞ ﺑﺴﮭﻮﻟﮫ ﻣﻊ , phpأﻧﺎ اﺳﺘﺨﺪم AppServوھﻮ ﺑﺮﻧﺎﻣﺞ ﺳﮭﻞ وﺟﻤﯿﻞ ﺟﺪا ً .
ﻣﻼﺣﻈﺔ /ﯾﻔﺘﺮض ﺑﺎﻟﻘﺎرئ أن ﯾﻌﺮف ﻛﯿﻔﯿﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻟﻐﺔ htmlﻗﺒﻞ أن ﯾﻘﺮاء ھﺬا اﻟﻜﺘﺎب .
أﺣﻤﺪ إﺑﺮاھﯿﻢ
)(5 اﻟﺑداﯾﺔ ﻣﻊ php
اﻟﺒﺪاﯾﺔ ﻣﻊ php
إن ﻟﻐﺔ phpﺗﺒﺪأ ﺑﺎﻟﻮﺳﻢ ) ( <?phpووﺳﻢ اﻟﻨﮭﺎﯾﺔ ھﻮ ) >? ( وﻓﻲ داﺧﻞ ھﺬﯾﻦ اﻟﻮﺳﻤﯿﻦ ﯾﻜﺘﺐ ﻛﻮد
اﻟﺒﺮﻧﺎﻣﺞ ,وﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ وﺳﻢ اﻟﺒﺪاﯾﺔ ﺑﮭﺬا اﻟﺸﻜﻞ ) ?< (أي ﻣﻦ دون ﻛﻠﻤﺔ phpﻟﻜﻦ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ
ﯾﻤﻜﻦ أن ﯾﺘﺪاﺧﻞ ھﺬا اﻟﻨﺺ ﻣﻊ xmlﻟﺬا ﻓﻤﻦ اﻷﻓﻀﻞ ﻛﺘﺎﺑﺔ وﺳﻢ اﻟﺒﺪاﯾﺔ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ ) . ( <?php
اﻟﺪاﻟﺔ echo
وظﯿﻔﺔ ھﺬه اﻟﺪاﻟﺔ ) (echoطﺒﺎﻋﺔ )ﻋﺮض( ﻣﺎ ﯾﻜﺘﺐ داﺧﻠﮭﺎ
ﻣﺜﺎل -:
<?php
;"echo "welcome
>?
ﻛﻤﺎ ﻻﺣﻈﺖ ﻓﺄن اﻟﻨﺺ اﻟﻤﺪﺧﻞ ﯾﻜﺘﺐ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ) " " ( ,ﺣﯿﺚ إﻧﻨﺎ ﻧﻜﺘﺐ ھﺬﯾﻦ
اﻟﻌﻼﻣﺘﯿﻦ ﻓﻲ أي ﻣﻜﺎن ﻧﺮﯾﺪ أن ﻧﻀﻊﻧﺼﺎ ً وذﻟﻚ ﻟﻜﻲ ﻧﺨﺒﺮ اﻟﻤﺤﻠﻞ إن ھﺬه ﻗﯿﻤﺔ ﻧﺼﯿﺔ ,وﻟﻜﻦ إن
أردﻧﺎ إن ﻧﻜﺘﺐ ﻗﯿﻤﺔ ﻋﺪدﯾﺔ ﻓﻼ ﻧﺤﺘﺎج أن ﻧﻜﺘﺐ ﻋﻼﻣﺘﻲ اﻟﺘﻨﺼﯿﺺ ,وﻓﻲ ﻧﮭﺎﯾﺔ اﻟﺴﻄﺮ ﻧﻀﻊ ﻓﺎرزة
ﻣﻨﻘﻮطﺔ ) ; ( ﺣﯿﺚ إن ھﺬه اﻟﻔﺎرزة اﻟﻤﻨﻘﻮطﺔ ﺗﻮﺿﻊ ﻓﻲ ﻧﮭﺎﯾﺔ ﻛﻞ ﺳﻄﺮ ﻓﻲ ھﺬه اﻟﻠﻐﺔ وذﻟﻚ ﻟﻜﻲ
ﻧﺨﺒﺮ اﻟﻤﺤﻠﻞ ﻋﻦ اﻧﺘﮭﺎء ﺳﻄﺮ وﺑﺪأ ﺳﻄﺮ ﺟﺪﯾﺪ ,وإن ﻧﺴﯿﺖ وﺿﻊ ھﺬه اﻟﻔﺎرزة اﻟﻤﻨﻘﻮطﺔ ﻓﻲ ﻧﮭﺎﯾﺔ
أي ﺳﻄﺮ ﻓﺴﻮف ﯾﺤﺪث ﺧﻄﺄ .
ﻣﻼﺣﻈﺔ /اﻟﻔﻮاﺻﻞ ﺑﯿﻦ اﻟﺪاﻟﺔ واﻟﻘﯿﻤﺔ ﻓﻲ ﻟﻐﺔ ) phpﻓﻲ ﻛﻞ دوال اﻟﻠﻐﺔ ( ﻻ ﺗﺆﺛﺮ ﻋﻠﻰ اﻟﺒﺮﻧﺎﻣﺞ ,
ﻻﺣﻆ ھﺬﯾﻦ اﻟﻤﺜﺎﻟﯿﻦ ﺣﯿﺚ ﻻ ﯾﻮﺟﺪ ﻓﺮق ﺑﯿﻨﮭﻤﺎ -:
;"echo "welcome
اﻟﻔﺼﻞ اﻷول
) اﻟﻤﺘﻐﯿﺮات ( Variables
إن اﻟﻤﺘﻐﯿﺮ ﯾﻤﻜﻦ أن ﯾﻌﻄﻰ أي اﺳﻢ وأﯾﻀﺎ ﯾﻤﻜﻦ إﻋﻄﺎﺋﮫ أي ﻗﯿﻤﺔ وﻟﻜﻲ ﯾﺘﻌﺮف اﻟﻤﺤﻠﻞ ﻋﻠﻰ إن ھﺬا
ﻣﺘﻐﯿﺮ ﯾﺠﺐ وﺿﻊ ﻋﻼﻣﺔ دوﻻر ) ( $ﻗﺒﻞ اﺳﻢ اﻟﻤﺘﻐﯿﺮ ,وﻻﺣﻆ أن اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﺣﺴﺎس ﻟﺤﺎﻟﺔ
اﻷﺣﺮف اﻟﻜﺒﯿﺮة واﻟﺼﻐﯿﺮة ﺣﯿﺚ إن Mﻟﯿﺴﺖ ھﻲ ﻧﻔﺴﮭﺎ , mﯾﻤﻜﻦ أن ﯾﺘﻜﻮن اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻣﻦ
اﻟﺤﺮوف اﻻﻧﺠﻠﯿﺰﯾﺔ اﻟﻜﺒﯿﺮة واﻟﺼﻐﯿﺮة وﻣﻦ أرﻗﺎم ) ( 0 - 9وﻟﻜﻦ ﻻ ﯾﻤﻜﻦ أن ﯾﻜﻮن اﺳﻢ اﻟﻤﺘﻐﯿﺮ
ﻓﻘﻂ أرﻗﺎم وﯾﻤﻜﻦ أن ﺗﺪﺧﻞ رﻣﺰ واﺣﺪ ﻓﻘﻂ ﻓﻲ اﺳﻢ اﻟﻤﺘﻐﯿﺮ وھﺬا اﻟﺮﻣﺰ ھﻮ ) _ ( ﻣﺜﻞ , $man_5
ﻻﺣﻆ أن اﻟﺮﻣﺰ ) _ ( ﯾﺨﺘﻠﻒ ﻋﻦ اﻟﺮﻣﺰ ) . ( -
ﻣﺜﺎل -:
; $Ahmed = 50
;" $Ali = " welcome
; echo $Ahmed
; echo $Ali
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ إﻧﺸﺎء ﻣﺘﻐﯿﺮ اﺳﻤﮫ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ ﻏﯿﺮة وذﻟﻚ ﺑﺈﺿﺎﻓﺔ اﻟﻌﻼﻣﺔ ) ( $ﻗﺒﻞ اﺳﻢ اﻟﻤﺘﻐﯿﺮ ,
وﯾﺴﺘﻔﺎد ﻣﻦ ھﺬه اﻟﻄﺮﯾﻘﺔ إذا أرﯾﺪ رﺑﻂ ﻣﺘﻐﯿﺮ ﻣﻌﯿﻦ ﺑﻤﺘﻐﯿﺮ آﺧﺮ ﻣﺜﻞ اﻻﺳﻢ وﻛﻠﻤﺔ اﻟﺴﺮ .
ﻣﺜﺎل -:
; "$a = "sager
ﻻﺣﻆ ھﻨﺎ إﻧﻨﺎ أﻧﺸﺄﻧﺎ ﻣﺘﻐﯿﺮ ﺟﺪﯾﺪ اﺳﻤﮫ sagerوﻗﯿﻤﺘﮫ . My programوﻟﻄﺒﺎﻋﺔ ھﺬا اﻟﻤﺘﻐﯿﺮ
اﻟﺠﺪﯾﺪ ﯾﻤﻜﻦ أن ﻧﻜﺘﺐ أي ﺻﯿﻐﺔ ﻣﻦ ھﺬه اﻟﺼﯿﻎ اﻟﺜﻼﺛﺔ -:
)(7 اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ( Variables
; echo $$a
; }"echo ${"$a
; $X
او ﯾﻤﻜﻦ أن ﻧﻌﻄﯿﮫ ﻗﯿﻤﺔ ﻓﺎرﻏﺔ وذﻟﻚ ﺑﺈﺳﻨﺎد اﻟﻘﯿﻤﺔ nullواﻟﺘﻲ ھﻲ ﺗﻌﺒﺮ ﻋﻦ اﻟﻼﺷﻲء ) اﻟﻘﯾﻣﺔ
اﻟﻔﺎرﻏﺔ (
; $x=null
اﻟﻤﺘﻐﯿﺮات اﻟﺜﺎﺑﺘﺔ
وھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺘﻐﯿﺮات ﯾﺘﻢ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ ﻛﻤﺘﻐﯿﺮات ﻋﺎﻣﺔ ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺼﻔﺤﺔ ﻛﺎﻣﻠﺔ ,
واﻟﻔﺮق ﺑﯿﻨﮫ وﺑﯿﻦ اﻟﻤﺘﻐﯿﺮ اﻟﻌﺎدي إﻧﮫ ﻻ ﯾﺴﺒﻖ ﺑﻌﻼﻣﺔ دوﻻر ) ( $ﻋﻨﺪ ﻛﺘﺎﺑﺔ اﻻﺳﻢ وﯾﻨﻄﺒﻖ ﻋﻠﻰ
اﻻﺳﻢ ﻣﺎ ﯾﻨﻄﺒﻖ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ اﻟﻌﺎدي ﻣﻦ ﺣﺮوف وأرﻗﺎم وﻋﻼﻣﺔ ) _ ( وﯾﺴﺘﺨﺪم ھﺬا اﻟﻨﻮع ﻣﻦ
اﻟﻤﺘﻐﯿﺮات ﻓﻲ ﺣﻔﻆ اﻟﻤﺘﻐﯿﺮات اﻟﮭﺎﻣﺔ ﻋﻠﻰ ﻣﺴﺘﻮى ﺻﻔﺤﺔ أو ﺑﺮﻧﺎﻣﺞ ﻛﺎﻣﻞ وﯾﺘﻢ ﻓﺘﺢ ھﺬا اﻟﻤﺘﻐﯿﺮ
ﻋﻦ طﺮﯾﻖ اﻟﺪاﻟﺔ ) ( defineواﻟﻘﺎﻋﺪة اﻟﻌﺎﻣﺔ ﻟﮭﺎ -:
;) ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ,اﺳﻢ اﻟﻤﺘﻐﯿﺮ ( define
ﻣﺜﺎل -:
;)"define ( man ,"Ahmed
; echo man
)(8 اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ( Variables
أﻧﻮاع اﻟﻤﺘﻐﯿﺮات
ﯾﺘﻢ ﺗﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮات اﻟﺮﻗﻤﯿﺔ ﺑﻤﺠﺮد إﻋﻄﺎء اﻟﻤﺘﻐﯿﺮ ﻗﯿﻤﺔ رﻗﻤﯿﺔ وﺑﺪون ﻋﻼﻣﺎت اﻗﺘﺒﺎس ) " " ( .
ﻣﺜﺎل -:
; $x = 5
ﻣﺜﺎل/
;$x=5
; $x * = 4
; echo $x
ھﻨﺎ ﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ 20
ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﻤﺘﻐﯿﺮات ﯾﻘﺒﻞ ﺗﺨﺰﯾﻦ ﻧﺼﻮص وأرﻗﺎم وﻟﻜﻦ ﺑﻮﺿﻌﮭﺎ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ )" "(.
ﻣﺜﺎل -:
;"$y = " welcome
وھﺬا اﻟﻤﺘﻐﯿﺮ ﺗﻜﻮن ﻟﮫ ﻗﯿﻤﺘﺎن أﻣﺎ trueأو falseوﻧﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺔ ھﺬا اﻟﻤﺘﻐﯿﺮ ﻓﻘﻂ ﺑﺈﺿﺎﻓﺔ إﺣﺪى
اﻟﻘﯿﻤﺘﯿﻦ إﻟﻰ اﻟﻤﺘﻐﯿﺮ .
ﻣﺜﺎل -:
; $y = true
; $x = false
) ( 10 اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ( Variables
دوال اﻟﻤﺘﻐﯿﺮات
اﻟﺪاﻟﺔ intval
ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ ﺗﺤﻮﯾﻞ اﻟﻤﺘﻐﯿﺮ ﺑﺠﻤﯿﻊ أﺣﻮاﻟﮫ إﻟﻰ ﻣﺘﻐﯿﺮ ﺻﺤﯿﺢ ,ﻓﺈذا ﻛﺎنﻧﺼﺎ ً وﯾﻮﺟﺪ ﺑﮫ رﻗﻢ
ﯾﺘﻢ اﺳﺘﺨﺮاج اﻟﺮﻗﻢ ﻣﻨﮫ .
ﻣﺜﺎل -:
;)"echo intval ("504Man //504
اﻟﺪاﻟﺔ floatval
ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ أو اﺳﺘﺨﺮاج اﻷرﻗﺎم اﻟﻌﺸﺮﯾﺔ ﻣﻦ اﻟﻤﺘﻐﯿﺮات .
ﻣﺜﺎل -:
;)"echo floatval ("60.7Man //60.7
اﻟﺪاﻟﺔ doubleval
ھﺬه اﻟﺪاﻟﺔ ﺗﺤﻮل اﻟﻤﺘﻐﯿﺮ إﻟﻰ ﻧﻮع اﻟﺮﻗﻤﻲ اﻟﻤﻀﺎف ﻣﻦ أي ﻧﻮع آﺧﺮ .
ﻣﺜﺎل/
; "$x="arab 50.9 program
; ) $y=doubleval( $x
; print $y
اﻟﺪاﻟﺔ gettype
ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ إﺧﺮاج ﻗﯿﻤﺔ ھﻲ ﻋﺒﺎرة ﻋﻦ ﻧﻮع اﻟﻤﺘﻐﯿﺮ أﻣﺎ ﻧﺼﻲ stringأو رﻗﻤﻲ )ﻋﺪدي(
integerأو ﻣﻨﻄﻘﻲ , Booleanوذﻟﻚ ﺑﻮاﺳﻄﺔ ﺗﻤﺮﯾﺮ اﻟﻤﺘﻐﯿﺮ ﻋﻠﻰ اﻟﺪاﻟﺔ .
ﻣﺜﺎل -:
; $y =10
اﻟﺪاﻟﺔ var_dump
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺘﺤﺪﯾﺪ ﻧﻮع اﻟﻤﺘﻐﯿﺮ واﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﯿﮫ .
ﻣﺜﺎل/
; ) var_dump( $x
اﻟﺪاﻟﺔ settype
ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻰ ﺗﺤﻮﯾﻞ ﻧﻮع اﻟﻤﺘﻐﯿﺮ اﻟﻤﻤﺮر إﻟﯿﮭﺎ إﻟﻰ أي ﻧﻮع آﺧﺮ .
ﻣﺜﺎل -:
; $Bol = false
اﻟﺪاﻟﺔ unset
ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻰ إزاﻟﺔ وﺟﻮد اﻟﻤﺘﻐﯿﺮ ﻣﻦ اﻟﺼﻔﺤﺔ ,ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻓﻲ اﻟﺤﻤﺎﯾﺔ أﺣﯿﺎﻧﺎ
وأﺣﯿﺎﻧﺎ ً أﺧﺮى ﻓﻲ ﺗﺴﺮﯾﻊ ﻋﻤﻞ اﻟﺼﻔﺤﺎت .
ﻣﺜﺎل -:
; "$y = "value
; echo $y
; ) unset ( $y
; echo $y
اﻟﻨﺘﯿﺠﺔ إﻧﮫ ﺳﺘﻈﮭﺮ اﻟﻘﯿﻤﺔ valueﻣﺮة واﺣﺪة ﻓﻘﻂ ﻷﻧﮫ أزﯾﻞ ﺑﻌﺪ اﻟﻌﺮض اﻷول .
اﻟﺪاﻟﺔ isset
ﺗﺴﺘﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ إذا ﻛﺎن ھﺬا اﻟﻤﺘﻐﯿﺮ ﺗﻢ إﻧﺸﺎﺋﮫﻣﺴﺒﻘﺎ ً أم ﻟﻢ ﯾﺘﻢ إﻧﺸﺎؤه ,وھﻲ ﻻ ﺗﺘﻄﻠﺐ
ﺳﻮى اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﺗﺮﯾﺪ ﻓﺤﺺ وﺟﻮده وﺳﻮف ﺗﺮﺟﻊ اﻟﻘﯿﻤﺔ ) ( 1إذا ﺗﻢ إﻧﺸﺎؤه وﻻ ﺗﺮﺟﻊ
ﺷﻲء إذا ﻟﻢ ﯾﻜﻦ اﻟﻤﺘﻐﯿﺮ ﻣﻮﺟﻮد .
ﻣﺜﺎل -:
; "$n = "Man
اﻟﺪاﻟﺔ is_bool
ﺗﺒﯿﻦ ھﺬه اﻟﺪاﻟﺔ ھﻞ اﻟﻤﺘﻐﯿﺮ ﻣﻦ ﻧﻮع Booleanإذا ﻛﺎن ﻛﺬﻟﻚ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ . true
ﻣﺜﺎل/
; $x=false
اﻟﺪاﻟﺔ is_double
ﺗﺒﯿﻦ ھﺬه اﻟﺪاﻟﺔ ھﻞ اﻟﻤﺘﻐﯿﺮ ﻣﻦ اﻟﻨﻮع doubleإذا ﻛﺎن ﻛﺬﻟﻚ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ . true
اﻟﺪاﻟﺔ is_int
ﺗﺒﯿﻦ ھﺬه اﻟﺪاﻟﺔ ھﻞ اﻟﻤﺘﻐﯿﺮ ﻣﻦ اﻟﻨﻮع integerإذا ﻛﺎن ﻛﺬﻟﻚ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ . true
اﻟﺪاﻟﺔ is_numeric
ﺗﺑﯾن ھذه اﻟداﻟﺔ ھل اﻟﻣﺗﻐﯾر ﻣن ﻧوع رﻗﻣﻲ إذا ﻛﺎن ﻛذﻟك ﺗﻌﯾد اﻟﻘﯾﻣﺔ . true
) ( 14 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (
اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ
) ﻋﺒﺎرات اﻟﺸﺮط واﻟﺘﻜﺮار (
ھﺬه اﻟﻌﺒﺎرة ﺗﻌﻨﻲ إذا ﺗﺤﻘﻖ اﻟﺸﺮط ﻧﻔﺬ ھﺬا اﻷﻣﺮ .
ﻣﺜﺎل/
; $x =10
} ; " ﺗﺴﺎوي " if ( $x == 10 ) { echo
* ﻻﺣﻆ اﻟﻔﺎرزة اﻟﻤﻨﻘﻮطﺔ ﻻ ﺗﻮﺿﻊ ﻓﻲ ﺣﺎﻟﺔ اﻟﺸﺮط .
اﻟﻮﺻﻒ اﻷداة
ﻟﻤﺴﺎواة اﻟﻘﯿﻢ ﻓﻘﻂ ==
ﻟﻤﺴﺎواة اﻟﻘﯿﻢ وﻧﻮع اﻟﻤﺘﻐﯿﺮ ===
أﺻﻐﺮ ﻣﻦ <
أﻛﺒﺮ ﻣﻦ >
أﺻﻐﺮ ﻣﻦ أو ﯾﺴﺎوي =<
أﻛﺒﺮ ﻣﻦ أو ﯾﺴﺎوي =>
ﻻ ﯾﺴﺎوي ><
ﻋﺪم اﻟﻤﺴﺎواة ﻓﻲ اﻟﻘﯿﻤﺔ ﻓﻘﻂ =!
ﻋﺪم اﻟﻤﺴﺎواة ﻓﻲ اﻟﻘﯿﻤﺔ واﻟﻨﻮع = =!
) ( 15 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (
وھﻲ ﺗﺸﺒﮫ ﻋﺒﺎرة ifﻟﻜﻦ ھﻨﺎ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط ﺳﯿﻨﻔﺬ أﻣﺮ آﺧﺮ ﺑﻌﺪ . else
ﻣﺜﺎل /
; $x = 5
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ ) ( ifﻓﻲ داﺧﻞ ﻋﺒﺎرة ﺷﺮطﯿﺔ ﺛﺎﻧﯿﺔ ﻻﺣﻆ ھﺬا اﻟﻤﺜﺎل -:
; $x = 10
} ; " if ( $x > 10 ) { echo " Big
} ; " else if ( $x < 10 ) { echo " small
} ; " else { echo " welcome
وﯾﻤﻜﻦ أن ﻧﻀﯿﻒ ﻋﺒﺎرات ﻛﻤﺎ ﻧﺸﺎء ,ﻛﺬﻟﻚ ﯾﻤﻜﻦ ﺗﻌﺸﯿﺶ اﻟﻌﺒﺎرات اﻟﺸﺮطﯿﺔ .
ﻣﺜﺎل /
ﻋﺑﺎرة اﻟﺷرط ھذه ھﻲﺗﻣﺎﻣﺎ ً ﻧﻔس اﻟﻌﺑﺎرة اﻟﺳﺎﺑﻘﺔ ifﻟﻛﻧﮭﺎ ﻓﻲ اﻟﻌﺎدة ﺗﺳﺗﺧدم ﻟﻠﺷروط اﻟﻘﺻﯾرة
اﻟﻣﻛوﻧﺔ ﻣن ﺳطر واﺣد وﯾﻣﻛن أن ﻧﺿﻊ ﺑﻌدھﺎ ﻧﻘطﺗﯾن ﻟﺗﻛون ﺑﻣﺛﺎﺑﺔ , elseوﺗﻛون اﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ
ﻟﮭﺎ ﺑﮭذا اﻟﺷﻛل
; ﻛود ﻋدم ﺗﺣﻘق اﻟﺷرط :ﻛود ﺗﺣﻘق اﻟﺷرط ? اﻟﺷرط
) ( 16 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (
وﺗﺴﺘﺨﺪم ھﺬه اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﻋﺪة ﺷﺮوط وﺗﻨﻔﯿﺬ أﻣﺮ ﺧﺎص ﺑﻜﻞ ﺷﺮط وإن أردﻧﺎ
اﺳﺘﺨﺪام اﻟﻌﺒﺎرة ifﻓﺈﻧﻨﺎ ﻧﺤﺘﺎج إﻟﻰ ﺗﻜﺮار ھﺬه اﻟﻌﺒﺎرة ﻋﺪة ﻣﺮات وﻟﺘﻼﻓﻲ ھﺬا اﻟﺘﻜﺮار ﻧﺴﺘﺨﺪم
اﻟﻌﺒﺎرة ) .( switch
ﻣﺜﺎل -:
; $x =2
;switch ( $x ) { case 1
; " واﺣﺪ " = $y
; break
;case 2
; " اﺛﻨﺎن " = $y
; break
;case 3
; " ﺛﻼﺛﺔ " = $y
} ; break
) ( 17 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (
ﻣﺜﺎل -:
} ;">for ($x = 1; $x < 5 ; $x++) { echo $x . "<br
ﻣﺜﺎل -:
; $x = 1
2
3
4
5
* ﻻﺣﻆ اﻟﻔﺮق ﺑﯿﻦ اﻟﻌﺒﺎرة forواﻟﻌﺒﺎرة . while
) ( 18 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (
ﺣﯿﺚ ﻓﻲ ھﺬه اﻟﺤﻠﻘﺔ ﺳﻮف ﯾﺘﻢأوﻻ ً ﺗﻨﻔﯿﺬ اﻟﻜﻮد وﺑﻌﺪھﺎ ﯾﺘﻢ اﻟﺘﺤﻘﻖ ﻣﻦ اﻟﺸﺮط ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ
ھﻲ -:
; ) اﻟﺸﺮط ( } whileﻛﻮد { do
) ( 19 اﻟﻔﺻل اﻟﺛﺎﻟث ) اﻟﻌﻼﻣﺎت اﻟﻣﻧطﻘﯾﺔ (
اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ
اﻟﻌﻼﻣﺎت اﻟﻤﻨﻄﻘﯿﺔ ) ! ( and , or , xor ,
إن ھﺬه اﻟﻌﻼﻣﺎت اﻟﻤﻨﻄﻘﯿﺔ ﺗﺘﯿﺢ ﻟﻚ ﺗﻨﻔﯿﺬ اﻟﻜﻮد ﺑﻌﺪ اﻟﺘﺤﻘﻖ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﺷﺮوطوأﯾﻀﺎ ً ﺗﻨﻔﯿﺬ اﻟﻜﻮد
إذا ﺗﺤﻘﻘﺖ ﻛﻞ اﻟﺷروط ) ( andأو ﺗﺤﻘﻖ ﺷﺮط واﺣﺪ أو ﻛﻠﮭﺎ ) ( orوﯾﻣﻛن اﻟﺗﺣﻘق ﻣن ﺻﺣﺔ
ﺷرط واﺣد ﻓﻘط وﻻ ﯾﺻﺢ ﺗﺣﻘق أﻛﺛر ﻣن ﺷرط ) ( xorوﯾﻤﻜﻦأﯾﻀﺎ ً اﻟﺘﺤﻘﻖ ﻣﻦ ﻋﺪم ﺻﺤﺔ
ﺷﻲء ﻟﻜﻲ ﺗﻌﻤﻞ ﻋﻠﻰ ﺗﻨﻔﯿﺬ ﺷﻲء آﺧﺮ ) ! (
ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل ) ( andأو ) && ( ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ ﻋﺪة ﺷﺮوط ﻓﻲ وﻗﺖ واﺣﺪ .
ﻣﺜﺎل -:
; $x = 10
; $y = 5
-2اﻟﻤﻌﺎﻣﻞ ) ( orوﻧﻈﯿﺮه ) || (
ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل ) ( orأو ) || ( ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ ﺷﺮط واﺣﺪ أو ﻛﻞ اﻟﺸﺮوط اﻟﻤﻮﺟﻮدة .
ﻣﺜﺎل -:
; $x = 10
; $y = 5
-3اﻟﻣﻌﺎﻣل ) ( xorوﻧظﯾره ) ^ (
ﯾﻣﻛن اﺳﺗﻌﻣﺎل xorاو ^ ﻟﻠﺗﺣﻘق ﻣن ﺻﺣﺔ ﺷرط واﺣد ﻣن ﺑﯾن ﻋدة ﺷروط وﻻ ﯾﺻﺢ أن ﯾﺗﺣﻘق
أﻛﺛر ﻣن ﺷرط
; $x = 10
; $y = 5
-4اﻟﻤﻌﺎﻣﻞ ) ! (
ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ) ( Notأﺑﺪا ً ﻷﻧﮭﺎ ﻏﯿﺮ ﻣﻮﺟﻮدة ﻓﻲ ﻟﻐﺔ phpﻟﻜﻦ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻧﻈﯿﺮھﺎ ) ! (
وﻟﮫ ﻧﻔﺲ وظﯿﻔﺔ ) ( Notﺣﯿﺚ ﯾﺘﺄﻛﺪ ﻣﻦ أن ھﻨﺎك ﻗﯿﻤﺔ ﻏﯿﺮ ﺻﺤﯿﺤﺔ ) ( falseﻟﻜﻲ ﯾﺘﻢ ﺗﻨﻔﯿﺬ ﺷﻲء
ﻣﻌﯿﻦ
ﻣﺜﺎل -:
; $f = 5
اﻟﻔﺼﻞ اﻟﺮاﺑﻊ
) اﻟﻤﺼﻔﻮﻓﺎت ( Arrays
ﯾﺘﻢ إﻧﺸﺎء اﻟﻤﺼﻔﻮﻓﺔ ﺑﺸﻜﻞ ﻣﺸﺎﺑﮫ ﻹﻧﺸﺎء اﻟﻤﺘﻐﯿﺮ ﺣﯿﺚ ﯾﺘﻢ وﺿﻊ اﻟﻌﻼﻣﺔ دوﻻر ) ($وﺑﻌﺪھﺎ اﺳﻢ
اﻟﻤﺼﻔﻮﻓﺔ ﻣﺜﻞ ﺷﺮوط اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻣﻦ ﺣﺮوف وأرﻗﺎم أو أﺣﺪھﻤﺎ وﺑﻌﺪھﺎ ﻧﻀﻊ اﻟﻤﺴﺎواة وﺑﻌﺪھﺎ
ﻧﻀﻊ ﻛﻠﻤﺔ arrayوھﺬه اﻟﻜﻠﻤﺔ ﺗﻮﺿﻊ ﻟﺘﻌﺮﯾﻒ اﻟﻤﺤﻠﻞ ﻋﻠﻰ إﻧﮭﺎ ﻣﺼﻔﻮﻓﺔ وﺑﻌﺪھﺎ ﻧﻀﻊ اﻟﻘﯿﻢ ﺑﯿﻦ
ﻗﻮﺳﯿﻦ .
ﻣﺜﺎل -:
; )"$x = array ("ahmed","ali","salem
ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺗﻢ ﻓﺘﺢ اﻟﻤﺼﻔﻮﻓﺔ $xوﺗﻢ إﻋﻄﺎﺋﮭﺎ اﻟﻘﯿﻢ ) ( ahmed ali salemأي إﻧﮭﺎ ﺗﺤﺘﻮي
ﻋﻠﻰ ﺛﻼﺛﺔ ﻗﯿﻢ وﯾﻜﻮن ﺷﻜﻞ اﻟﻤﺼﻔﻮﻓﺔ اﻟﻮھﻤﻲ ﻛﻤﺎ ﺑﺎﻟﺠﺪول ﺣﯿﺚ إن ﻛﻞ ﻗﯿﻤﺔ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺄﺧﺬ
رﻗﻤﺎﻣﻌﯿﻨﺎ ً ﯾﺒﺪأ ﺑﺎﻟﺼﻔﺮ وإﻟﻰ ﻣﺎﻻ ﻧﮭﺎﯾﺔ .
ﻻﺣﻆ أﻧﻨﺎ ﯾﻤﻜﻦ أن ﻧﻌﻄﻲ ﻟﻜﻞ ﻗﯿﻤﺔرﻗﻤﺎ ً ﺗﺴﻠﺴﻠﻲ ﻣﻌﯿﻦ ﻣﻦ اﺧﺘﯿﺎرﻧﺎ ﻛﻤﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل -:
; )"$x = array ( 4=> "ahmed" , 9=> "ali" , 2=> "salem
ﻓﺄﻧﮫ ﺳﯿﻀﯿﻒ ھﺬا اﻟﻌﻨﺼﺮ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ xوﺑﻤﺎ أﻧﻨﺎ ﻟﻢ ﻧﻌﻄﮫ رﻗﻢ ﺗﺴﻠﺴﻠﻲ ﻓﺈﻧﮫ ﺳﯿﺄﺧﺬ رﻗﻢ ﺗﺴﻠﺴﻠﻲ
اﻓﺘﺮاﺿﻲ ﯾﻜﻮن أﻛﺒﺮ ﻣﻦ رﻗﻢ أﻛﺒﺮ ﺗﺴﻠﺴﻞ ﻣﻮﺟﻮد ,وﻣﺜﻼ ً ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﻮف ﯾﺄﺧﺬ اﻟﺮﻗﻢ ) . ( 10
) ( 22 اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ( Arrays
ﺣﯿﺚأوﻻ ً ﻋﺮﻓﻨﺎ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ $xﺛﻢ ﺟﻌﻠﻨﺎھﺎ ﻓﺎرﻏﺔ ) ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ رﻗﻢ ( وﺑﻌﺪ ذﻟﻚ ﻧﻀﻊ اﻟﻘﯿﻢ
اﻟﺘﻲ ﻧﺸﺎء وﺑﺎﻟﺘﺴﻠﺴﻞ اﻟﺬي ﻧﺸﺎء واﻟﺘﻲ ﻟﻢ ﻧﻀﻊ ﻟﮭﺎ رﻗﻢ ﺗﺴﻠﺴﻠﻲ ﺗﺄﺧﺬرﻗﻤﺎ ً اﻓﺘﺮاﺿﯿﺎ ً ,وﯾﻤﻜﻦ
اﻟﺘﻌﺎﻣﻞ ﺑﺴﮭﻮﻟﺔ ﻣﻊ ھﺬه اﻟﻤﺼﻔﻮﻓﺔ وطﺒﺎﻋﺔ أي ﺻﻒ أو أي ﻋﻨﺼﺮ ﻧﺮﯾﺪ .
ﻣﺜﺎل -:
; ">echo "$x[6] <br> $x[2] <br
* إذا أردﻧﺎ طﺒﺎﻋﺔ ﻋﻨﺎﺻﺮ ﻣﺼﻔﻮﻓﺔ ﺗﺘﻜﻮن ﻣﻦ ﻋﺪد ﻛﺒﯿﺮ ﻣﻦ اﻟﻌﻨﺎﺻﺮ ﻓﻼ ﯾﻤﻜﻦ أن ﻧﺴﺘﺨﺪم echo
ﻟﻄﺒﺎﻋﺔ ﻛﻞ ﻋﻨﺼﺮ ﻋﻠﻰ ﺣﺪه ﻓﻠﺬﻟﻚ ﻧﺤﺘﺎج إﻟﻰ ﻋﺒﺎرة ﺗﻜﺮار ,ﻣﺜﻼ ً ﻟﻮ ﻛﺎﻧﺖ ﻟﺪﯾﻨﺎ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي
ﻋﻠﻰ ) ( 100ﻋﻨﺼﺮ وﻟﻢ ﻧﻘﻢ ﺑﺘﺤﺪﯾﺪ ﺗﺮﺗﯿﺐ اﻟﻌﻨﺎﺻﺮ إذن ﻓﻨﺤﻦ ﻧﻌﻠﻢ ﺑﺄن اﻟﺘﺮﺗﯿﺐ ﯾﺒﺪأ ﻣﻦ اﻟﺮﻗﻢ
ﺻﻔﺮ إﻟﻰ اﻟﺮﻗﻢ ) ( 99اﻟﺬي ﯾﻤﺜﻞ ﻗﯿﻤﺔ اﻟﻌﻨﺼﺮ ) ( 100ﻓﺒﮭﺬه اﻟﺤﺎﻟﺔ ﻧﺴﺘﻄﯿﻊ طﺒﺎﻋﺔ اﻟﻌﻨﺎﺻﺮ
ﺑﺎﺳﺘﺨﺪام ﻋﺒﺎرة اﻟﺘﻜﺮار ) . ( for
ﻣﺜﺎل -:
; ) " "Leeإﻟﻰ أن ﻧﺼﻞ إﻟﻰ اﻟﻌﻨﺼﺮ $people = array ("ahmed" , "ali" , .... 100
ﻣﻼﺣﻈﺔ /ﻓﻲ ﻟﻐﺔ htmlإن وﺿﻌﻨﺎ اﻟﺨﺎﺻﯿﺔ nameوھﻲ ﺧﺎﺻﯿﺔ ﺗﺴﺘﺨﺪم ﻓﻲ اﻟﻨﻤﺎذج وھﺬا اﻻﺳﻢ
اﻟﻤﻌﻄﻰ ﯾﺘﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫ ﻋﻠﻰ إﻧﮫ ﻣﺘﻐﯿﺮ ﻓﻲ ﺣﺎل أردﻧﺎ أن ﻧﺮﺑﻄﮫ ﺑﻠﻐﺔ , phpوﻟﻜﻦ إذا أﻋﻄﯿﻨﺎه اﺳﻢ
وﺑﻌﺪھﺎ وﺿﻌﻨﺎ ﻗﻮﺳﯿﻦ ] [ ﻓﺎرﻏﯿﻦ ﺳﯿﺘﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ھﺬه اﻟﻤﺪﺧﻼت ﻋﻠﻰ أﻧﮭﺎ ﻣﺼﻔﻮﻓﺔ وﺗﻀﺎف
ﺗﻠﻘﺎﺋﯿﺎ ً .
) ( 23 اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ( Arrays
ﻣﺜﺎل -:
دوال اﻟﻤﺼﻔﻮﻓﺎت
اﻟﺪاﻟﺔ print_r
اﺳﻢ ھﺬه اﻟﺪاﻟﺔ ﻣﺄﺧﻮذ ﻣﻦ Print Arrayأي أطﺒﻊ اﻟﻤﺼﻔﻮﻓﺔ ﺣﯿﺚ إن ﻓﻲ ھﺬه اﻟﺪاﻟﺔ ﯾﺘﻢ طﺒﺎﻋﺔ
اﻟﻤﺼﻔﻮﻓﺔ ﺑﺸﻜﻞ ھﺮﻣﻲ أو ﻣﺘﺸﻌﺐ .
ﻣﺜﺎل -:
وﺿﻌﻨﺎ اﻟﻮﺳﻤﯿﻦ > <preو > </preوﺑﯿﻨﮭﻢ اﻟﺪاﻟﺔ print_rوذﻟﻚ ﻟﻜﻲ ﯾﻜﻮن اﻟﻨﺎﺗﺞ ﺑﺸﻜﻞ ھﺮﻣﻲ
وﯾﻤﻜﻦ أن ﻧﻠﻐﻲ ھﺬﯾﻦ اﻟﻮﺳﻤﯿﻦ وﻧﻜﺘﺐ ﻓﻘﻂ اﻟﺪاﻟﺔ ﻟﺘﻜﻮن اﻟﻄﺒﺎﻋﺔ ﺑﺸﻜﻞ أﻓﻘﻲ .
اﻟﺪاﻟﺔ array_merge
ﻣﺜﺎل -:
اﻟﺪاﻟﺔ array_reverse
ﻣﺜﺎل -:
; )"$x = array ("a","b","c
; )$y = array_reverse ($x
;)">echo ("<pre
; )print_r($y
; )">echo ("</pre
اﻟﺪاﻟﺔ array_pop
; )array_pop ($x
; )print_r ($x
ھﻨﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﯿﺘﻢ ﺣﺬف اﻟﻌﻨﺼﺮ cﻷﻧﮫ آﺧﺮ ﻋﻨﺼﺮ ,ﻣﺜﻼ ً ﻟﻮ أﻋﻄﯿﻨﺎ اﻟﻌﻨﺼﺮ cرﻗﻢ ﺗﺴﻠﺴﻠﻲ
10واﻟﻌﻨﺼﺮ bرﻗﻢ ﺗﺴﻠﺴﻠﻲ 15ﻓﺎﻧﮫأﯾﻀﺎ ً ﺳﻮف ﯾﺤﺬف اﻟﻌﻨﺼﺮ cﺑﻐﺾ اﻟﻨﻈﺮ ﻋﻦ اﻟﺘﺴﻠﺴﻞ
ﻓﺄﻧﮫ ﯾﺤﺬف آﺧﺮ ﻋﻨﺼﺮ .
اﻟﺪاﻟﺔ array_shift
ﻣﺛﺎل/
; )"$x = array ("a","b","c
; )array_shift ($x
; )print_r ($x
اﻟﺪاﻟﺔ array_push
ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ إﺿﺎﻓﺔ ﻋﻨﺎﺻﺮ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ ﺑﺸﻜﻞ ﺳﮭﻞ وﺳﺮﯾﻊ ,ﺧﺼﻮﺻﺎ ً إن ﻛﻨﺎ ﻧﺮﯾﺪ
إﺿﺎﻓﺔ ﻋﺪد ﻛﺒﯿﺮ ﻣﻦ اﻟﻌﻨﺎﺻﺮ .
ﻣﺜﺎل -:
; " $a [ ] = "ali
; "$a [ ] = "salem
ﻻﺣﻆ ھﻨﺎ أﺿﻔﻨﺎ ﻋﻨﺼﺮﯾﻦ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ ,وﯾﻤﻜﻦ إﺿﺎﻓﺔ ﻋﻨﺼﺮ واﺣﺪ أو أﻛﺜﺮ ﻛﻤﺎ ﻧﺸﺎء ,ﻟﻜﻦ
أوﻻ ً ﺗﻜﺘﺐ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ﺛﻢ ﺗﻮﺿﻊ اﻟﻌﻨﺎﺻﺮ ,وﯾﻤﻜﻦ أن ﻧﻀﻊ ﻗﯿﻢ اﻟﻌﻨﺎﺻﺮ ﺑﯿﻦ ﻋﻼﻣﺎت ﺗﻨﺼﯿﺺ
اﻟﺪاﻟﺔ implodeﺗﻌﻤﻞ ﻋﻠﻰ إﺿﺎﻓﺔ ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ﻓﻲ ﻣﺎ ﺑﯿﻦ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ ,وﺗﺤﻮل ھﺬه اﻟﻤﺼﻔﻮﻓﺔ
إﻟﻰ ﻣﺘﻐﯿﺮ ) ﻗﯿﻤﺔ ﻧﺼﯿﺔ ( .
ﻣﺜﺎل/
; ) ”$array = (“a” , “b” , “c
; echo $x
ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺗﺤﻮﻟﺖ اﻟﻤﺼﻔﻮﻓﺔ إﻟﻰ ﻣﺘﻐﯿﺮ وﯾﻤﻜﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ وﻓﻖ ھﺬا اﻷﺳﺎس وﻓﻲ ھﺬا اﻟﻤﺜﺎل
ﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ) ( a - b - cوﻛﻤﺎ ﺗﻼﺣﻆ ﻓﻘﺪ ﺗﻢ اﻟﻔﺼﻞ ﺑﯿﻦ اﻟﻘﯿﻢ ﺑﻌﻼﻣﺔ – وھﻲ اﻟﺘﻲ أدﺧﻠﻨﺎھﺎ ﻓﻲ
اﻟﺒﺎراﻣﯿﺘﺮ اﻷول ﻟﻠﺪاﻟﺔ وﯾﻤﻜﻦ إدﺧﺎل أي ﻋﻼﻣﺔ أو ﻛﻠﻤﺔ .
) ( 26 اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ( Arrays
أﻣﺎ اﻟﺪاﻟﺔ explodeﺗﻌﻤﻞ ﻋﻛس اﻟداﻟﺔ implodeﺣﯾث أﻧﮭﺎ ﺳﺗﺣول اﻟﻣﺗﻐﯾر إﻟﻰ ﻣﺻﻔوﻓﺔ
ﺑﺣﺳب ﻣﺣرف ﻣﻌﯾن ﯾﺟب أن ﯾﻛون ﻣﺿﺎف ﻓﻲ ﻣﺎ ﺑﯾن ﻋﻧﺎﺻر اﻟﻣﺗﻐﯾر .
ﻣﺜﺎل -:
اﻟﺪاﻟﺔ count
ﻣﺜﺎل -:
; )"$c = array ("A" , "B" , "C
; )$x = count ($c
; echo $x
اﻟﺪاﻟﺔ array_count_values
ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ أن ﻧﺘﻌﺮف ﻋﻠﻰ ﺗﻜﺮار ﻗﯿﻢ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻣﻌﯿﻨﺔ ﻓﺈﻧﻨﺎ ﻧﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﻌﻮد ﻟﻨﺎ
ﺑﻤﺼﻔﻮﻓﺔ ﺟﺪﯾﺪة ﺗﺤﺘﻮي ﻋﻠﻰ اﺳﻢ اﻟﻌﻨﺼﺮ وﻋﺪد ﻣﺮات ﺗﻜﺮره ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ .
ﻣﺜﺎل /
; ) $x=array_count_values( $myarray
) foreach( $x as $key => $value
} ;) "{ print( "$key : $value <br> \n
اﻟﺪاﻟﺔ key
ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ إﯾﺠﺎد رﻗﻢ اﻟﻌﻨﺼﺮ ) ﺗﺴﻠﺴﻠﮫ ( ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ,أي رﻗﻢ أول ﻋﻨﺼﺮ ) اﻟﻌﻨﺼﺮ
اﻟﻨﺸﻂ ( .
) ( 27 اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ( Arrays
ﻣﺜﺎل -:
اﻟﺪاﻟﺔ array_keys
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ أرﻗﺎم اﻟﻌﻨﺎﺻﺮ وأﺳﻤﺎء اﻟﻌﻨﺎﺻﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ .
ﻣﺜﺎل/
; ) $x=array_keys( $myarray
اﻟﺪاﻟﺔ current
ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ إﯾﺠﺎد ﻗﯿﻤﺔ أول ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ,أي ﻗﯿﻤﺔ أول ﻋﻨﺼﺮ ) اﻟﻌﻨﺼﺮ اﻟﻨﺸﻂ
(
ﻣﺜﺎل -:
; ) " $a = array ( " ali " , " salem
; echo $t
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ ﺗﻨﺸﯿﻂ أي ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وذﻟﻚ ﻋﻦ طﺮﯾﻖ اﻟﺪاﻟﺘﯿﻦ ) ( nextو ) ( prev
اﻟﻠﺘﺎن ﺗﻌﻤﻼن ﻋﻠﻰ اﻟﺘﺠﻮل ﺑﯿﻦ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ,ﻻﺣﻆ إن اﻟﻌﻨﺼﺮ اﻟﻨﺸﻂاﻓﺘﺮاﺿﯿﺎ ً ھﻮ اﻟﻌﻨﺼﺮ
اﻷول وإن أردﻧﺎ أن ﻧﻨﺸﻂ اﻟﻌﻨﺼﺮ اﻟﺜﺎﻧﻲ ﻧﻀﻊ اﻟﺪاﻟﺔ ) ( nextﻣﺮة واﺣﺪة ,وإن أردﻧﺎ أن ﻧﻨﺸﻂ
اﻟﻌﻨﺼﺮ اﻟﺜﺎﻟﺚ ﻧﻀﻊ اﻟﺪاﻟﺔ ) ( nextﻣﺮﺗﯿﻦ وھﻜﺬا ﻧﺴﺘﻤﺮ ﻋﻨﺼﺮ ﺑﻌﺪ ﻋﻨﺼﺮ ,وإن أردﻧﺎ أن
ﻧﺮﺟﻊ ﺧﻄﻮة ﻟﻠﺨﻠﻒ ﻧﻀﻊ اﻟﺪاﻟﺔ ) ( prevﻣﺮة واﺣﺪة وإن أردﻧﺎ أن ﻧﺮﺟﻊ ﺧﻄﻮﺗﯿﻦ ﻧﻀﻊ اﻟﺪاﻟﺔ )
( prevﻣﺮﺗﯿﻦ وھﻜﺬا ﻧﺮﺟﻊ ﺧﻄﻮة ﺑﻌﺪ ﺧﻄﻮة ,أذا ً ﯾﻤﻜﻨﻨﺎ أن ﻧﺘﻘﺪم ﺧﻄﻮة ﺧﻄﻮة ﺑﻘﺪر ﻣﺎ ﻧﺸﺎء أو
ﻧﺮﺟﻊ ﺧﻄﻮة ﺧﻄﻮة ﺑﻘﺪر ﻣﺎ ﻧﺸﺎء .
) ( 28 اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ( Arrays
ﻣﺜﺎل -:
ﺗﺴﺘﻄﯿﻊ ﺑﺎﺳﺘﺨﺪام ھﺬه اﻟﺪاﻟﺘﯿﻦ وﻋﻦ طﺮﯾﻖ اﻟﺘﻜﺮار ) ( whileاﺳﺘﺨﺮاج ﺟﻤﯿﻊ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ
ﻣﺜﺎل -:
; ) "$a = array ("A" , "B
{ ) )while (list ($e , $r) = each ($a
} ; " echo " <br> $e <br> $r
whileھﻲ أداة ﺗﻜﺮار ﻧﻌﺮﻓﮭﺎﻣﺴﺒﻘﺎ ً ﺣﯿﺚ ﻛﺘﺒﻨﺎ ﻓﻲ ﺷﺮطﮭﺎ اﻟﺪاﻟﺘﯿﻦ listو eachوﺳﻮف ﯾﺘﻮﻗﻒ
اﻟﺸﺮط ) ﯾﺼﺒﺢ ﻏﯿﺮ ﺻﺤﯿﺢ ( ﺑﻌﺪ اﻧﺘﮭﺎء ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﺣﯿﺚ ﻧﻀﻊ أوﻻ ً اﻟﺪاﻟﺔ listوﺑﯿﻦ
ﻗﻮﺳﯿﻦ ﻛﺘﺒﻨﺎ ﻣﺘﻐﯿﺮﯾﻦ وﻧﺴﺘﻄﯿﻊ ﺗﺤﺪﯾﺪ أﺳﻤﺎﺋﮭﻢ ﻛﻤﺎ ﻧﺸﺎء ﺣﯿﺚ إن اﻟﻌﻨﺼﺮ اﻷول ﯾﺸﯿﺮ إﻟﻰ رﻗﻢ
اﻟﻌﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وﯾﺸﯿﺮ اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻧﻲ إﻟﻰ ﻗﯿﻤﺔ ھﺬا اﻟﻌﻨﺼﺮ وﯾﻤﻜﻦ أن ﻧﺤﺬف أﺣﺪ ھﺬﯾﻦ
اﻟﻤﺘﻐﯿﺮﯾﻦ إن ﻟﻢ ﻧﺤﺘﺎج إﻟﻰ رﻗﻢ اﻟﻌﻨﺼﺮ أو ﻟﻢ ﻧﺤﺘﺎج إﻟﻰ ﻣﻌﺮﻓﺔ ﻗﯿﻤﺔ اﻟﻌﻨﺼﺮ ﻣﻊ ﻣﻼﺣﻈﺔ ﻋﺪم
ﺣﺬف اﻟﻔﺎرزة اﻟﻤﻮﺟﻮدة ﺑﯿﻦ اﻟﻤﺘﻐﯿﺮﯾﻦ إذا ﺣﺬﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ اﻷول ) ﻣﺘﻐﯿﺮ اﻟﺘﺴﻠﺴﻞ ( وﻟﻜﻨﻨﺎ ﻧﺤﺬف
اﻟﻔﺎرزة إذا ﺣﺬﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻧﻲ ) ﻣﺘﻐﯿﺮ اﻟﻘﯿﻢ ( ,ﺑﻌﺪ ذﻟﻚ أﻏﻠﻘﻨﺎ ﻗﻮس اﻟﺪاﻟﺔ listوﺟﻌﻠﻨﺎھﺎ ﺗﺴﺎوي
اﻟﺪاﻟﺔ echoوﻧﻀﻊ ﺑﯿﻦ ﻗﻮﺳﻲ اﻟﺪاﻟﺔ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ اﻟﻤﻌﺮﻓﺔﻣﺴﺒﻘﺎ ً واﻟﺘﻲ ﻧﺮﯾﺪ ﻣﻦ أداة اﻟﺘﻜﺮار
whileأن ﺗﺪور ﺑﻘﺪر ﻋﻨﺎﺻﺮ ھﺬه اﻟﻤﺼﻔﻮﻓﺔ ﺛﻢ ﻧﻐﻠﻖ ﻗﻮس اﻟﺸﺮط ﻟﻸداة whileوﻧﻔﺘﺢ ﻗﻮس ﺗﻨﻔﯿﺬ
اﻷﻣﺮ ﻟﻸداة whileإذا ﺗﺤﻘﻖ اﻟﺸﺮط ) وھﻮ اﻟﺪوران ﺑﻌﺪد ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ( ﺣﯿﺚ إﻧﻨﺎ اﺧﺘﺮﻧﺎ
ﻓﻲ ھﺬا اﻟﻤﺜﺎل أن ﻧﻄﺒﻊ رﻗﻢ اﻟﻌﻨﺎﺻﺮ ﻣﻊ ﻗﯿﻤﮭﺎ وﯾﻤﻜﻦ ﺗﻨﻔﯿﺬ أﻣﻮر أﺧﺮى .ﯾﺤﺚ إﻧﻨﺎ ﻧﺴﺘﻄﯿﻊ ﻣﺜﻼ ً
أن ﻧﺪﺧﻞ ﻗﯿﻢ وأرﻗﺎم ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ﺟﺪول ﻓﻲ ﻟﻐﺔ htmlأو أن ﻧﻔﻌﻞ أﺷﯿﺎء أﺧﺮى .
) ( 29 اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ( Arrays
ھﺬا اﻟﺘﻜﺮار ﻣﻦ اﻷﺷﯿﺎء اﻟﺠﯿﺪة ﻓﻲ phpوھﻮ ﯾﺴﺎﻋﺪك ﻋﻠﻰ ﻣﻌﺮﻓﺔ ﻋﻨﺎﺻﺮ ﻣﺼﻔﻮﻓﺔ ﻣﻌﯿﻨﺔ أو
طﺒﺎﻋﺔ ﻣﺤﺘﻮﯾﺎﺗﮭﺎ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ -:
} ) { codeاﺳﻢ ﻣﺘﻐﯿﺮ => 2اﺳﻢ ﻣﺘﻐﯿﺮ As 1اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ( foreach
ﺣﯿﺚ إن ) اﺳﻢ ﻣﺘﻐﯿﺮ ( 1ﯾﻤﺜﻞ اﻟﺘﺴﻠﺴﻞ ﻟﻠﻤﺼﻔﻮﻓﺔ و ) اﺳﻢ ﻣﺘﻐﯿﺮ ( 2ﯾﻤﺜﻞ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ .
ﻣﺜﺎل -:
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻟﺘﺤﻘﻖ ﻣﻦ اﻟﻮﺳﯿﻂ اﻟﻤﻤﺮر ﻟﮭﺎ ھﻞ ھﻮ ﻣﺼﻔﻮﻓﺔ او ﻻ وذﻟﻚ ﺑﺈﻋﺎدة اﻟﻘﯿﻤﺔ true
او falseواﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
;)is_array($array
اﻟﺪاﻟﺔ in_array
ﻣﺜﺎل/
; ) "$test=array( "a" , "b" , "c
) ) if( in_array( "b" , $test
; "print "found b
اﻟﺪاﻟﺔ array_unique
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈزاﻟﺔ أي ﻗﯿﻤﺔ ﺗﺘﻜﺮر ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ,ﺣﯿﺚ ﺗﻌﯿﺪ ﻣﺼﻔﻮﻓﺔ ﺑﺪون أي ﻋﻨﺎﺻﺮ ﻣﻜﺮرة
واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ -:
;)array_unique($array
) ( 30 اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ( Arrays
اﻟﺪاﻟﺔ range
ﻣﺜﺎل/
; )$x = range (1 , 50 , 1
ﺣﯿﺚ ھﻨﺎ أﻧﺸﺄﻧﺎ ﻣﺼﻔﻮﻓﺔ اﺳﻤﮭﺎ $xووﺿﻌﻨﺎ اﻟﺪاﻟﺔ rangeووﺿﻌﻨﺎأوﻻ ً ﻓﻲ اﻟﻘﻮس اﻟﺮﻗﻢ 1اﻟﺬي
ﯾﻤﺜﻞ اﻟﺮﻗﻢ اﻟﺬي ﺳﯿﺒﺪأ ﻣﻨﮫ اﻟﻌﺪ وﺑﻌﺪه اﻟﺮﻗﻢ 50وھﻮ ﯾﻤﺜﻞ آﺧﺮ رﻗﻢ وﺑﻌﺪه اﻟﺮﻗﻢ 1وھﻮ ﯾﻤﺜﻞ ﻣﻘﺪار
اﻟﺰﯾﺎدة اﻟﺘﻲ ﺳﺘﺠﺮي ﺣﯿﺚ ﺳﯿﺘﻢ إﺿﺎﻓﺔ اﻟﺮﻗﻢ واﺣﺪ ﻓﻲ ﻛﻞ ﻣﺮة
extract
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻣﻊ اﻟﻣﺻﻔوﻓﺎت اﻟﺗﻲ ﻧﺿﯾف ﻟﮭﺎ اﺳﻣﺎء ﺑدل ﺗرﻗﯾم اﻟﻔﮭرﺳﺔ اﻷﻋﺗﯾﺎدﯾﺔ وﻓﺎﺋدﺗﮭﺎ
ھﻲ ﻷﺧﺗﺻﺎر اﻟوﻗت ﺣﯾث أﻧﮭﺎ ﺳﺗﻣﻛﻧﻧﺎ ﻣن اﻟﺗﻌﺎﻣل ﻣﻊ اﻻﺳم اﻟذي ﻧﺿﯾﻔﮫ إﻟﻰ ﺗرﻗﯾم ﻗﯾﻣﺔ
اﻟﻣﺻﻔوﻓﺔ ﻛﻣﺗﻐﯾر .
ﻣﺛﺎل /
; ) ”$arr = ( “x” => “value1”, “y” => “value2” , “z” => “value3
; ) extract( $arr
; echo $x
اﻟﺪاﻟﺔ var_dump
اﻟﺪاﻟﺔ array_pad
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺠﻌﻞ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺴﺎويﻋﺪدا ً ﻣﻌﯿﻨﺎ وﺗﻀﻊ ﺑﺪل اﻟﻘﯿﻢ اﻟﻨﺎﻗﺼﺔ اﻟﻘﯿﮫ اﻻﻓﺘﺮاﺿﯿﺔ
اﻟﺘﻲ ﺗﺮﺳﻞ ﻟﮭﺎ .
ﻣﺜﺎل/
; ) "$my=array( "a" , "b" , "c
; ) $x=array_pad( $my , 5 , zzz
;) ">print( "<pre اﻟﻘﯿﻢ اﻟﺘﻲ ﺳﺘﻀﺎف ﻣﻜﺎن اﻟﻘﯿﻢ اﻟﻨﺎﻗﺼﺔ
; ) print_r( $x ﻋﺪد ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ
; ) "print( "</pre>\n
اﻟﺪاﻟﺔ array_slice
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻨﺴﺦ ﻣﺠﻤﻮﻋﺔ ﻗﯿﻢ ﻣﻦ ﻣﺼﻔﻮﻓﺔ ﻋﻠﻰ ﺷﻜﻞ ﻣﺼﻔﻮﻓﺔ ﺟﺪﯾﺪة وﯾﺘﻢ اﻟﺤﺼﻮل ﻋﻠﻰ اﻟﻘﯿﻢ
ﻋﻦ طﺮﯾﻖ ﺗﺤﺪﯾﺪ ﺑﺪاﯾﺔ اﻟﻨﺴﺦ وﻋﺪد اﻟﻘﯿﻢ اﻟﺘﻲ ﺗﻨﺴﺦ .
ﻣﺜﺎل/
; ) $x=array_ slice( $myarray , 2 , 3
ﺣﯿﺚ أن اﻟﺮﻗﻢ 2ھﻨﺎ ﯾﻌﺒﺮ ﻋﻦ ﺗﺴﻠﺴﻞ أول ﻋﻨﺼﺮ ﺳﯿﻨﺴﺦ واﻟﺮﻗﻢ 3ﯾﻤﺜﻞ ﻋﺪد اﻟﻌﻨﺎﺻﺮ اﻟﺘﻲ
ﺳﺘﻨﺴﺦ ﺑﻌﺪ اﻟﻌﻨﺼﺮ اﻷول ) اﻟﺬي ﺣﺪدﻧﺎه (
اﻟﺪاﻟﺔ array_value
ﻓﺮز اﻟﻤﺼﻔﻮﻓﺎت
اﻟﺪاﻟﺔ ;) ( sort
ھﺬه اﻟﺪاﻟﺔ ﺗﺄﺧﺬ ﻣﺤﺘﻮﯾﺎت اﻟﻤﺼﻔﻮﻓﺔ وﻣﻦ ﺛﻢ ﺗﻔﺮز ﻋﻨﺎﺻﺮھﺎھﺠﺎﺋﯿﺎ ً اﻋﺘﻤﺎدا ً ﻋﻠﻰ اﻷﺣﺮف اﻟﻜﺒﯿﺮ أوﻻ ً ﺛﻢ
اﻟﺼﻐﯿﺮة ,ﺗﺘﻄﻠﺐ ھﺬه اﻟﺪاﻟﺔ ﻓﻘﻂ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ,ﻻﺣﻆ ھﺬا اﻟﻤﺜﺎل -:
اﻟﺪاﻟﺔ ;) ( asort
ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻧﻔﺲ ﻋﻤﻞ اﻟﺪاﻟﺔ sortوﻟﻜﻦ اﻟﻔﺮق ﺑﯿﻨﮭﻤﺎ ھﻮ إن اﻟﺪاﻟﺔ sortﺗﺴﺘﺒﺪل اﻟﺤﺮوف ﺑﺄرﻗﻢ ﻓﻲ
اﻟﻔﮭﺮﺳﺔ أﻣﺎ اﻟﺪاﻟﺔ asortﺗﻀﻊ اﻟﺤﺮوف ﻛﻤﺎ ھﻲ وﺗﻔﺮزھﺎ ﻛﻤﺎ ﺗﻔﻌﻞ اﻟﺪاﻟﺔ , sortواﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
-:
ﺗﻌﻤﻞ اﻟﺪاﻟﺔ rsortﻧﻔﺲ ﻋﻤﻞ اﻟﺪاﻟﺔ sortوﻟﻜﻦ ﺑﺸﻜﻞ ﻋﻜﺴﻲ ,وﺗﻌﻤﻞ اﻟﺪاﻟﺔ arsortﻧﻔﺲ ﻋﻤﻞ اﻟﺪاﻟﺔ
asortوﻟﻜﻦ ﺑﺸﻜﻞ ﻋﻜﺴﻲ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺬه اﻟﺪاﻟﺘﯿﻦ ھﻲ -:
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل دوال اﻟﻔﺮز ﻣﻊ اﻟﺤﺮوف اﻟﻌﺮﺑﯿﺔ ) إذا ﻛﺎن اﻟﺴﯿﺮﻓﺮ ﯾﺪﻋﻢ اﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ ( .
اﻟﺪاﻟﺔ ksort
ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔأﯾﻀﺎ ً ﻋﻠﻰ ﻓﺮز اﻟﻤﺼﻔﻮﻓﺎت ﻟﻜﻦ ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ رﻗﻢ ﺗﺴﻠﺴﻞ اﻟﻌﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وﻟﯿﺲ
ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ ﻗﯿﻤﺔ اﻟﻌﻨﺼﺮ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ -:
ﺗﺪاﺧﻞ اﻟﻤﺼﻔﻮﻓﺎت
ﯾﻤﻜﻦ ﺻﻨﺎﻋﺔ ﻣﺼﻔﻮﻓﺔ داﺧﻞ ﻣﺼﻔﻮﻓﺔ أو أﻛﺜﺮ ﻣﻦ ﻣﺼﻔﻮﻓﺔ أي ﯾﻤﻜﻦ أن ﺗﺘﺪاﺧﻞ اﻟﻤﺼﻔﻮﻓﺎت .
ﻣﺜﺎل -:
; ))$t = array (1=> array ("A" , 23) , 2=> array ("B" , 25
; ) " >while ( list($x) = each ($t) { echo ("<br> $x <br
} } ; )"while ( list( , $y) = each ($t[$x]) { echo ("$y
* وﻟﻄﺒﺎﻋﺔ ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺪاﺧﻠﯿﺔ ﻧﻜﺘﺐ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ وﺑﻌﺪ ذﻟﻚ رﻗﻢ اﻟﻤﺼﻔﻮﻓﺔ .
ﻣﺜﺎل/
; ) ($x=array
; )"$x[ ]=array ("Hi" , "hello
; )"$x[ ]=array("welcome" , "good
; ] echo $x[ 0 ] [ 1
ھﻨﺎ ﺳﯿﻄﺒﻊ ﻓﻘﻂ اﻟﻘﯿﻤﺔ hello
) ( 34 اﻟﻔﺻل اﻟﺧﺎﻣس ) اﻟوﻗت واﻟﺗﺎرﯾﺦ (
اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ
) اﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ (
* time stamp
ﯾﺘﻢ ذﻟﻚ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ dateوﻟﻜﻦ ﯾﺠﺐ أن ﻧﺨﺒﺮه ﻋﻦ طﺮﯾﻘﺔ اﻟﻌﺮض .
-1اﻟﺪاﻟﺔ ) ( date
ﻣﺜﺎل -:
; ) echo date ( "j/n/y" , 1122350269
-2اﻟﺪاﻟﺔ ) ( getdate
ﯾﺘﻢ ﻓﻲ ھﺬه اﻟﺪاﻟﺔ ﺗﺤﻮﯾﻞ اﻟﺘﺎرﯾﺦ واﻟﻮﻗﺖ ﻣﻦ اﻟﺼﯿﻐﺔ اﻟﻌﺸﻮاﺋﯿﺔ time stampإﻟﻰ اﻟﺼﯿﻐﺔ اﻟﻌﺎدﯾﺔ
ﻟﻠﻮﻗﺖ ,وﺗﻜﻮن اﻟﻤﺨﺮﺟﺎت ﺑﺸﻜﻞ ﻣﺼﻔﻮﻓﺔ .
) ( 35 اﻟﻔﺻل اﻟﺧﺎﻣس ) اﻟوﻗت واﻟﺗﺎرﯾﺦ (
ﻣﺜﺎل -:
; ) $x = getdate ( 1122350269
; )">print ("<pre
; )print_r ($x
; )">print ("</pre
ﯾﺘﻢ اﻟﺘﺤﻮﯾﻞ ھﻨﺎ ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ Mktimeوھﻲ ﺗﺤﺘﺎج ﺑﻌﺾ اﻟﻤﺪﺧﻼت ﻻﺣﻆ -:
;) ﺳﻨﺔ ,ﺷﮭﺮ ,ﯾﻮم ,ﺳﺎﻋﺔ ,دﻗﯿﻘﺔ ,ﺛﺎﻧﯿﺔ ( Mktime
* اﻟﺪاﻟﺔ gmdate
ﻣﺜﺎل -:
; ) echo gmdate ( m
ﺳﻮف ﺗﻼﺣﻆ إن اﻟﻨﺘﺎﺋﺞ ﺳﻮف ﺗﻜﻮن ﻣﺨﺘﻠﻔﺔ ﻋﻠﻰ اﻟﺮﻏﻢ ﻣﻦ اﺳﺘﺨﺪام ﻧﻔﺲ اﻟﺪاﻟﺔ ,ﻟﻜﻦ ﺗﺨﺘﻠﻒ
اﻟﻘﯿﻤﺔ اﻟﻤﻌﻄﺎة ) ( M ) ( mوﻟﻐﺔ phpﺗﺤﺘﺠﺰ اﻟﻜﺜﯿﺮ ﻣﻦ اﻟﻜﻠﻤﺎت واﻟﺤﺮوف اﻟﺘﻲ ﺗﻘﻮم ﺑﻌﻤﻠﯿﺎت
ﻣﺨﺘﻠﻔﺔ .
اﻟداﻟﺔ ; ) (microtime
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻹﺧﺮاج اﻟﻮﻗﺖ ﻟﻜﻦ ﺑﺎﻟﻤﻠﻲ ﺛﺎﻧﯿﺔ وھﻲ ﻻ ﺗﺄﺧﺬ أي وﺳﯿﻂ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ .
اﻟﻔﺻل اﻟﺳﺎدس
) اﻟدوال اﻟرﯾﺎﺿﯾﺔ واﻟﺗﻌﺎﻣل ﻣﻊ اﻷرﻗﺎم (
اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ
) ﺗﻌﺮﯾﻒ واﺳﺘﺪﻋﺎء اﻟﺪوال (
ﯾﻤﻜﻦ ﺗﺮﺗﯿﺐ داﻟﺔ ﺑﺎﻟﺸﻜﻞ اﻟﺬي ﻧﺮﯾﺪ وﺑﻌﺪ ذﻟﻚ ﻧﺴﺘﺨﺪﻣﮭﺎ )ﻧﺴﺘﺪﻋﯿﮭﺎ( ﻓﻲ أي ﻣﻜﺎن وذﻟﻚ ﻣﻦ ﺧﻼل
) , ( functionواﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ -:
} وﺿﯿﻔﺔ اﻟﺪاﻟﺔ )اﻟﻜﻮد( { ) اﻟﻤﺘﻐﯿﺮات ( اﺳﻢ اﻟﺪاﻟﺔ function
ﻣﺜﺎل-:
{ )function bob ($x
; $x = $x + 100
} ; return $x
ﺣﯿﺚ أﻧﺸﺄﻧﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل داﻟﺔ اﺳﻤﮭﺎ bobوﻓﯿﮭﺎ ﻣﺘﻐﯿﺮ وﺣﯿﺪ اﺳﻤﮫ , $xﻻﺣﻆ إﻧﻨﺎ ﻓﻲ اﻟﻨﮭﺎﯾﺔ
وﺿﻌﻨﺎ ) ( returnﺣﯿﺚ إن وﺿﯿﻔﺘﮭﺎ ھﻲ إﺧﺒﺎر اﻟﺪاﻟﺔ ﺑﺄن وﺿﯿﻔﺘﮭﺎ اﻧﺘﮭﺖوأﯾﻀﺎ ً ﻟﻜﻲ ﺗﺨﺒﺮ
phpﻣﺎ ھﻲ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺳﯿﺘﻢ اﺗﺨﺎذھﺎ إذا ﻛﻨﺎ ﻧﺴﺘﺨﺪم أﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ ,ﻻﺣﻆ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ھﺬا اﺳﺘﺨﺪﻣﻨﺎ
ﻣﺘﻐﯿﺮ واﺣﺪ وﻟﻜﻦ إن ﻛﺎن ھﻨﺎك أﻛﺜﺮ ﻣﻦ ﻣﺘﻐﯿﺮ ﻓﯿﺠﺐ أن ﻧﻌﺮف phpأﯾﮭﻤﺎ ھﻮ اﻟﻤﺘﻐﯿﺮ اﻟﺮﺋﯿﺴﻲ .
ﻣﺜﺎل -:
{ )function bob ($a , $b
; $a = $a + 100
; $b = $b + 50
} ; return $a
; )echo bob (10 , 7
ﻓﻲ ھﺬا اﻟﻤﺜﺎل اﺳﺘﺪﻋﯿﻨﺎ وطﺒﻌﻨﺎ اﻟﺪاﻟﺔ ﺣﯿﺚ وﺿﻌﻨﺎﻣﺒﺎﺷﺮﺗﺎ ً رﻗﻤﺎ ً أو ﻧﺴﺘﻄﯿﻊ وﺿﻊ ﻣﺘﻐﯿﺮ ﻣﻌﺮف
ﻣﺴﺒﻘﺎ ً ﻣﻜﺎن اﻟﺮﻗﻢ ,وﻻﺣظ أن اﻟرﻗم اﻷول ﯾﻣﺛل اﻟﺑﺎراﻣﯾﺗر اﻷول واﻟﺛﺎﻧﻲ ﯾﻣﺛل اﻟﺑﺎراﻣﯾﺗر اﻟﺛﺎﻧﻲ .
ﻣﺜﺎل -:
{ )function bob ($a
; $a = $a - 1
; echo $a
} ; return $a
; $a = 100
; )bob ($a
) ( 39 اﻟﻔﺻل اﻟﺳﺎﺑﻊ ) ﺗﻌرﯾف واﺳﺗدﻋﺎء اﻟدوال (
-2ﺟﻌﻠﻨﺎ ﺑﯿﻦ ﻗﻮﺳﻲ اﻟﺪاﻟﺔ bobاﺳﻢ ﻣﺘﻐﯿﺮ اﻟﺬي ﻋﺮﻓﻨﺎه ﻋﻠﻰ إﻧﮫ ﯾﺴﺎوي . 100
-3اﺳﺘﺨﺪﻣﻨﺎ ) اﺳﺘﺪﻋﯿﻨﺎ ( اﻟﺪاﻟﺔ bobوﻣﻦ دون أن ﻧﺪﺧﻠﮭﺎ ﻓﻲ داﻟﺔ اﻟﻄﺒﺎﻋﺔ ) ( echoﻓﺄﻧﮭﺎ ﺗﻄﺒﻊ
اﻟﻨﺘﯿﺠﺔ وذﻟﻚ ﻷﻧﻨﺎ ﻓﻲ داﺧﻞ ﺗﻌﺮﯾﻒ اﻟﺪاﻟﺔ أﻋﻄﯿﻨﺎ أﯾﻌﺎز اﻟﻄﺒﺎﻋﺔ ﻓﻲ أي وﻗﺖ ﯾﺘﻢ ﻓﯿﮫ اﺳﺘﺪﻋﺎء
اﻟﺪاﻟﺔ.
ﻣﻼﺣﻈﺔ /ﻻ ﻓﺮق ﻓﻲ أن ﻧﻌﺮف اﻟﺪاﻟﺔ أوﻻ ً وﻣﻦ ﺛﻢ ﻧﺴﺘﺪﻋﯿﮭﺎ أو أن ﻧﻘﻢ ﺑﺎﺳﺘﺪﻋﺎﺋﮭﺎ وﺑﻌﺪ ذﻟﻚ
ﻧﻌﺮﻓﮭﺎ.
* ﯾﻣﻛن أن ﻧﻌطﻲ ﻟﻠداﻟﺔ returnاﻟﻘﯾﻣﺔ trueوھذا ﯾﻌﻧﻲ أن ﯾﺗم إﻋﺎدة ﺗﺣﻣﯾل اﻟﺻﻔﺣﺔ ﻣرة أﺧرى
أﻣﺎ إذا أﻋطﯾﻧﺎھﺎ اﻟﻘﯾﻣﺔ falseﻓﮭذا ﯾﻌﻧﻲ اﻟﺗوﻗف ﻋن إﻋﺎدة ﺗﺣﻣﯾل اﻟﺻﻔﺣﺔ .
* ﯾﻤﻜﻦ إﻋﻄﺎء ﻗﯿﻤﺔ اﻓﺘﺮاﺿﯿﺔ ﻟﻠﻤﺘﻐﯿﺮ ﻟﯾﺗم ﺗﻨﻔﯿﺬھﺎ إذا ﻟﻢ ﺗﻌﻄﻰ ﻟﮫ ﻗﯿﻤﺔ وﻻ ﺗﻨﻔﺬ إذا أﻋﻄﯿﺖ ﻟﮭﺎ
ﻗﯿﻤﺔ
ﻣﺜﺎل/
<?php
{)function ex($a=5
} ; $a = $a + 100
;)(echo ex
;) echo ex( 2
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ ﺟﻌﻞ اﻟﻤﺘﻐﯿﺮات اﻟﻤﺤﻠﯿﺔ ) ﻛﻤﺎ ﻗﻠﻨﺎﺳﺎﺑﻘﺎ ً ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻧﻔﺲ اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﻤﺴﺘﺨﺪم
داﺧﻞ ﺗﻌﺮﯾﻒ اﻟﺪاﻟﺔ ﺧﺎرﺟﮭﺎ وذﻟﻚ ﻷﻧﮭﺎ ﻣﺘﻐﯿﺮات ﻣﺤﻠﯿﺔ ( ﻣﺘﻐﯿﺮات ﻋﺎﻣﺔ ) أي ﺗﺤﺘﻔﻆ ﺑﻘﯿﻤﺘﮭﺎ
وﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ أي ﻣﻜﺎن ﻟﺘﻌﻄﻲ ﻧﻔﺲ اﻟﻨﺘﯿﺠﺔ ( وذﻟﻚ ﺑﺈﺿﺎﻓﺔ ) ( globalﻗﺒﻞ اﺳﻢ اﻟﻤﺘﻐﯿﺮ
داﺧﻞ اﻟﺘﻌﺮﯾﻒ ﻟﯿﻜﻮن ھﺬا اﻟﻤﺘﻐﯿﺮ ﻋﺎم ﻓﻲ ﻛﻞ اﻟﻠﻐﺔ .
ﻣﺜﺎل -:
{ ) (function ala
; global $x
; "$x = "program
} ; return $x
; echo $x
) ( 40 اﻟﻔﺻل اﻟﺳﺎﺑﻊ ) ﺗﻌرﯾف واﺳﺗدﻋﺎء اﻟدوال (
ﻛذﻟك ﯾﻣﻛﻧﻧﺎ أن ﻧﻌرف اﻟﻣﺗﻐﯾر اﻟﻣﺳﺗﺧدم داﺧل اﻟداﻟﺔ ﺧﺎرﺟﮭﺎ وذﻟك ﺑﺎﺳﺗﺧدام اﻟﻣﺻﻔوﻓﺔ
) ( $GLOBALSوﻧﻛﺗب ﺑﯾن ﻗوﺳﯾﮭﺎ اﺳم اﻟﻣﺗﻐﯾر وﻻﺣظ أﻧﮫ ﺑدون اﻟﻌﻼﻣﺔ . $
ﻣﺛﺎل/
{ ) (function test
; ]“ return $GLOBALS[ “ var
}
; ”$var = “value
; ) (echo test
ﻣﻼﺣﻈﺔ /ﻋﻧد ﺗﻌرﯾف ﻣﺗﻐﯾر ﺧﺎرج اﻟداﻟﺔ functionﻓﺈﻧﮫ ﻻ ﯾﻣﻛﻧﻧﺎ اﺳﺗﺧداﻣﮫ داﺧﻠﮭﺎ ﻷﻧﮭﺎ ﺳوف
ﻟن ﺗﺗﻌرف ﻋﻠﯾﮫ وﻟﺗﻌرﯾف ھذا اﻟﻣﺗﻐﯾر ﻟﻠداﻟﺔ ﯾﺟب أن ﻧﺳﺑﻘﮫ ﺑـ ) ( globalﻓﻲ داﺧل اﻟداﻟﺔ .
ﻣﺛﺎل/
; ' $var = ' value
{ ) (function test
; global $var
; echo $var
}
; ) test( $var
ﺗﺪاﺧﻞ اﻟﺪوال
ﻣﺜﺎل -:
اﻟﻔﺻل اﻟﺛﺎﻣن
) اﺳﺗﺧدام JSONﻟﺗﺧزﯾن وﺟﻠب اﻟﺑﯾﺎﻧﺎت (
اﻟﺗﻧﺳﯾق : JSON
JSONوھﻲ اﺧﺗﺻﺎر ﻠ javaScript Object Notationوھﻲ طﺮﯾﻘﺔ ﻓﻲ ﻟﻐﺔ javaScript
ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت وﺗﻢ اﻧﺘﺸﺎرھﺎ ودﻋﻤﮭﺎ ﻓﻲ أﻏﻠﺐ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ اﻷﺧﺮى ﻟﺴﮭﻮﻟﺔ ودﯾﻨﺎﻣﯿﻜﯿﺔ
اﻟﺘﻌﺎﻣﻞ ﻣﻊ ھﺬه اﻟﻄﺮﯾﻘﺔ وﯾﻤﻜﻦ ﻟﻨﺎ اﺳﺘﺨﺪام ھﺬه اﻟﺼﯿﻐﺔ ﻛﺒﺪﯾﻞ أﻣﺜﻞ ﻟﻨﻘﻞ اﻟﺒﯿﺎﻧﺎتﺑﺪﻻ ً ﻣﻦ اﺳﺘﺨﺪام
ﻣﻠﻔﺎت , XMLوأﯾﻀﺎ ً ﺗﺴﺘﺨﺪم ھﺬه اﻟﺘﻘﻨﯿﺔ ﻓﻲ ﺟﻠﺐ اﻟﺒﯿﺎﻧﺎت .
وﻹﻧﺷﺎء JSONﯾﺘﻢ ﺣﻔﻆ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺗﻨﺴﯿﻖ JSONﻋﻠﻰ ﺷﻜﻞ ﻛﺎﺋﻦ وﺗﻮﺿﻊ اﻟﻌﻨﺎﺻﺮ ﺑﯿﻦ اﻷﻗﻮاس
} { او ﻋﻠﻰ ﺷﻜﻞ ﻣﺼﻔﻮﻓﺔ وﺗﻮﺿﻊ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ ] [ ,اﻟﻘﯿﻢ اﻟﺘﻲ ﯾﺘﻢ ﺣﻔﻈﮭﺎ
داﺧﻞ اﻟﻜﺎﺋﻦ او اﻟﻤﺼﻔﻮﻓﺔ ھﻲ أﻋﺪاد ﺻﺤﯿﺤﺔ وأﻋﺪاد ﻛﺴﺮﯾﺔ وﺳﻼﺳﻞ ﻧﺼﯿﺔ وﻗﯿﻢ ﻣﻨﻄﻘﯿﺔ وﻛﺎﺋﻨﺎت
أﺧﺮى او ﻣﺼﻔﻮﻓﺎت أﺧﺮى وﯾﻤﻜﻦ اﻟﺠﻤﻊ ﺑﯿﻦ ﺟﻤﯿﻊ ھﺬه اﻷﻧﻮاع داﺧﻞ ﻛﺎﺋﻦ واﺣﺪ وﯾﺘﻢ إﺳﻨﺎد اﻟﻘﯿﻢ
ﻟﻠﻌﻨﺎﺻﺮ ﺑﺎﺳﺘﺨﺪام اﻟﻨﻘﻄﺘﯿﻦ ) ( :وﯾﺘﻢ اﻟﻔﺼﻞ ﺑﯿﻦ اﻟﻌﻨﺎﺻﺮ ﺑﺎﺳﺘﺨﺪام اﻟﻔﺎرزة ) , ( ,وﻛﻤﺜﺎل ﻟﻠﻘﯿﻢ
داﺧﻞ ﻛﺎﺋﻦ ﻻﺣﻆ ھﺬا اﻟﻜﻮد -:
}{"var1":10,"var2":true,"var3":null,"var4":"value","var5":12.55
ﻣﻼﺣظﺔ /ﯾﺟب أن ﯾﻛون اﺳم اﻟﻌﻧﺻر ﺑﯾن ﻋﻼﻣﺗﻲ اﻗﺗﺑﺎس ﻷن ﺑﻌض ﻟﻐﺎت اﻟﺑرﻣﺟﺔ ﻻ ﺗﻘﺑل اﺳم
اﻟﻌﻧﺻر ﺑدوﻧﮭﺎوأﯾﺿﺎ ً ﯾﺟب وﺿﻊ اﻟﺳﻠﺳﻠﺔ اﻟﻧﺻﯾﺔ ﺑﯾن ﻋﻼﻣﺎت اﻗﺗﺑﺎس ,وﻛﻣﺛﺎل ﻟﻠﻘﯾم داﺧل
ﻣﺻﻔوﻓﺔ ﻻﺣظ ھذا اﻟﻛود -:
][10,20.25,"value",null,true
ﻛﻣﺎ ﯾﻣﻛن اﻟﺟﻣﻊ ﺑﯾن اﻻﺛﻧﯾنﻣﻌﺎ ً ﻛﺄن ﯾﺣﺗوي اﻟﻛﺎﺋن ﻋﻠﻰ ﻣﺻﻔوﻓﺎت او ﺗﺣﺗوي اﻟﻣﺻﻔوﻓﺔ ﻋﻠﻰ
ﻛﺎﺋﻧﺎت ,ﻻﺣظ ھذا اﻟﻣﺛﺎل -:
}]{"var1":10,"var2":[10,20,30
json_encode اﻟداﻟﺔ
/ﻣﺜﺎل
<?php
$data['var1'] = 10;
$data['var2'] = 20.13;
$data['var3'] = null;
$data['var4'] = true;
$data['var5'] = 'value';
echo json_encode($data);
?>
وﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ﺑﮭﺬا اﻟﺸﻜﻞ
{"var1":10,"var2":20.13,"var3":null,"var4":true,"var5":"value"}
/ﻣﺛﺎل
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
json_decode اﻟﺪاﻟﺔ
/ﻣﺜﺎل
<?php
$json = ' { "var1":10 , "var2":true , "var3":null , "var4":"value" , "var5":12.55 } ' ;
$data1 = json_decode($json);
$data2 = json_decode($json , true);
// ﻟﻠﻮﺻﻮل ﻟﻠﻌﻨﺎﺻﺮ ﻣﻦ ﺧﻼل اﻟﻜﺎﺋﻦ
echo $data1->var4;
echo "<br>";
// ﻟﻠﻮﺻﻮل ﻟﻠﻌﻨﺎﺻﺮ ﻣﻦ ﺧﻼل اﻟﻤﺼﻔﻮﻓﺔ
echo $data2['var4'];
?>
) ( 43 اﻟﻔﺻل اﻟﺛﺎﻣن ) اﺳﺗﺧدام JSONﻟﺗﺧزﯾن وﺟﻠب اﻟﺑﯾﺎﻧﺎت (
اﻟﻔﺻل اﻟﺗﺎﺳﻊ
) رﻓﻊ اﻟﻣﻠﻔﺎت إﻟﻰ اﻟﺧﺎدم (
ﻟرﻓﻊ ﻣﻠف ﻣن اﻟﻣوﻗﻊ إﻟﻰ اﻟﺧﺎدم ﯾﺟبأوﻻ ً وﻋﻧد إﻧﺷﺎء ﺣﻘل اﻟﻧﻣوذج ﻓﻲ اﻠ HTMLأن ﻧﺣدد
اﻟطرﯾﻘﺔ postﻹرﺳﺎل اﻟﺑﯾﺎﻧﺎت ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ وﺿﻊ ﺗرﻣﯾز اﻟﻧﻣوذج ""multipart/form-data
ﺑﺪﻻ ً ﻣﻦ اﻟﺘﺮﻣﯿﺰ اﻻﻓﺘﺮاﺿﻲ ". "application/x-www-form-urlencoded
اﻟﻣﺻﻔوﻓﺔ $_FILES
ﺗ ُﺨﺰن ھﺬه اﻟﻤﺼﻔﻮﻓﺔ ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﻤﻠﻒ أو اﻟﻤﻠﻔﺎت اﻟﺘﻲ ﺗﻢ رﻓﻌﮭﺎ إﻟﻰ اﻟﺨﺎدم .و ﺑﺸﻜﻞ ﻋﺎم ھﺬه
اﻟﻤﺼﻔﻮﻓﺔ ﺛﻨﺎﺋﯿﺔ اﻟﺒﻌﺪ ﺣﯿﺚ ﯾُﻌﺒﺮ اﻟﺒﻌﺪ اﻷول ﻋﻦ اﺳﻢ ﺣﻘﻞ اﻟﻤﻠﻒ اﻟﻤ ُﺤﺪد ﻓﻲ ﺣﻘﻞ اﻟﻤﻠﻒ ﻓﻲ ﻧﻤﻮذج
HTMLأﻣﺎ اﻟﺒﻌﺪ اﻟﺜﺎﻧﻲ ,ﻓﯿﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﺳﻢ اﻟﻤﻠﻒ أو ﺣﺠﻤﮫ أو ﻧﻮﻋﮫ أو رﺳﺎﻟﺔ اﻟﺨﻄﺄ ﻓﻲ
ﺣﺎل وﺟﻮدھﺎ .
* اﻟﺠﺪول اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺴﺎﺑﻘﺔ ,وﺗﻢ اﻋﺘﻤﺎد file1ﻛﺎﺳﻢ ﻟﺤﻘﻞ اﻟﻤﻠﻒ ) ﻟﻠﺘﻮﺿﯿﺢ
ﻓﻘﻂ (
اﻟﺷرح اﻟﻘﯾﻣﺔ
ﯾُﺤﺪد ھﺬا اﻟﻤﺘﻐﯿﺮ اﺳﻢ اﻟﻤﻠﻒ اﻷﺻﻠﻲ ﻛﻤﺎ ھﻮ ﻓﻲ ﺟﮭﺎز ]'$_FILES['file1']['name
اﻟﻤﺴﺘﺨﺪم .
ﻛﻤﺎ ھﻮ واﺿﺢ ﻣﻦ اﻻﺳﻢ ,ﺗ ُﺤﺪد ھﺬه اﻟﻘﯿﻤﺔ ﺣﺠﻢ اﻟﻤﻠﻒ اﻟﺬي ﺗﻢ ]' : $_FILES['file1']['size
رﻓﻌﮫ ﻣﻘﺪرا ﺑﺎﻟﺒﺎﯾﺖ ,ﻟﺬا ﻗﺪ ﺗﺤﺘﺎج إﻟﻰ ﻗﺴﻤﺔ ھﺬا اﻟﺮﻗﻢ ﻋﻠﻰ
1024او 1024^2ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﺣﺠﻢ اﻟﻤﻠﻒ ﻣﻘﺪرا
ﺑﺎﻟﻜﯿﻠﻮﺑﺎﯾﺖ أو اﻟﻤﯿﻐﺎﺑﺎﯾﺖ ﻋﻠﻰ اﻟﺘﻮاﻟﻲ .
) ( 45 اﻟﻔﺻل اﻟﺗﺎﺳﻊ ) رﻓﻊ اﻟﻣﻠﻔﺎت اﻟﻰ اﻟﺧﺎدم (
ﺗﺣدد ھذه اﻟﻘﯾﻣﺔ ﻣﺎ ﯾﺳﻣﻰ MIME typeﻟﻠﻤﻠﻒ اﻟﺬي رﻓﻌﮫ , ]'$_FILES['file1']['type
ﻓﻤﺜﻼ ً ﺗﻜﻮن ﻗﯿﻤﺔ MIME typeﻟﺼﻮرة ﻣﻦ ﺻﯿﻐﺔ png
ھﻲ pdf ﻟﻤﻠﻒ او image/png ھﻲ
, application/pdfﻣﻠﻒ ﻣﻀﻐﻮط ﻣﻦ ﻧﻮع zipھﻲ
application/zip
]' $_FILES['file1']['tmp_nameﺗ ُﺤﺪد ھﺬه اﻟﻘﯿﻤﺔ اﺳﻢ اﻟﻤﻠﻒ اﻟﻤﺆﻗﺖ اﻟﻤ ُﺨﺰن ﻋﻠﻰ اﻟﺨﺎدم ,
وﺳﯿﺘﻢ اﺳﺘﺨﺪام ھﺬه اﻟﻘﯿﻤﺔ ﻛﺜﯿﺮا ﻋﻨﺪ اﺳﺘﺪﻋﺎء اﻟﺪوال اﻟﺨﺎﺻﺔ
ﺑﺮﻓﻊ اﻟﻤﻠﻔﺎت ﻛﻤﺎ ﺳﻨﺮى ﻻﺣﻘﺎ ً .
ﻻ ﯾﻤﻜﻦأﺑﺪا ً ﺿﻤﺎن ﺳﯿﺮ ﻋﻤﻠﯿﺔ رﻓﻊ ﻣﻠﻒ ﻋﻠﻰ اﻟﺨﺎدم ﺑﺸﻜﻞ ]'$_FILES['file1']['error
ﺻﺤﯿﺢ ,وﺑﻌﺾ اﻟﺤﯿﺎن ﺗﻜﻮن ھﻨﺎﻟﻚ ﻣﺸﻜﻠﺔ ﻓﻲ رﻓﻊ اﻟﻤﻠﻔﺎت و
ﻣﻦ اﻟﻤ ُﻔﯿﺪ ﻣﻌﺮﻓﺘﮭﺎ و ﺗﺒﻠﯿﻎ اﻟﻤﺴﺘﺨﺪم ﻋﻦ ﺳﺒﺐ اﻟﺨﻄﺄ ,ﺣﯿﺚ
ﺗ ُﻌﯿﺪ اﻟﻘﯿﻤﺔ رﻗﻢ رﺳﺎﻟﺔ اﻟﺨﻄﺄ أو اﻟﺜﺎﺑﺖ اﻟﻤﻮاﻓﻖ ﻟﮭﺎ .
ﻣﺜﺎل /
<?php
{)]'if($_POST['sub
;]'echo $_FILES['NAME']['name
}
>?
>"<form method="post" enctype="multipart/form-data
>"<input type="file" name="NAME
>"<input type="submit" name="sub
></form
ﻛﻣﺎ ﺗﻣت اﻹﺷﺎرة إﻟﯾﮫ ﻓﻲ اﻟﺟدول اﻟﺳﺎﺑق ﻓﺈن اﻟﻘﯾﻣﺔ ]' $_FILES['file1']['errorﺗﻌﯿﺪ ﺛﺎﺑﺖ او
رﻗﻢ ﯾﺪل ﻋﻠﻰ اﻟﺨﻄﺄ اﻟﺬي ﺣﺪث أﺛﻨﺎء اﻟﺮﻓﻊ ,واﻟﺠﺪول اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ أﺑﺮز ھﺬه اﻟﻘﯿﻢ
ﯾﺗم إﻋﺎدة ھذه اﻟﻘﯾﻣﺔ ﻋﻧد رﻓﻊ ﺟزء ﻣن اﻟﻣﻠف وﻋدم اﻟﺗﻣﻛن ﻣن UPLOAD_ERR_PARTIAL , 3
. رﻓﻌﮫ ﻛﺎﻣﻼ ً ﻛﺣدوث ﻣﺷﻛﻠﺔ ﻓﻲ اﻟﺷﺑﻛﺔ
ﯾﺗم إﻋﺎدة ھذه اﻟﻘﯾﻣﺔ ﻋﻧدﻣﺎ ﯾﻘوم اﻟﻣﺳﺗﺧدم ﻣن إرﺳﺎل ﻧﻣوذج UPLOAD_ERR_NO_FILE , 4
. دون ﺗﺤﺪﯾﺪ ﻣﻠﻒ ﻟﻜﻲ ﯾﺘﻢ رﻓﻌﮫHTML
. وﺑﺎﻟﻄﺒﻊ ﯾﻤﻜﻦ اﻟﺘﺤﻘﻖ ﻣﻦ رﺳﺎﻟﺔ اﻟﺨﻄﺄ أﻣﺎ ﺑﺎﺳﺘﺨﺪام اﻷرﻗﺎم أو ﺑﻤﺴﺎواﺗﮭﻢ ﺑﺎﻟﺜﻮاﺑﺖ اﻟﺴﺎﺑﻘﺔ
اﻟداﻟﺔ is_uploaded_file
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﻠﺗﺄﻛد ﻣن رﻓﻊ اﻟﻣﻠف وﺗﻌﯾد اﻟﻘﯾﻣﺔ trueﻓﻲ ﺣﺎل ﺗﻢ اﻟﺮﻓﻊ و falseﻓﯿﻤﺎ ﺧﻼف
ذﻟﻚ ,وﺗﺄﺧﺬ وﺳﯿﻂ وﺣﯿﺪ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ وھﻮ اﻻﺳﻢ اﻟﻤﺆﻗﺖ ﻟﻠﻤﻠﻒ ,وﺗﻜﻮن اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ھﺎ ﺑﮭﺬا
اﻟﺸﻜﻞ
;)is_uploaded_file($filename
اﻟداﻟﺔ move_uploaded_file
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻨﻘﻞ ﻣﻠﻒ ﺗﻢ رﻓﻌﮫ إﻟﻰ ﻣﺠﻠﺪ ﻣﻌﯿﻦ وﺗﻘﺒﻞ ھﺬه اﻟﺪاﻟﺔ وﺳﯿﻄﯿﻦ :اﻷول ھﻮ اﺳﻢ
اﻟﻤﻠﻒ اﻟﻤﺆﻗﺖ واﻟﺜﺎﻧﻲ ھﻮ اﻟﻤﺴﺎر اﻟﮭﺪف اﻟﺬي ﺳﯿﺘﻢ ﻧﻘﻞ اﻟﻤﻠﻒ إﻟﯿﮫ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
;)move_uploaded_file($tmp_name, $distination
ﻣﺜﺎل/
<?php
{)]'if($_POST['sub
;]'$name_file = $_FILES['NAME']['name
;]'$temp_file = $_FILES['NAME'][ 'tmp_name
;"$folder = "Myfolder
;) move_uploaded_file( $temp_file , $folder."/".$name_file
}
>?
>"<form method="post" enctype="multipart/form-data
>"<input type="file" name="NAME
>"<input type="submit" name="sub
></form
ﻣﻼﺣﻈﺔ /اذا ﺣﺎوﻟﻨﺎ رﻓﻊ ﻣﻠﻒ اﻟﻰ ﻣﺠﻠﺪ وﻛﺎن ﻧﻔﺲ اﻟﻤﻠﻒ ﻣﻮﺟﻮد ) ﻧﻔﺲ اﻻﺳﻢ واﻻﻣﺘﺪاد (ﻣﺴﺒﻘﺎ ً
ﻓﻲ اﻟﻤﺠﻠﺪ ﻓﺄﻧﮫ ﺳﻮف ﯾﺘﻢ اﺳﺘﺒﺪال اﻟﻤﻠﻒ اﻟﻘﺪﯾﻢ ﺑﺎﻟﻤﻠﻒ اﻟﺠﺪﯾﺪ .
) ( 48 اﻟﻔﺻل اﻟﺗﺎﺳﻊ ) رﻓﻊ اﻟﻣﻠﻔﺎت اﻟﻰ اﻟﺧﺎدم (
اﻟﻔﺼﻞ اﻟﻌﺎﺷﺮ
) دوال ﻣﻨﻮﻋﺔ (
اﻟﺪاﻟﺔ rand
ﻣﺜﺎل -:
; ) $x = rand ( 1 , 10
ﺣﯿﺚ إﻧﮭﺎ ﺳﺘﻌﻤﻞ ﻋﻠﻰ اﺧﺘﯿﺎر رﻗﻢ ﻋﺸﻮاﺋﻲ ﻣﻦ اﻟﻮاﺣﺪ إﻟﻰ اﻟﻌﺸﺮة )ﺑﺤﺴﺐ ﻣﺎ ﻧﺮﯾﺪ وﯾﻤﻜﻦ وﺿﻊ
أرﻗﺎم أﺧﺮى ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ ﻟﻜﻲ ﺗﺨﺘﺎر اﻟﺪاﻟﺔ اﻟﺮﻗﻢ ﻣﻦ ﺑﯿﻦ ھﺬﯾﻦ اﻟﺮﻗﻤﯿﻦ ( ووﺿﻌﮫ ﻓﻲ اﻟﻤﺘﻐﯿﺮ ) ( x
.
getenv("REMOTE_ADDR”);
ﺗﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﻠﺣﺻول ﻋﻠﻰ ipاﻟﻣﺳﺗﺧم ,ﻻﺣظ ﻓﻲ ھذا اﻟﻣﺛﺎل ﺳﻧﻘوم ﺑطﺑﺎﻋﺔ ip
اﻟزاﺋر ﻟﻠﻣوﻗﻊ ,ﻣﺛﺎل /
;)”$x = getenv("REMOTE_ADDR
; Echo $x
$_SERVER['REMOTE_ADDR'];
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﻠﺣﺻول ﻋﻠﻰ ipاﻟزاﺋر وھﻲ ﺗﻣﺎﻣﺎ ً ﻧﻔس اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ .
ﻣﺛﺎل/
;]'$ x = $_SERVER['REMOTE_ADDR
; echo $x
) ( 50 اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (
اﻟﺪاﻟﺔ ;) (get_magic_quotes_gpc
ﻋﻧد ادﺧﺎل اﻟﻣﺳﺗﺧدم ﻓﻲ اﻟﺣﻘل اﻟﻧﺻﻲ ﻋﻼﻣﺔ ﺗﻧﺻﯾص ﻣﻔردة او ﻣزدوﺟﺔ ﻓﺄن ﻣﻌﺎﻟﺞ اﻟﻠﻐﺔ )
اﻟﺳﯾرﻓر ( ﺳﯾﺿﻊ ﻗﺑل ﻛل ﻋﻼﻣﺔ ﺗﻧﺻﯾص ﻋﻼﻣﺔ ﺳﻼش ﺧﻠﻔﯾﺔ وھذا اﻷﻣر ﻣﮭم ﺟدا ً ﻟﻠﺣﻣﺎﯾﺔ ﻟﻛن
ﻓﻲ ﺑﻌض اﻟﺳﯾرﻓرات ﻻ ﺗﻛون ﻋﻣﻠﯾﺔ اﻹﺿﺎﻓﺔ ھذه ﻣﻔﻌﻠﺔ ﻟذﻟك ﻧﺣﺗﺎج اﻟﻰ داﻟﺔ اﻟﺣﻣﺎﯾﺔ
addslashesﻷﺿﺎﻓﺔ ﻋﻼﻣﺔ اﻟﺳﻼش ) وﺳﯾﺗم ﺷرح اﻟداﻟﺔ addslashesﻓﻲ اﻟﻔﺻول اﻟﻘﺎدﻣﺔ (
,وھﻧﺎ ﺗظﮭر ﻓﺎﺋدة اﻟداﻟﺔ get_magic_quotes_gpcﺣﯾث أﻧﮭﺎ ﺳﺗﻌﯾد اﻟﻘﯾﻣﺔ 1او trueاذا
ﻛﺎﻧت ﻋﻣﻠﯾﺔ اﺿﺎﻓﺔ اﻟﺳﻼش ﻣﻔﻌﻠﺔ ﻣن ﻗﺑل اﻟﺳﯾرﻓر وﺗﻌﯾد اﻟﻘﯾﻣﺔ 0او falseاذا ﻟم ﺗﻛن ﻣﻔﻌﻠﺔ .
wordwrap
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻻﺿﺎﻓﺔ ﺣرف ﻣﻌﯾن ﺑﻌد ﻋدد ﻣﻌﯾن ﻣن اﻟﺣروف وھﻲ ﺗﺄﺧذ أرﺑﻊ ﻗﯾم
اﻷوﻟﻰ ﺗﻣﺛل اﻟﻣﺗﻐﯾر اﻟذي ﯾﺣﻣل اﻟﻛﻠﻣﺎت واﻟﻘﯾﻣﺔ اﻟﺛﺎﻧﯾﺔ ﺗﻣﺛل ﻋدد اﻟﺣروف اﻟﺗﻲ ﺳﯾﺑدأ ﺑﻌدھﺎ
أﺿﺎﻓﺔ اﻟﺣرف اﻟﺟدﯾد واﻟﻘﯾﻣﺔ اﻟﺛﺎﻟﺛﺔ ﺗﻣﺛل اﻟﺣرف اﻟﺟدﯾد واﻟﻘﯾﻣﺔ اﻟراﺑﻌﮫ ھﻲ true
ﻣﺛﺎل/
;”$x = “sssssssssssssssssssssssssssss
ﺣﯾث ھﻧﺎ ﻓﻲ ھذا اﻟﻣﺛﺎل أﺿﻔﻧﺎ ﻓﺎﺻﻠﺔ ﺑﻌد ﻛل ﺛﻼﺛﺔ أﺣرف .
mail
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻹرﺳﺎل رﺳﺎﻟﺔ إﻟﻰ ﺑرﯾد اﻟﯾﻛﺗروﻧﻲ ﻣﻌﯾن ,ﻻﺣظ أن ھذه اﻟداﻟﺔ ﻻ ﺗﻌﻣل إذا ﻛﻧﺎ
ﻧﺳﺗﺧدن اﻟﺳﯾرﻓر اﻟﺷﺧﺻﻲ ,واﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ ﻟﻠداﻟﺔ ھﻲ -:
; ) ’ﻧص اﻟرﺳﺎﻟﺔ’ ’ ,اﻷﺳﺗﻔﺳﺎر’ ,ﻋﻧوان اﻟﺑرﯾد اﻟذي ﺳﺗرﺳل إﻟﯾﮫ (mail
) ( 51 اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (
اﻟداﻟﺔ header
ھﺬه اﻟﺪاﻟﺔ ﺗﺴﺘﺨﺪم ﻹرﺳﺎل ﺑﯿﺎﻧﺎت ﻣﻦ اﻟﺴﯿﺮﻓﺮ اﻟﻰ ﻣﺘﺼﻔﺢ اﻟﺰاﺋﺮ وﯾﻤﻜﻦ ان ﺗﻜﻮن ھﺬه اﻟﺒﯿﺎﻧﺎت
ھﻲ ﻋﺒﺎرة ﻋﻦ ﺻﻔﺤﺔ ﺟﺪﯾﺪة وﺑﮭﺬا ﺳﯿﻨﻘﻞ اﻟﺰاﺋﺮ ﻣﺒﺎﺷﺮﺗﺎ ً اﻟﻰ ھﺬا اﻟﺼﻔﺤﺔ او ﯾﻤﻜﻦ ان ﺗﻜﻮن
اﺑﯿﺎﻧﺎت اﻟﻤﺮﺳﻠﮫ ھﻲ ﻋﺒﺎرة ﻋﻦ ﺻﻮر او ﻧﺼﻮص او اﺷﯿﺎء أﺧﺮى وﺑﮭﺬه اﻟﺤﺎﻟﺔ ﺳﯿﻌﺮﺿﮭﺎ ﻋﻠﻰ
ﻣﺘﺼﻔﺢ اﻟﺰاﺋﺮ ,وﯾﺠﺐ ان ﺗﻨﺘﺒﮫ اﻟﻰ أﻣﺮ ﻣﮭﻢ ﺟﺪا ً وھﻮ اﻧﮫ ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام أي ﻣﺨﺮﺟﺎت ﻗﺒﻞ ھﺬه
اﻟﺪاﻟﺔ أي ﯾﺠﺐ أن ﺗﻜﻮن ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺼﻔﺤﺔ واﻟﻤﻘﺼﻮد ﺑﺎﻟﻤﺨﺮﺟﺎت ھﻲ ﻣﺜﻼ ً وﺳﻮم
htmlاو اﻟﺪاﻟﺔ echoاو اﻟﺪاﻟﺔ , printاﻟﺪاﻟﺔ headerﺗﺘﻜﻮن ﻣﻦ ﺟﺰﺋﯿﻦ اﻷول ھﻮ اﻟﻌﻤﻠﯿﺔ
واﻟﺜﺎﻧﻲ ھﻮ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺗﺄﺧﺬھﺎ ھﺬه اﻟﻌﻤﻠﯿﺔ .
اﻟﻌﻤﻠﯿﺎت ھﻲ -:
Location -1وھﻲ ﻣﺴﺌﻮﻟﮫ ﻋﻤﺎ اذا ﻛﻨﺎ ﻧﺮﯾﺪ ان ﻧﺮﺳﻞ ) ﻧﺤﻮل ( اﻟﺰاﺋﺮ اﻟﻰ ﺻﻔﺤﺔ ﺟﺪﯾﺪة
,وﺗﺤﺪث ھﺬه اﻟﻌﻤﻠﯿﺔ ﺑﺸﻜﻞ ﺳﺮﯾﻊ ﺟﺪا ً .
Content-Type -2وھﺬه اﻟﻌﻤﻠﯿﺔ ﻣﺴﺌﻮﻟﺔ ﻋﻤﺎ اذا ﻛﻨﺎ ﻧﺮﯾﺪ ان ﻧﺮﺳﻞ اﻟﻰ اﻟﺰاﺋﺮ ﻣﻠﻔﺎت ﻗﺪ
ﺗﻜﻮن ﺻﻮر او ﻧﺼﻮص او ...إﻟﺦ .
ﻻﺣﻆ ﺑﺄﻧﮫ ﻧﻔﺼﻞ ﺑﯿﻦ اﻟﻌﻤﻠﯿﺔ واﻟﻘﯿﻤﺔ ﺑﺎﻟﻌﻼﻣﺔ ) ( :ﻟﻜﻦ ﯾﺠﺐ أن ﺗﻜﻮن ھﺬه اﻟﻌﻼﻣﺔ ﻣﻼﺻﻘﺔ
ﻟﻠﻌﻤﻠﯿﺔ أي أن ﻻ ﯾﻜﻮن ھﻨﺎك ﻓﺮاغ ) ﻣﺴﺎﻓﺔ ( ﺑﯿﻨﮭﺎ وﺑﯿﻦ اﻟﻌﻤﻠﯿﺔ ﺛﻢ ﻧﻀﻊ ﻓﺎﺻﻠﺔ ﺛﻢ اﻟﻘﯿﻤﺔ .
ﻣﺛﺎل /ﻟﻧﻘل اﻟزاﺋر ﻣﺑﺎﺷرﺗﺎ ً اﻟﻰ ﺻﻔﺣﺔ أﺧرى واﻟﺗﻲ اﺳﻣﮭﺎ page2
;) "header( "Location: page2.html
ﻻﺣظ ﺑﺄن ھذه اﻟدوال ﺗﺳﺗﺧدم ﻋﻧدﻣﺎ ﯾﻛون ھﻧﺎك ﻣﺷﻛﻠﺔ ﻓﻲ اﻟﻣﺧرﺟﺎت ﺧﺻوﺻﺎ ً ﻋﻧد اﺳﺗﺧدام
اﻟداﻟﺔ headerاو ﻋﻧد اﺳﺗﺧدام اﻟﻛﻌﻛﺎت cookieاو ﻋﻧد اﺳﺗﺧدام اﻟﺟﻠﺳﺎت , sessionوﻛل ﻣﺎ
ﺳﻧﻘوﻟﮫ ﻓﻲ ھذه اﻟدوال ﻋن اﻟداﻟﺔ headerﻓﮭو ﯾﻧطﺑق ﻋﻠﻰ اﻟﻛﻌﻛﺎت وﻋﻠﻰ اﻟﺟﻠﺳﺎت أﯾﺿﺎ ً )
واﻟﺗﻲ ﺳﻧﺄﺧذھﺎ ﻓﻲ ﻓﺻول ﻗﺎدﻣﺔ ( .
اﻟﺪاﻟﺔ ) (ob_start
ﻛﻣﺎ ﻗﻠﻧﺎ ﺳﺎﺑﻘﺎ ً اذا اﺳﺗﺧدﻣﻧﺎ ﻋﻣﻠﯾﺎت اﺧراج ﻟﻠﺑﯾﺎﻧﺎت ﻗﺑل اﻟداﻟﺔ headerﻓﺄن اﻟﻣﺗﺻﻔﺢ ﺳﯾﻌرض
ﻟﻧﺎ ﺧطﺄ ﻷﻧﻲ ﻻ ﯾدري ﻣﺎذا ﺳﯾﻌرض ھل ﯾﻌرض اﻟﻣﺧرﺟﺎت اﻟﺗﻲ ﺗﺳﺑق اﻟداﻟﺔ headerام
ﯾﻌرض ﻣﺧرﺟﺎت اﻟداﻟﺔ ﻧﻔﺳﮭﺎ ,ﻟﻛن ﺑﺎﺳﺗﺧدام اﻟداﻟﺔ ) ( ob_startﻓﺄﻧﮫ ﻟن ﯾظﮭر ﻟﻧﺎ أي ﺧطﺄ
وﺳﯾﻌرض ﻣﺧرﺟﺎت اﻟداﻟﺔ , headerﻟﻛن ﻻﺣظ ﺑﺄﻧﮫ ﯾﺟب أن ﺗﻛون اﻟﻣﺧرﺟﺎت اﻟﺗﻲ ﺗﺳﺑق
اﻟداﻟﺔ hearedواﻟداﻟﺔ ﻧﻔﺳﮭﺎ ﺗﻛﺗب ﺑﻌد ان ﻧﻛﺗب ) (. ob_start
ﻧﺳﺗﺧدم أﺣد ھذه اﻟدوال ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﻛود واﻟﻔرق ﺑﯾﻧﮭم ھو ان اﻟداﻟﺔ ) ( ob_end_flushﺗﻘوم
ﺑﺣذف اﻟﻣﻠﻔﺎت ﺑﻌد ارﺳﺎﻟﮭﺎ ﻟﻠزاﺋر اﻣﺎ اﻟداﻟﺔ ) ( ob_flushﻓﺄﻧﮭﺎ ﻟن ﺗﺣذف اﻟﻣﻠﻔﺎت ﺑﻌد إرﺳﺎﻟﮭﺎ
ﻟﻠزاﺋر .
ﻣﺛﺎل/
;) (ob_start
;">echo "<html></html
;) "header( "Location: page2.html
;"print "Welcome Ahmed
;) (ob_end_flush
اﻟﺪاﻟﺔ ) (ob_get_contents
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﺗﺟﻣﯾﻊ اﻟﺑﯾﺎﻧﺎت ) اﻟﻣﺧرﺟﺎت ( وﺗﻌرﺿﮭﺎ دﻓﻌﮫ واﺣدة .
ﻣﺛﺎل/
;) (ob_start
;"print "Welcome Ahmed
;) "header( "Location: page2.html
;) ($x = ob_get_contents
;) (ob_end_flush
) ( 53 اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (
اﻟﺪاﻟﺔ printf
ﻣﺜﺎل/
اﻟﺪاﻟﺔ sprint
ﻣﺜﺎل/
) $x=sprint ("hello" , 5
اﻟﺪاﻟﺔ ] [$_POST
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻻﺳﺘﺨﺮاج اﻟﻘﯿﻢ ﻣﻦ اﻟﻨﻤﺎذج ﺑﺘﻤﺮﯾﺮ اﺳﻢ ﺣﻘﻞ اﻹدﺧﺎل ﻣﻦ اﻟﻨﻤﻮذج ﻋﻠﯿﮭﺎ ,
وﺗﺟﻠب اﻟﻘﯾم ﻋﻠﻰ ﺷﻛل ﻣﺻﻔوﻓﺔ .
ﻣﺜﺎل/
; ] '$_POST[ 'user
اﻟﺪاﻟﺔ ] [$_GET
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻻﺳﺘﺨﺮاج اﻟﻘﯿﻢ ﻣﻦ رواﺑﻂ اﻟﺼﻔﺤﺔ ﺑﺘﻤﺮﯾﺮ اﺳﻢ اﻟﻣﺗﻐﯾر ﻓﻲ اﻟراﺑط إﻟﻰ اﻟﺪاﻟﺔ ,
وﺗﺟﻠب اﻟﻘﯾم ﻋﻠﻰ ﺷﻛل ﻣﺻﻔوﻓﺔ .
; ] '$_GET[ 'id
) ( 54 اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (
اﻟﺪاﻟﺔ ] [$_REQUEST
ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻤﻞ اﻟﺪاﻟﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ $_POST , $_GETﺣﯿﺚ اذا اﻧﮭﺎ ﺳﺘﺴﺘﻘﺒﻞ اﻟﺒﯿﺎﻧﺎت
ﺳﻮاء ﻛﺎﻧﺖ ﻣﺮﺳﻠﺔ ﺑﺎﻟﻄﺮﯾﻘﺔ postاو ﺑﺎﻟﻄﺮﯾﻘﺔ , getﻣﺜﺎل /
; ] '$_ REQUEST[ 'id
اﻟﺪاﻟﺔ empty
وھﻲ ﺗﺘﺤﻘﻖ ﻣﻦ أن ﻧﻤﻮذج اﻹدﺧﺎل ﻏﯿﺮ ﻓﺎرغ وﻻﺣﻆ أﻧﮭﺎ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ trueإذا ﻛﺎن ﻣﺮﺑﻊ اﻹدﺧﺎل
ﻓﺎرغ
{ ) ) ] 'if (empty ($_POST[ 'username
اﻟﺪاﻟﺔ ; ) (strlen
ﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﻣﻌﺮﻓﺔ ﻋﺪد اﻷﺣﺮف اﻟﺘﻲ ﯾﺪﺧﻠﮭﺎ اﻟﻤﺴﺘﺨﺪم .
; ] '$user=$_POST[ 'user
{ ) if (strlen ( $user ) > 30
; "echo "that is too much
} ; ) " die ( "Erorr
* وﯾﻣﻛن اﺳﺗﺧدام ھذه اﻟداﻟﺔ ﻟﺟﻠب ﻋدد أﺣرف اﻟﻧﺻوص اﻟﺗﻲ ﯾدﺧﻠﮭﺎ اﻟﻣﺳﺗﺧدم
ﻣﺛﺎل /
;'$x = 'This is a string
;)echo strlen($x
strcmp
ﻣﺜﺎل/
;”$var1 = “Ahmed
;”$var2 = “Ahmed
{) if( strcmp($var1,$var2) == 0
;”echo “Yes
{ } else
} ;”echo “No
ﺳﺘﻜﻮن اﻟﻘﯿﻤﺔ اﻟﻨﺎﺗﺠﺔ Yes
اﻟﺪاﻟﺔ ; ) (die
وھﻲ ﺗﻘﻮم ﺑﻌﺮض رﺳﺎﻟﺔ ﺧﻄﺄ وﻣﺎ ﺑﯿﻦ اﻷﻗﻮاس ﯾﻜﻮن ﻣﺤﺘﻮى اﻟﺮﺳﺎﻟﺔ وھﻲ ﺗﺧرج ﻣن اﻟﻛود )ﻣﺛل
, ( exitﻻﺣﻆ اﻟﻤﺜﺎل ﻓﻲ اﻷﻋﻠﻰ .
اﻟﺪاﻟﺔ ;) (exit
وھﻲ ﺗﺴﺘﺨﺪم ﻟﻠﺨﺮوج ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ ) اﯾﻘﺎف ﻋﻤﻠﯿﺔ ﻗﺮاءة اﻟﻜﻮد ﻣﻦ ﻗﺒﻞ اﻟﻤﺘﺼﻔﺢ (
اﻟداﻟﺔ strtolower
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺘﺤﻮﯾﻞ ﺣﺎﻟﺔ ﺟﻤﯿﻊ اﻟﺤﺮف اﻻﻧﻜﻠﯿﺰﯾﺔ إﻟﻰ أﺣﺮف ﺻﻐﯿﺮة ,وﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ
ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻋﻨﺪ ﺗﺴﺠﯿﻞ اﻟﻤﺴﺘﺨﺪم ﻓﻲ اﻟﻤﻮﻗﻊ ﺣﯿﺚ ﻧﻘﻮم ﺑﺠﻌﻞ ﺟﻤﯿﻊ أﺣﺮفاﻟﻤ ُﻌﺮف ﺻﻐﯿﺮة ﺣﺘﻰ
ﻻ ﯾﻜﻮن ﻟﺪﯾﻨﺎﻣﺴﺘﺨﺪﻣ َ ﯿﻦ ﺑﻨﻔﺲ اﻟﻤ ُﻌﺮف ,ﺗﻘﺒﻞ ھﺬه اﻟﺪاﻟﺔ وﺳﯿﻄﺎوﺣﯿﺪا ً ھﻮ اﻟﺴﻠﺴﺔ اﻟﻨﺼﯿﺔ وﺗ ُﻌﯿﺪ
ﺳﻠﺴﻠﺔ ﻧﺼﯿﺔ ﯾﻜﻮن ﻓﯿﮭﺎ ﺟﻤﯿﻊ اﻟﺤﺮف ﺑﺎﻟﺤﺎﻟﺔ اﻟﺼﻐﯿﺮة .
ﻣﺛﺎل/
;'$x = 'This Is A sTrIng 123
;)echo strtolower($x
اﻟﺪاﻟﺔ strtoupper
ھﻲ ﺗﻤﺎم ً ﻧﻔﺲ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ﻟﻜﻦ اﻟﻔﺮق اﻟﻮﺣﯿﺪ ھﻮ أن ھﺬه اﻟﺪاﻟﺔ ﺗﺤﻮل ﺟﻤﯿﻊ اﻷﺣﺮف إﻟﻰ أﺣﺮف
ﻛﺒﯿﺮة ) ﻋﻜﺲ ﻋﻤﻞ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ( .
اﻟداﻟﺔ str_replace
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻻﺳﺘﺒﺪال ﻧﺺ ﻣﻌﯿﻦ ﺑﻨﺺ آﺧﺮ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
) ﻣﻛﺎن اﻟﻧص ,اﻟﻧص اﻟﺟدﯾد ,اﻟﻧص اﻟﻘدﯾم ( str_replace
ﻣﺛﺎل/
اﻟداﻟﺔ str_ireplace
ھﺬه اﻟﺪاﻟﺔ ھﻲﺗﻤﺎﻣﺎ ً ﻧﻔﺲ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ﻟﻜﻦ اﻟﻔﺮق اﻟﻮﺣﯿﺪ ھﻮ أن ھﺬه اﻟﺪاﻟﺔ ﻏﯿﺮ ﺣﺴﺎﺳﺔ ﻟﺤﺎﻟﺔ
اﻷﺣﺮف اﻟﻜﺒﯿﺮة واﻟﺼﻐﯿﺮة .
اﻟﺪاﻟﺔ phpversion
ﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﻣﻌﺮﻓﺔ ﻧﺴﺨﺔ اﻟـ ) phpإﺻﺪارھﺎ ( اﻟﻤﻮﺟﻮدة ﻟﺪﯾﻨﺎ ,ﻣﺜﺎل/
; ) (echo phpversion
اﻟﺪاﻟﺔ zend_version
ﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﻣﻌﺮﻓﺔ اﺻﺪار ﻣﺤﺮك zendاﻟﺬي ﺗﻌﻤﻞ ﻋﻠﯿﮫ اﻟﻠﻐﺔ ,ﻣﺜﺎل /
; ) (echo zend_version
) ( 57 اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (
اﻟﺪاﻟﺔ php_uname
ﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﻣﻌﺮﻓﺔ ﻧﻮع ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ,ﻣﺜﺎل /
; ) (echo php_uname
اﻟﺪاﻟﺔ ord
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ رﻗﻢ اﻟـ ASCIIاﻟﺨﺎص ﺑﺎﻟﺤﺮف اﻟﻤﻤﺮر ﻟﮭﺎ ,ﻣﺜﺎل /
;)’$var = ord(‘D
; echo $var
اﻟﺪاﻟﺔ chr
ھﺬه اﻟﺪاﻟﺔ ھﻲ ﻋﻜﺲ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ﺣﯿﺚ اﻧﮭﺎ ﺗﻘﻮم ﺑﺘﺤﻮﯾﻞ اﻟﺮﻗﻢ اﻟﻰ ﻣﺎ ﯾﻌﺎدﻟﮫ ﻣﻦ اﻟﺤﺮوف
ﻣﺜﺎل /
;)$var = chr(97
; echo $var
) ( 58 اﻟﻔﺻل اﻟﺣﺎدي ﻋﺷر ) دوال اﻷﻣن واﻟﺣﻣﺎﯾﺔ (
md5
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﺗﺷﻔﯾر ﻛﻠﻣﺔ اﻟﻣرور اﻟﺗﻲ ﯾدﺧﻠﮭﺎ اﻟﻣﺳﺗﺧدم .
ﻣﺛﺎل/
;) ]’$pass = md5( $_POST[‘password
اﻟﺪاﻟﺔ ; ) (trim
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺤﺬف ﺷﻲء ﻣﻦ ﺑﺪاﯾﺔ وﻧﮭﺎﯾﺔ اﻟﻨﺺ اﻟﻤﺤﺪد إذا ﻛﺎن ﻣﻮﺟﻮد ﺣﯿﺚ ان ھﺬه اﻟﺪاﻟﺔ
ﺗﺄﺧﺬ ﺑﺎراﻣﺘﺮﯾﻦ اﻷول ھﻮ اﻟﻨﺺ اﻟﻤﺮاد ﺗﻄﺒﯿﻖ اﻟﻌﻤﻠﯿﺔ ﻋﻠﯿﮫ واﻟﺜﺎﻧﻲ ھﻮ اﻟﺸﻲء اﻟﻤﺮاد ﺣﺬﻓﮫ وھﺬا
اﻟﺒﺎراﻣﯿﺘﺮ اﺧﺘﯿﺎري ﻻﻧﮫ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﻛﺘﺎﺑﺘﮫ ﻓﺄﻧﮫ ﺳﯿﺘﻢ ازاﻟﺔ اﻟﻔﺎﺻﻠﺔ ) اﻟﻔﺮاغ ( ﻣﻦ ﺑﺪاﯾﺔ وﻧﮭﺎﯾﺔ
اﻟﻨﺺ ,وھﺬه اﻟﺪاﻟﺔ ﺗﺴﺘﺨﺪم ﻓﻲ اﻟﻐﺎﻟﺐ ﻣﻊ اﻟﻤﺪﺧﻼت اﻟﺘﻲ ﯾﺪﺧﻠﮭﺎ اﻟﻤﺴﺘﺨﺪم .
ﻣﺜﺎل /
; ) ’$name = trim($_POST[‘user’] , ‘Ali
ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﯿﺘﻢ ازاﻟﺔ أي ﺣﺮف ﻣﻦ ﺣﺮوف ﻛﻠﻤﺔ Aliأﯾﻦ وﺟﺪ ھﺬا اﻟﺤﺮف ﻟﻮﺣﺪه أم وﺟﺪت
ﻛﺎﻣﻞ اﻟﻜﻠﻤﺔ ﻓﺄﻧﮫ ﺳﯿﺘﻢ ازاﻟﺘﮭﺎ ﻟﻜﻦ اﻧﺘﺒﮫ ﺑﺄﻧﮫ ﺳﯿﺤﺬف اﻟﺤﺮوف اذا وﺟﺪت ﻓﻲ ﺑﺪاﯾﺔ او ﻓﻲ ﻧﮭﺎﯾﺔ
اﻟﻨﺺ اﻟﻤﺪﺧﻞ وﻟﯿﺲ ﻓﻲ وﺳﻄﮫ .
) ( 59 اﻟﻔﺻل اﻟﺣﺎدي ﻋﺷر ) دوال اﻷﻣن واﻟﺣﻣﺎﯾﺔ (
اﻟﺪاﻟﺔ ; ) (Htmlspecialchars
إذا ﻗﻤﺖ ﺑﻮﺿﻊ ﻣﺮﺑﻊ ﻧﺺ وأردت ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﻛﺘﺎﺑﺔ ﺷﻲء ﻓﯿﮫ ﻓﺄﻧﮫ ﯾﺴﺘﻄﯿﻊ إدﺧﺎل أي ﺷﻲء
وﻟﻨﻔﺮض إﻧﮫ ﻛﺘﺐ ﻓﻲ ﻣﺮﺑﻊ اﻟﻨﺺ ﻛﺎﻟﺘﺎﻟﻲ ) ( I am <b> ahmed </b> ...ﻓﺴﯿﻌﻤﻞ
اﻟﻤﺘﺼﻔﺢ ﺑﻌﺮﺿﮭﺎ ﺑﻌﺪ ﻣﻌﺎﻟﺠﺘﮭﺎ ﻛﺎﻟﺘﺎﻟﻲ ) ( I am ahmed ...ﺣﯿﺚ ﻧﻼﺣﻆ أن اﻟﻤﺘﺼﻔﺢ ﯾﺘﻌﺎﻣﻞ
ﻣﻌﮭﺎ ﻛﺄﻧﮭﺎ ﻧﺼﻮص htmlوﻟﯿﺲ ﻛﻨﺺ ﻋﺎدي وﻟﻜﻲ ﻧﻌﺮﺿﮭﺎ ﻛﻨﺺ ﻋﺎدي ﻧﺤﺘﺎج إﻟﻰ ھﺬه اﻟﺪاﻟﺔ
ﺣﯿﺚ إﻧﮭﺎ ﺳﺘﻌﺎﻣﻞ ﻛﻮد htmlﻛﻨﺺ ﻋﺎدي وطﺒﯿﻌﻲﺗﻤﺎﻣﺎ ً ,وﻧﻀﻊ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ ﻓﻲ php
اﻟﺬي ﯾﺄﺧﺬ ﻗﯿﻤﺔ ﻣﻦ ﻣﺮﺑﻊ اﻟﻨﺺ اﻟﻤﻮﺟﻮد ﻓﻲ , htmlﻻﺣﻆ ھﺬا اﻟﻤﺜﺎل -:
ﻣﺘﻐﯿﺮ html
; echo $user
اﻟداﻟﺔ ; ) (htmlentities
ھﻲﺗﻘﺮﯾﺒﺎ ً ﻧﻔﺲ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ إﻻ أن اﻟﻔﺮق ﺑﯿﻨﮭﻤﺎ ھﻮ أن ھﺬه اﻟﺪاﻟﺔ ﺗﻐﯿﺮ ﺟﻤﯿﻊ رﻣﻮز ﻟﻐﺔ html
ﺑﺨﻼف اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ اﻟﺘﻲ ﺗﻤﻨﻊ ﺑﻌﺾ ﻣﻦ اﻟﺮﻣﻮز وﻟﯿﺲ ﻛﻠﮭﺎ ,ﻟﻛن ﺑﺷﻛل ﻋﺎم ﯾﻔﺿل اﺳﺗﺧدام
اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ .
ﻣﻼﺣظﺔ //ھذه اﻟداﻟﺔ ﻻ ﯾﻣﻛن اﺳﺗﺧداﻣﮭﺎ ﻣﻊ اﻟﻠﻐﺔ اﻟﻌرﺑﯾﺔ ﻷﻧﮭﺎ ﺳﺗﺷﻔر اﻟﻧص وﻻ ﯾﻣﻛن اﺳﺗﻌﺎدة
اﻟﻧص اﻷﺻﻠﻲ .
اﻟﺪاﻟﺔ strip_tags
ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ اﻧﺘﺰاع أي ﺗﺮوﯾﺴﺎت او وﺳﻮم ﺧﺎﺻﺔ ﺑﻠﻐﺎت أﺧﺮى وﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ
ﻟﻸﻣﺎن ﻣﻦ اﻟﮭﻜﺮز ,وﯾﻤﻜﻦ دﻣﺠﮭﺎ ﻣﻊ اﻟﺪاﻟﺔ ; ) ( trimﻟﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ھﻜﺬا -:
; ] '$user=$_POST[ 'user
addslashes
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻹﺿﺎﻓﺔ ﻋﻼﻣﺔ اﻟﺳﻼش ﻣزدوﺟﺔ ) ( //ﻗﺑل ﻛل ﻋﻼﻣﺔ ﺗﻧﺻﯾص ﻣﻔردة ' (
) وﻓﻲ اﻟﻌﺎدة ﺗﺳﺗﺧدم ﻣﻊ اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ .
ﻣﺛﺎل/
; )) ) addslashes (strip_tags( trim( $user
اﻟﺪاﻟﺔ ; ) (stripslashes
ﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ اﻟﺘﺨﻠﺺ ﻣﻦ ﻋﻼﻣﺎت اﻟﺴﻼش ) ( /اﻟﻤﺪﺧﻠﺔ ﻓﻲ ﺣﻘﻮل اﻹدﺧﺎل .
ﻣﺜﺎل/
; ] '$user=$_POST[ 'user
; ) stripslashes( $user
وﯾﻤﻜﻦ اﻷﺳﺘﻔﺎدة ﻣﻦ ھﺬه اﻟﺪاﻟﺔ ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ ان ﻧﺨﺮج اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﻻ ﻧﺮﯾﺪ
ان ﯾﺘﻢ ﻋﺮض ﻋﻼﻣﺎت اﻟﺴﻼش
اﻟﺪاﻟﺔ escapeshellcmd
ﺗﺘﺨﻠﺺ ھﺬه اﻟﺪاﻟﺔ ﻣﻦ ﻣن اﻛﺛر اﻟﻌﻼﻣﺎت اﻟﺗﻲ ﻣن اﻟﻣﻣﻛن ان ﯾﻛﺗﺑﮭﺎ اﻟﻣﺳﺗﺧدم ﻣﺛل & ^ ; # $ %
‘ “ \ * ﺣﯾث اﻧﮫ ﺳﯾﺗم اﻟﺗﺧﻠص ﻣن ھذه اﻟﻌﻼﻣﺎت
ﻣﺜﺎل /
; ] '$user=$_POST[ 'user
; ) escapeshellcmd( $user
mysql_real_escape_string
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﻠﺣﻣﺎﯾﺔ ﻣن ﻋﻣﻠﯾﺎت ﺣﻘن ﻗﺎﻋدة اﻟﺑﯾﺎﻧﺎت mysqlوھﻲ ﻣﮭﻣﺔ ﺟدا ً ﻟﻸﻣﺎن
ﻣن اﻟﮭﻛر ﺣﯾث أﻧﮭﺎ ﺳﺗﺗﺣﻘق ﻣﻣﺎ ﯾدﺧﻠﺔ اﻟﻣﺳﺗﺧدم ﻓﻲ ﺣﻘول اﻷدﺧﺎل اﻟﻧﻣﺎذج ﻓﻲ اﻟـ . html
) ( 61 اﻟﻔﺻل اﻟﺣﺎدي ﻋﺷر ) دوال اﻷﻣن واﻟﺣﻣﺎﯾﺔ (
ﻣﺛﺎل/
; ) ]’ mysql_real_escape_string( $_POST[‘ user
) ( 62 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (
ﯾﻤﻜﻦ ﻣﻦ ﺧﻼل ﻟﻐﺔ phpاﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺼﻮر وذﻟﻚ ﺑﺎﺳﺘﺨﺪام ﻣﻜﺘﺒﺔ GDواﻟﺘﻲ ﺗﻜﻮن ﻣﺘﻀﻤﻨﺔ ﻣﻊ
اﻠ phpﺑﺷﻛل اﻓﺗراﺿﻲ وھذه اﻟﻣﻛﺗﺑﺔ ﺗوﻓر ﻣﺟﻣوﻋﺔ ﻣن اﻟدوال وﻣن ھذه اﻟدوال -:
اﻟﺪاﻟﺔ getimagesiz
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻋﻄﺎء ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﺼﻮرة ﻋﻠﻰ ﺷﻜﻞ ﻣﺼﻔﻮﻓﺔ .
ﺗﻌﻤﻞ ھﺬه اﻟﺪوال اﻟﺜﻼث ﺑﻨﻔﺲ اﻵﻟﯿﺔ ﺗﻘﺮﯾﺒﺎ ﺣﯿﺚ ﺗﻘﻮم ﺑﺈﻧﺸﺎء ﻣﻘﺒﺾ ﻟﻠﺼﻮرة ﻋﻦ طﺮﯾﻖ ﺗﺣﻣﯾل
) (loadاﻟﺼﻮرة ﻣﻦ اﻟﻘﺮص اﻟﺼﻠﺐ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻻﺳﺘﺪﻋﺎء ھﺬه اﻟﺪوال ھﻲ :
;)'$image = imagecreatefrompng('image.png
;)'$image = imagecreatefromjpeg('image.jpg
;)'$image = imagecreatefromgif('image.gif
ﺣﯿﺚ ﺗﻘﺒﻞ ھﺬه اﻟﺪوال اﻟﺜﻠﺚ وﺳﯿﻄﺎ وﺣﯿﺪا ھﻮ ﻣﺴﺎر اﻟﺼﻮرة .
اﻟﺪاﻟﺔ imagecreate
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻹﻧﺸﺎء ﺻﻮرة ﺟﺪﯾﺪة او ﻣﺴﺎﺣﺔ ﻋﻤﻞ ﺻﻮرة ﺟﺪﯾﺪة ﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ
ﻣﺘﻐﯿﺮﯾﻦ ﯾﻌﺒﺮان ﻋﻦ ﻋﺮض وارﺗﻔﺎع اﻟﺼﻮرة .
ﻣﻼﺣﻈﺔ /ﻋﻨﺪ إﻧﺸﺎء ﺻﻮرة ﺗﻌﯿﺪ ﻟﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﻣﻘﺒﺾ وھﺬا اﻟﻤﻘﺒﺾ ﻣﮭﻢﺟﺪا ً وﺳﻮف ﻧﺴﺘﺨﺪﻣﮫ ﻓﻲ
اﻟﺪوال اﻟﻘﺎدﻣﺔ ﺑﺸﻜﻞ ﻣﺴﺘﻤﺮ .
ﻣﺜﺎل/
; ) $x=@ imagecreate( 50 ,100
) ( 63 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (
اﻟداﻟﺔ imagecreatetruecolor
ﺗﻘﻮم ﺑﺈﻧﺸﺎء ﻣﻘﺒﺾ ﻟﺼﻮرة ﺟﺪﯾﺪة ﺑﺎﻟﺒﻌﺎد اﻟﻤ ُﻤﺮرة إﻟﯿﮭﺎ ﻛﻮﺳﺎﺋﻂ ,واﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
;)$x = imagecreatetruecolor($width, $height
ﺣﯿﺚ اﻟﻮﺳﯿﻂ اﻷول ھﻮ ﻋﺮض اﻟﺼﻮرة ﻣﻘﺪرا ﺑﺎﻟﺒﯿﻜﺴﻞ واﻟﺜﺎﻧﻲ ھﻮ ارﺗﻔﺎﻋﮭﺎ .
اﻟﺪاﻟﺔ imagecolorallocate
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﻌﺮﯾﻒ ﻟﻮن ﻟﻠﺼﻮر ﻻﺳﺘﺨﺪاﻣﮫ ﻓﻲ اﻟﺮﺳﻢ وﺗﺤﺘﺎج إﻟﻰ ﻣﻘﺒﺾ اﻟﺼﻮرة ﻓﻲ ھﺬه
اﻟﺪاﻟﺔ .
وﻛﻣﺎ ﺗﻼﺣظ ﻓﻲ ھذا اﻟﻣﺛﺎل وﺿﻌﻧﺎ درﺟﺔ اﻹﺷﺑﺎع ﻟﻸﻟوان ) درﺟﺔ إﺷﺑﺎع أي ﻟون ھﻲ ﺗﺗراوح
ﻣﺎﺑﯾن 0و ( 255ﺣﯾث أن اﻟرﻗم اﻷول ﻟﻠون اﻷﺣﻣر واﻟرﻗم اﻟﺛﺎﻧﻲ ﻟﻠون اﻷﺧﺿر واﻟرﻗم اﻟﺛﺎﻟث
ﻟﻠون اﻷزرق
اﻟﺪاﻟﺔ imagearc
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺮﺳﻢ ﻗﻄﻊ ﻧﺎﻗﺺ ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ وﺗﺤﺘﺎج إﻟﻰ ﻣﻘﺒﺾ اﻟﺼﻮرة ﻟﻜﻲ ﻧﺮﺳﻢ ﻋﻠﯿﮭﺎ
وﻟﻮن اﻟﺮﺳﻢ .
اﻟﺪاﻟﺔ imagechar
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺮﺳﻢ ﺧﻂ ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞوأﯾﻀﺎ ً ﺗﺤﺘﺎج إﻟﻰ ﻣﻘﺒﺾ اﻟﺼﻮرة ﻟﻜﻲ ﻧﺮﺳﻢ ﻋﻠﯿﮭﺎ
وﻣﻘﺒﺾ ﻟﻮن اﻟﺮﺳﻢ .
) ( 64 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (
اﻟﺪاﻟﺔ imagefontwidth
ﻣﺜﺎل/
; ) $width=imagefontwidth( 20
اﻟﺪاﻟﺔ imagefontheight
ﻣﺜﺎل/
; ) $height=imagefontheight( 5
ھﺬه اﻟﺪوال ﻛﻠﮭﺎ ﻟﮭﺎ ﻧﻔﺲ اﻟﻮظﯿﻔﺔ ﺣﯿﺚ أﻧﮭﺎ ﺗﺴﺘﺨﺪم ﻹﺧﺮاج وﺣﻔﻆ اﻟﺼﻮر ﻣﻦ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ إﻟﻰ
اﻟﻤﺘﺼﻔﺢ او ﻣﻠﻒ ﺧﺎرﺟﻲ واﻟﻔﺮق اﻟﻮﺣﯿﺪ ﺑﯿﻦ ھﺬه اﻟﺪوال ھو أﻧﮫ ﻛل داﻟﺔ ﺗﺣﻔظ اﻟﺻورة ﺑﺻﯾﻐﺔ
ﻣﺧﺗﻠﻔﺔ ) .jpgاو .gifاو ( .pngوﺗﺤﺘﺎج ھذه اﻟدوال إﻟﻰ ﺛﻼث وﺳﺎﺋط اﻷول ھو ﻣﻘﺒﺾ
اﻟﺼﻮرة وھو إﺟﺑﺎري واﻟﺛﺎﻧﻲ ھو اﺳﻢ اﻟﺼﻮر اﻟﺬي ﻧﺮﯾﺪ ﺣﻔﻈﮭﺎ ﺑﮫ وھو اﺧﺗﯾﺎري ) ﻓﻲ ﺣﺎل ﻋدم
وﺿﻌﮫ ﺳﯾﺗم طﺑﺎﻋﺔ اﻟﺻورة ﻣﺑﺎﺷرﺗﺎ ً إﻟﻰ اﻟﻣﺗﺻﻔﺢ ( واﻟوﺳﯾط اﻟﺛﺎﻟث وھو ﯾﻣﺛل ﺟودة اﻟﺻورة
وﺗﻛون ﺑﺷﻛل ﻧﺳﺑﺔ ﻣﺋوﯾﺔ وھو أﯾﺿﺎ ً اﺧﺗﯾﺎري ) أي ﯾﻣﻛن ﻋدم وﺿﻌﮫ ( ,واﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭذه
اﻟدوال ھﻲ
;)imagepng($image, $filename, $quality
;)imagegif($image, $filename, $quality
;)imagejpeg($image, $filename, $quality
) ( 65 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (
ﻣﻼﺣﻈﺔ /إذا أردﻧﺎ أن ﻧﺤﺪد ﺟﻮدة اﻟﺼﻮرة وﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ﻻ ﻧﺮﻏﺐ ﺑﺈﻋﻄﺎء اﺳﻢ ﻟﻠﺼﻮرة ) أي
أن ﯾﺘﻢ ﻋﺮض اﻟﺼﻮرةﻣﺒﺎﺷﺮﺗﺎ ً ﻓﻲ اﻟﻤﺘﺼﻔﺢ ﺑﺪون ﺣﻔﻈﮭﺎ ( ﻓﻔﻲ ھﺬه اﻟﺤﺎﻟﺔ ﯾﺠﺐ أن ﻧﻀﻊ ﺑﺪﻻ ﻣﻦ
اﺳﻢ اﻟﺼﻮرة اﻟﻘﯿﻤﺔ nullوﺑﻌﺪه ﻧﺴﺘﻄﯿﻊ أن ﻧﺤﺪد ﺟﻮدة اﻟﺼﻮرة .
ﻣﺜﺎل/
<?php
;)$image = imagecreatetruecolor(200, 200
#you canuse image/jpeg and image/gif for jpg and gif images
;)'header('Content-Type: image/png
;)imagepng($image
;)imagedestroy($image
>?
اﻟﺪاﻟﺔ imageloadfont
ﻣﺜﺎل/
; ) "$mf=imageloadfont( "myfont
اﻟﺪاﻟﺔ imagestring
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻄﺒﺎﻋﺔ ﻧﺺ ﻋﻠﻰ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ واﻟﺻﯾﻎ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ :
;)imagestring($image, $font, $x, $y, $string, $color
ﺣﯿﺚ أن $imageھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة و $fontھﻮ ﺣﺠﻢ اﻟﺨﻂ وﯾﺄﺧﺬ ﻗﯿﻤﺔ ﻋﺪدﯾﺔ ﺗﺘﺮاوح ﻣﺎ ﺑﯿﻦ
, 1 - 5و $x, $yﺗﻤﺜﻞ إﺣﺪاﺛﯿﺎت ﻣﻮﻗﻊ اﻟﻨﺺ و $stringھﻮ اﻟﻨﺺ اﻟﺬي ﺳﯿﻄﺒﻊ ﻋﻠﻰ ﻣﺴﺎﺣﺔ
اﻟﻌﻤﻞ و $colorھو ﻣﻘﺑض اﻟﻠون .
اﻟداﻟﺔ imagettftext
ھﺬه اﻟﺪاﻟﺔ ﻣﺸﺎﺑﮭﺔ ﻟﻠﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ,ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻄﺒﺎﻋﺔ ﻧﺺ ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ ﺑﺎﺳﺘﺨﺪام ﺧﻄﻮط
ﻣﻦ اﻟﻨﻮع ttfﺑﺄي ﻣﻘﺎس ﺧﻂ وﺑﺄي زاوﯾﺔ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ :
ﺣﯿﺚ أن $imageھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة و $sizeﯾﻤﺜﻞ ﺣﺠﻢ اﻟﺨﻂ وﯾﻤﻜﻦ أن ﯾﺄﺧﺬ أي رﻗﻢ ﻛﺎن
و $angleﺗﻤﺜﻞ اﻟﺰاوﯾﺔ واﻟﺰاوﯾﺔ ﯾﻤﻜﻦ أن ﺗﻜﻮن ﻣﻮﺟﺒﺔ او ﺳﺎﻟﺒﺔ ) اﻟﻘﯿﻤﺔ اﻟﻤﻮﺟﺒﺔ ﺗﺆدي إﻟﻰ
اﻟﺪوران ﻋﻜﺲ ﻋﻘﺎرب اﻟﺴﺎﻋﺔ و اﻟﻘﯿﻤﺔ اﻟﺴﺎﻟﺒﺔ ﺗﺆدي إﻟﻰ اﻟﺪوران ﻣﻊ ﻋﻘﺎرب اﻟﺴﺎﻋﺔ ( و$x, $y
ﺗﻤﺜﻞ إﺣﺪاﺛﯿﺎت اﻟﺼﻮرة ﻓﻲ ﻣﻮﻗﻊ اﻟﻌﻤﻞ و ﯾﻤﺜﻞ ﻣﻘﺒﺾ اﻟﻠﻮن و $fontfileﺗﻤﺜﻞ ﻣﺴﺎر اﻟﺨﻂ )
ﻷﻧﻨﺎ ﺳﻨﺸﻤﻞ ﺧﻂ ﻣﻦ ﺧﺎرج ﻣﻜﺘﺒﺔ ( GDو $textﯾﻤﺜﻞ اﻟﻨﺺ اﻟﺬي ﺳﯿﻄﺒﻊ ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ .
اﻟداﻟﺔ imagecreatefromstring
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻨﺸﺎء ﻣﻘﺒﺾ ﻟﺼﻮرة ﺟﺎھﺰة دون اﻟﺤﺎﺟﺔ إﻟﻰ وﺟﻮد ﻣﻠﻒ ﻟﮭﺎ ﺣﯿﺚ ﯾﻤﻜﻦ ان
ﺗﻜﻮن ﺑﯿﺎﻧﺎت اﻟﺼﻮرة ﻣﺨﺰﻧﺔ ﺿﺎﻣﻦ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت او ﺑﺎﺳﺘﺨﺪام داﻟﺔ base64_decode
ﻣﺜﺎل/
; )" اﻟﻜﻮد اﻟﺬي ﯾﻌﺒﺮ ﻋﻦ اﻟﺼﻮرة "(imagecreatefromstring( base64_decode
اﻟداﻟﺔ imagecolorat
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻹرﺟﺎع ﻟﻮن ﺑﻜﺴﻞ ﻣﺤﺪد ﺑﺈﺣﺪاﺛﯿﺎﺗﮫ ﻣﻦ ﺻﻮرة ﻣ ُﺤﺪدة ﺑﻤﻘﺒﻀﮭﺎ ,واﻟﺻﯾﻐﺔ
اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
;)$color = imagecolorat($image, $x, $y
اﻟداﻟﺔ imagecolorsforindex
ﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻣﺼﻔﻮﻓﺔ ﺗﺤﻮي ﻗﯿﻢ اﻷﻟﻮان ﺣﯿﺚ ﯾﻤﺜﻞ ﻛﻞ ﻟﻮنﻋﻨﺼﺮا ً ﻣﻦ ﻋﻨﺎﺻﺮ ﺗﻠﻚ اﻟﻤﺼﻔﻮﻓﺔ .
) ( 67 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (
اﻟداﻟﺔ imagedestroy
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪال ﻟﮭﺪم ﻣﻘﺒﺾ اﻟﺼﻮرة وﺗﺤﺮﯾﺮ اﻟﺬاﻛﺮة اﻟﻤﺨﺰﻧﺔ ﻋﻠﯿﮭﺎ اﻟﺼﻮرة وﻛﻞ ﻣﺎ ﺗﺤﺘﺎﺟﮫ
ھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ :
;)imagedestroy($image
ﺗﺴﺘﺨﺪم ھﺎﺗﺎن اﻟﺪاﻟﺘﺎن ﻹﻋﺎدة اﻟﻄﻮل واﻟﻌﺮض ﻟﻠﺼﻮرة وﻛﻞ ﻣﺎ ﺗﺤﺘﺎﺟﺎﻧﮫ ھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة
وﺗﻜﻮن اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ) ﻋﻠﻰ ﻓﺮض أن $xھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة ( :
;)imagesx($x
;)imagesy($x
اﻟداﻟﺔ imagefill
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺘﻠﻮﯾﻦ ﻣﻨﻄﻘﺔ ﻣﺤﺪدة ﺑﻠﻮن واﺣﺪ أي ﻛﻤﺎ ﺗﻘﻮم أداة اﻟﺘﻌﺒﺌﺔ ﻓﻲ ﺑﺮاﻣﺞ اﻟﺮﺳﻢ ,ﺣﯿﺚ
أﻧﮭﺎ ﺗﻘﺒﻞ أرﺑﻊ وﺳﺎﺋﻂ اﻟﻮﺳﯿﻂ اﻷول ھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة واﻟﺜﺎﻧﻲ واﻟﺜﺎﻟﺚ ﯾﻤﺜﻼن إﺣﺪاﺛﯿﺎت اﻟﻤﻨﻄﻘﺔ
اﻟﺘﻲ ﺳﯿﺘﻢ ﺗﻠﻮﯾﻨﮭﺎ واﻟﻮﺳﯿﻂ اﻟﺮاﺑﻊ ھﻮ ﯾﻤﺜﻞ ﻣﻘﺒﺾ اﻟﻠﻮن اﻟﺬي ﺗﻌﯿﺪه اﻟﺪاﻟﺔ
, imagecolorallocateواﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ :
;)imagefill($image, $x, $y, $color
اﻟداﻟﺔ imagefilledrectangle
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻤﻞء ﻣﺴﺘﻄﯿﻞ ﺑﻠﻮن ﻣﺤﺪد ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ :
;)imagefilledrectangle($image, $x1, $y1, $x2, $y2, $color
ﺣﯾث أن $imageﺗﻤﺜﻞ ﻣﻘﺒﺾ اﻟﺼﻮرة $x1, $y1ھﻲ إﺣﺪاﺛﯿﺎت اﻟﺰاوﯾﺔ اﻟﯿﺴﺮى اﻟﻌﻠﯿﺎ و $x2,
$y2ھﻲ إﺣﺪاﺛﯿﺎت اﻟﺰاوﯾﺔ اﻟﯿﻤﻨﻰ اﻟﺴﻔﻠﻰ و $colorﯾﻤﺜﻞ ﻣﻘﺒﺾ اﻟﻠﻮن اﻟذي ﺗﻌﯾده اﻟداﻟﺔ
imagecolorallocate
) ( 68 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (
اﻟداﻟﺔ imagerotate
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺪوﯾﺮ اﻟﺼﻮرة ﺣﻮل ﻣﺮﻛﺰھﺎ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ :
;)imagerotate($image, $angle, $bg_color
ﺣﯾث اﻟزاوﯾﺔ ﺑﺎﻟدرﺟﺎت و $bg_colorھﻮ اﻟﻠﻮن اﻟﺬي ﺳﯿﺘﻢ وﺿﻌﮫ ﻣﻜﺎن اﻟﻔﺮاغ ﻧﺘﯿﺠﺔ اﻟﺘﺪوﯾﺮ .
اﻟداﻟﺔ imagesetpixel
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺘﺤﺪﯾﺪ ﻟﻮن ﺑﻜﺴﻞ ﻣﻌﯿﻦ ﺑﺈﺣﺪاﺛﯿﺎت , $x, $yواﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ :
;)imagesetpixel($image, $x, $y, $color
اﻟداﻟﺔ imageline
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺮﺳﻢ ﻣﺴﺘﻘﯿﻤﺎت ﺑﯿﻦ ﻧﻘﻄﺘﯿﻦ ﻣﺤﺪدﺗﯿﻦ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ :
;)imageline($image, $x1, $y1, $x2, $y2, $color
ﺣﯾث أن $imageھو ﻣﻘﺑض اﻟﺻورة و $x1, $y1ھﻲ إﺣداﺛﯾﺎت ﻧﻘطﺔ اﻟﺑداﯾﺔ و $x2, $y2ھﻲ
إﺣﺪاﺛﯿﺎت ﻧﻘﻄﺔ اﻟﻨﮭﺎﯾﺔ و $colorھو ﻣﻘﺑض اﻟﻠون .
اﻟداﻟﺔ imagesetthickness
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺤﺪﯾﺪ ﺳﻤﻚ ﺧﻂ اﻟﺮﺳﻢ وھﻲ ﺗﺄﺧﺬ وﺳﯿﻄﯿﻦ اﻷول ﯾﻤﺜﻞ ﻣﻘﺒﺾ اﻟﺼﻮرة واﻟﺜﺎﻧﻲ
ﯾﻤﺜﻞ ﺳﻤﻚ اﻟﺨﻂﻣﻘﺪرا ً ﺑﺎﻟﺒﯿﻜﺴﻞ
اﻟداﻟﺔ imagettfbbox
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻋﺎدة ﻣﺼﻔﻮﻓﺔ ﺗﺤﻮي إﺣﺪاﺛﯿﺎت ﻧﺺ ﺑﺎﺳﺘﺨﺪام ﺧﻂ ﻣﻌﯾن واﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
;)imagettfbbox($size, $angle, $fontfile, $text
ﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﺑﺤﺴﺎب أﺑﻌﺎد أي ﻧﺺ ﻣﻜﺘﻮب ﺑﺄي ﺧﻂ ﻻﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ ﻣﺤﺎذاة اﻟﻨﺺ )ﺗﻮﺳﯿﻂﻣﺛﻼ ً (
اﻟداﻟﺔ imagecopy
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﻧﺻﺦ ﺻورة إﻟﻰ ﺻورة أﺧرى وﺗﻘﺑل اﻟوﺳﺎﺋط اﻟﺗﺎﻟﯾﺔ :
اﻟوﺳﯾط $dst_imھﻮ اﻟﺼﻮرة اﻟﺘﻲ ﺳﯿﺘﻢ اﻟﻨﺴﺦ إﻟﯿﮭﺎ ) اﻟﺼﻮرة اﻟﮭﺪف ( . -1
اﻟﻮﺳﯿﻂ $src_imاﻟﺼﻮرة اﻟﺘﻲ ﺳﯿﺘﻢ اﻟﻨﺴﺦ ﻣﻨﮭﺎ . -2
اﻟوﺳﺎﺋط $dst_x, $dst_y, $src_x, $src_yھﻲ إﺣﺪاﺛﯿﺎت ﺑﺪاﯾﺔ اﻧﺴﺦ واﻟﻠﺼﻖ . -3
اﻟﻮﺳﯿﻄﯿﻦ $src_w, $src_hھﻢ ﻋﺮض وطﻮل اﻟﺠﺰء اﻟﻤﻨﺴﻮخ . -4
اﻟﺪاﻟﺔ imagecopyresized
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻨﺴﺦ ﺟﺰء ﻣﻦ اﻟﺼﻮرة وﻟﺼﻘﮫ ﻋﻠﻰ ﺻﻮرة أﺧﺮى ﻣﻊ ﺗﻐﯿﯿﺮ أﺑﻌﺎده واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ
ﻟﮭﺎ ھﻲ :
اﻟداﻟﺔ imagefilter
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﻄﺒﯿﻖ ﺗﺄﺛﯿﺮات ﻋﻠﻰ اﻟﺼﻮر ) ﻓﻼﺗﺮ ( ,وﺗﺄﺧﺬ ھﺬه اﻟﺪاﻟﺔ ﻋﺪد ﻣﺘﻐﯿﺮ ﻣﻦ
اﻟﻮﺳﺎﺋﻂ ﺑﺤﺴﺐ اﻟﺘﺄﺛﯿﺮ اﻟﻤ ُﻤﺮر إﻟﯿﮭﺎ وﻟﻛن ﻛﻤﺎ ھﻮ ﻣ ُﻌﺘﺎد ﯾﻜﻮن اﻟﻮﺳﯿﻂ اﻷول ھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة
واﻟﺜﺎﻧﻲ ھﻮ اﻟﺜﺎﺑﺖ اﻟﺨﺎص ﺑﺎﻟﻔﻠﺘﺮ ,اﻟﻤ ُﺴﺘﺨﺪم و ﺑﺎﻗﻲ اﻟﻮﺳﺎﺋﻂ ھﻲ وﺳﺎﺋﻂ ﺗﺨﺘﻠﻒ ﺣﺴﺐ اﻟﺘﺄﺛﯿﺮ
اﻟﻤ ُﺴﺘﺨﺪم ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﻠﺪاﻟﺔ ھﻲ :
) ( 70 اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (
-1ﺗﺄﺛﯾر اﻹﺿﺎءة
ﻋﻧد ﺗﻣرﯾر اﻟﺛﺎﺑت IMG_FILTER_BRIGHTNESSإﻟﻰ اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ ﯾﻣﻛن ﺗﻐﯾﯾر اﻹﺿﺎءة ﻓﻲ
اﻟﺼﻮر وﻋﻨﺪ اﺳﺘﺨﺪام ھﺬا اﻟﺘﺄﺛﯿﺮ ﯾﺠﺐ ﺗﻤﺮﯾﺮ وﺳﯿﻂ آﺧﺮ ھﻮ ﻗﯿﻤﺔ اﻹﺿﺎءة اﻟﺘﻲ ﺗﺘﺮاوح ﻗﯿﻤﺘﮭﺎ
ﺑﯿﻦ -255إﻟﻰ 255ﺣﯿﺚ أن اﻟﻘﯿﻤﺔ 255ﺗﻤﺜﻞ إﺿﺎءة ﻛﺎﻣﻠﺔ ) اﻟﻠﻮن اﻷﺑﯿﺾ ( واﻟﻘﯿﻤﺔ -255ﺗﻤﺜﻞ
اﻟﻠﻮن اﻷﺳﻮد واﻟﻘﯿﻤﺔ 0ﺗﺒﻘﻲ اﻹﺿﺎءة ﻋﻠﻰ ﺣﺎﻟﮭﺎ .
ﻣﺜﺎل/
<?php
;)'$image = imagecreatefromjpeg('image.jpg
;)imagefilter($image, IMG_FILTER_BRIGHTNESS, 100
;)'header('Content-Type: image/png
;)imagejpeg($image
>?
اﻟﺸﺮح اﻟﺜﺎﺑﺖ
ﻋﻛس ﺟﻣﯾﻊ أﻟوان اﻟﺻورة IMG_FILTER_NEGATE
ﺗﺣوﯾل اﻟﺻورة إﻟﻰ ﺻورة رﻣﺎدﯾﺔ ) أﺑﯾض وأﺳود ( IMG_FILTER_GRAYSCALE
ﻛﻣﺎ ﻓﻲ اﻟﻔﻘرة اﻟﺳﺎﺑﻘﺔ ﺗﺳﺗﺧدم ﻟﻠﺗﺣﻛم ﺑﺎﻹﺿﺎءة ,وﺗﻘﺑلوﺳﯾطﺎ ً IMG_FILTER_BRIGHTNESS
أﺿﺎﻓﯾﺎ ً ھو ﻣﻘدار اﻹﺿﺎءة
ﺗﻐﯾﯾر ﺗﺑﺎﯾن اﻟﺻورة ,ﺗﻘﺑلوﺳﯾطﺎ ً إﺿﺎﻓﯾﺎ ً ھو ﻣﻘدار اﻟﺗﺑﺎﯾن IMG_FILTER_CONTRAST
ﺗطﺑﯾق ﺧوارزﻣﯾﺔ ﻹظﮭﺎر ﺣواف ﻣﻛوﻧﺎت اﻟﺻورة IMG_FILTER_EDGEDETECT
IMG_FILTER_GAUSSIAN_BLURإﺿﺎﻓﺔ ﺗﺄﺛﯾر اﻟﺿﺑﺎﺑﯾﺔ ﻟﻠﺻورة ﺑﺎﺳﺗﺧدام ﺧوارزﻣﯾﺔ blur
gaussian
IMG_FILTER_SELECTIVE_BLURإﺿﺎﻓﺔ ﺗﺄﺛﯾر اﻟﺿﺑﺎﺑﯾﺔ ﻟﻠﺻورة
إﺿﺎﻓﺔ ﺗﺄﺛﯾر pixelateﻟﻠﺼﻮرة IMG_FILTER_PIXELATE
) ( 71 اﻟﻔﺻل اﻟﺛﺎﻟث ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ ﺳﯾرﻓر ( FTP
اﻟداﻟﺔ ftp_connect
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺈﺟراء اﺗﺻﺎل ﻣﻊ ﺳﯾرﻓر FTPﻓﺈذا ﺗم اﻻﺗﺻﺎل ﺑﻧﺟﺎح ﺗﻌود ﺑﻣﻘﺑض ﻟﮭذا
اﻻﺗﺻﺎل ﻟﻧﺗﻣﻛن ﻣن اﺳﺗﺧداﻣﮫ ﻓﻲ ﺑﻘﯾﺔ اﻟﻌﻣﻠﯾﺎت .
ﻣﺛﺎل/
; ) "$ftp=ftp_connect( "www.example.com
اﻟداﻟﺔ ftp_login
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺗﺳﺟﯾل دﺧول اﻟﻣﺳﺗﺧدم إﻟﻰ اﻟﺳﯾرﻓر وﺗﺣﺗﺎج ھذه اﻟداﻟﺔ إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل
واﻻﺳم وﻛﻠﻣﺔ اﻟﺳر وﺗﻌود ﺑﺎﻟﻘﯾﻣﺔ trueإذا ﺗم اﻻﺗﺻﺎل ﺑﻧﺟﺎح .
اﻟداﻟﺔ ftp_pwd
ﺗﻌود ھذه اﻟداﻟﺔ ﺑﺎﺳم اﻟﻣﺟﻠد اﻟﺣﺎﻟﻲ اﻟذي ﻧﺗﻌﺎﻣل ﻣﻌﮫ وﺗﺣﺗﺎج ھذه اﻟداﻟﺔ ﻓﻘط إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل
.
اﻟداﻟﺔ ftp_chdir
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺗﻐﯾﯾر اﻟﻣﺟﻠد اﻟﺣﺎﻟﻲ ﻓﻲ اﻟﺳﯾرﻓر وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل .
اﻟداﻟﺔ ftp_mkdir
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺈﻧﺷﺎء ﻣﺟﻠد ﺟدﯾد ﻓﻲ اﻟﻣﺳﺎر اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل .
اﻟداﻟﺔ ftp_rmdir
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺣذف ﻣﺟﻠد ﻣﻌﯾن ﻓﻲ اﻟﻣﺳﺎر اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل .
اﻟداﻟﺔ ftp_nlist
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺎﻟﻌودة ﺑﺄﺳﻣﺎء اﻟﻣﻠﻔﺎت واﻟﻣﺟﻠدات ﻓﻲ اﻟﻣﺳﺎر اﻟﻣﺣدد ﻋﻠﻰ ﺷﻛل ﻣﺻﻔوﻓﺔ وﺗﺣﺗﺎج
إﻟﻰ ﻣﻘﺑض ﻋﻣﻠﯾﺔ اﻻﺗﺻﺎل .
اﻟداﻟﺔ ftp_get
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﺗﻧزﯾل ﻣﻠف ﻣن ﺳﯾرﻓر FTPإﻟﻰ ﺟﮭﺎزك او ﻣوﻗﻌك وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض
اﻻﺗﺻﺎل وأﯾﺿﺎ ً ﺗﺣﺗﺎج إﻟﻰ ﻧوع اﻟﻧﻘل ھل ھو FTP_ASCIIاو FTP_BINARY
اﻟداﻟﺔ ftp_put
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﻧﻘل اﻟﻣﻠف ﻣن ﺟﮭﺎزك إﻟﻰ ﺳﯾرﻓر ftpوﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل وأﯾﺿﺎ ً
ﺗﺣﺗﺎج إﻟﻰ ﻧوع اﻟﻧﻘل ھل ھو FTP_ASCIIاو FTP_BINARY
اﻟداﻟﺔ ftp_size
ﺗﻌﯾد ھذه اﻟداﻟﺔ ﺣﺟم اﻟﻣﻠف اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل .
اﻟداﻟﺔ ftp_rename
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺗﻐﯾﯾر اﻻﺳم ﻟﻠﻣﻠف اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل .
اﻟداﻟﺔ ftp_delete
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺣذف اﻟﻣﻠف اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل .
اﻟداﻟﺔ ftp_site
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺈرﺳﺎل اﻷواﻣر إﻟﻰ اﻟﺳﯾرﻓر وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل
اﻟداﻟﺔ ftp_quit
ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺈﻏﻼق اﻻﺗﺻﺎل ﻣﻊ اﻟﺳﯾرﻓر وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل .
; ) $close=ftp_quit( $ftp
) ( 75 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
ﻗﺪ ﯾﻜﻮن ﻟﺪﯾﻚ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ ﻣﺘﻐﯿﺮ ﻣﺘﻜﺮر ﻓﻲ أﻛﺜﺮ ﻣﻦ ﺻﻔﺤﺔ أو رﺳﺎﻟﺔ ﺧﻄﺄ ﻣﻌﯿﻨﺔ أو ﺗﺮﯾﺪ إدراج
ﻧﺺ ﻛﺒﯿﺮ اﻟﺤﺠﻢ ﻓﻲ ﺻﻔﺤﺎت ﻣﺘﻌﺪدة ,ھﻨﺎ ﯾﻤﻜﻦ اﺷﺘﻤﺎل ﻣﻠﻔﺎت داﺧﻞ ﻣﻠﻔﺎت phpھﺬه اﻟﻤﻠﻔﺎت ﻗﺪ
ﺗﺤﺘﻮي ﻋﻠﻰ ﻧﺼﻮص أو اﻛﻮاد htmlأو ﻛﻮد , phpواﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ھﻲ -:
; ) include ( file name
ﻣﺜﺎل -:
ﻗﻢ ﺑﻔﺘﺢ ﻣﻠﻒ ﻧﺼﻲ وأﻛﺘﺐ ﻓﯿﮫ ﻣﺎ ﺗﺸﺎء ﺛﻢ أﺣﻔﻈﮫ ﺑﺎﺳﻢ a.txtﺛﻢ ﻗﻢ ﺑﺈﻧﺸﺎء ﻣﻠﻒ phpواﻛﺘﺐ ﻓﯿﮫ
ھﺬا اﻟﻜﻮد
<?php
; ) "include ( "a.txt
>?
ﯾﻤﻜﻨﻚ أن ﺗﻨﺸﺄ ﻣﻠﻒ phpوﺗﺤﺘﻔﻆ ﻓﯿﮫ ﻓﻲ ﺗﻌﺮﯾﻒ داﻟﺔ ) ( functionوﻋﻨﺪ اﻟﺤﺎﺟﺔ ﺗﺴﺘﺪﻋﯿﮫ ﻓﻲ
أي ﻣﻜﺎن .
ﻻﺣﻆ ھﻨﺎ أﺿﻔﻨﺎ ﻓﻘﻂ اﺳﻢ اﻟﻤﻠﻒ اﻟﻨﺼﻲ ﺑﺎﻋﺘﺒﺎر إﻧﮫ ﻣﻮﺟﻮد ﻓﻲ ﻧﻔﺲ اﻟﻤﺠﻠﺪ وﻟﻜﻦ إن ﻛﺎن ﻓﻲ ﻣﺠﻠﺪ
آﺧﺮ ﯾﺠﺐ إﺿﺎﻓﺔ ﻣﺴﺎر اﻟﻤﻠﻒﻛﺎﻣﻼ ً .
ﻣﻼﺣﻈﮫ /اﻟﺪاﻟﺔ requireھﻲﺗﻤﺎﻣﺎ ً ﺗﻌﻤﻞ ﻧﻔﺲ اﻟﺪاﻟﺔ includeﻟﻛن اﻟﻔرق ﺑﯾﻧﮭم ھو اﻧﮫ اذا ﺟﻠﺑﻧﺎ
ﺻﻔﺣﺔ وﻛﺎن ﻣﺳﺎرھﺎ ﺧطﺄ او اﻟﺻﻔﺣﺔ ﻏﯾر ﻣوﺟودة ﻓﺄﻧﮫ ﺳﯾظﮭر ﺧطﺄ ﺣﯾث اﻧﮫ ﻓﻲ اﻟداﻟﺔ
includeﺳوف ﯾظﮭر اﻟﺧطﺄ وﯾﺳﺗﻣر ﻓﻲ ﺗﻧﻔﯾذ ﺑﺎﻗﻲ ﻛود اﻟﺻﻔﺣﺔ أﻣﺎ ﻓﻲ اﻟداﻟﺔ requireﻓﺄﻧﮫ
ﺳﯾوﻗف ﺗﻧﻔﯾذ ﺑﺎﻗﻲ اﻟﻛود اﻟﻣوﺟود ﻓﻲ اﻟﺻﻔﺣﺔ ,وھﻧﺎك دوال أﺧرى ﺗﺳﺗﺧدم ﻟﺿﻣﯾن اﻟﻣﻠﻔﺎت ﻣﺛل
) ( 76 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
اﻟداﻟﺔ include_onceوھﻲ ﺗﺳﺗﺧدم ﻟﺗﺿﻣن اﻟﻣﻠف ﻣرة واﺣدة أي إذا ﻛﻧﺎ ﻗد طﻠﺑﻧﺎ اﻟﻣﻠف
ﻣرﺗﯾن ﻓﺄﻧﮫ ﺳﯾﺟﻠﺑﮫ ﻣرة واﺣدة ﻓﻘط وﻧﻔس اﻟﺷﻲء ﺑﺎﻟﻧﺳﺑﺔ ﻟﻠداﻟﺔ . require_once
ﯾﻤﻜﻦ ﻋﺮض ) طﺒﺎﻋﺔ ( ﻛﻮد ﺻﻔﺤﺔ ﻣﻌﯿﻦ وذﻟﻚ ﺑﺎﺳﺘﺨﺪم اﻟﺪاﻟﺔ ) ( show_sourceوﺳﯾﺗم
ﻋرض اﻟﻛود ﺑﺷﻛل ﻣﻧﺳق وﻣرﺗب ) ﻛﻣﺎ ھو ﻣﻛﺗوب ( .
ﻣﺜﺎل -:
<?php
; ) "show_source ( "style.css
>?
ﻣﺜﺎل/
; ) "echo basename( "www.example.com/help/index.php
) ( 77 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
اﻟﺪاﻟﺔ chmod
ﺗﺴﺘﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﻌﺪﯾﻞ ﻋﻠﻰ اﻟﺘﺮاﺧﯿﺺ ﻟﻠﻤﻠﻔﺎت او اﻟﻤﺠﻠﺪات ﺳﻮاء أن ﻧﺘﯿﺤﮭﺎ ﻟﻠﻘﺮاءة او ﻟﻠﻜﺘﺎﺑﺔ
او اﻟﻘﺮاءة واﻟﻜﺘﺎﺑﺔ
ﻣﻼﺣﻈﺔ /ﻋﻨﺪ اﺳﺘﺨﺪام ﺑﺮﻧﺎﻣﺞ ftpﻓﻲ إرﺳﺎل اﻟﻤﻠﻔﺎت إﻟﻰ اﻻﻧﺘﺮﻧﺖ ﻓﺄن أھﻢ ﺗﺮﺧﯿﺼﯿﻦ ھﻤﺎ 755
و , 777ﺣﯿﺚ أن اﻟﺘﺮﺧﯿﺺ 755ﯾﻌﻄﻰ ﻟﻤﻠﻔﺎت اﻟﺴﻜﺮﺑﺘﺎت واﻟﺘﺮﺧﯿﺺ 777ﯾﻌﻄﻰ ﻟﻠﻤﻠﻔﺎت
واﻟﻤﺠﻠﺪات اﻟﺘﻲ ﯾﺮاد أﺗﺎﺣﺘﮭﺎ ﻟﻠﻜﺘﺎﺑﺔ .
ﻣﺜﺎل /ﻟﻮ أردﻧﺎ ﺗﻐﯿﯿﺮ اﻟﺘﺮﺧﯿﺺ ﻟﻠﻤﺠﻠﺪ اﻟﻤﺴﻤﻰ ) ( testﺳﻮف ﻧﻜﺘﺐ اﻟﺘﺮﺧﯿﺺﻣﺴﺒﻮﻗﺎ ً ﺑﺼﻔﺮ
ھﻜﺬا -:
; ) chmod( "test" , 0755
ﻣﻼﺣظﺔ /ﺗﻜﻮن اﻟﺼﻼﺣﯿﺔ ) اﻟﺘﺮﺧﯿﺺ ( ﻣﻜﻮﻧﺔ ﻣﻦ أرﺑﻌﺔ أرﻗﺎم اﻟﺮﻗﻢ اﻷول ھﻮ ﺻﻔﺮ ,أﻣﺎ اﻷرﻗﺎم
اﻟﺜﻼث اﻟﺒﺎﻗﯿﺔ ھﻲ ﻋﺒﺎرة ﻋﻦ اﻟﺼﻼﺣﯿﺎت ) ﺗﺮاﺧﯿﺺ ( ﻟﻠﻤﺴﺘﺨﺪم وﻟﻤﺠﻮﻋﺔ اﻟﻤﺴﺘﺨﺪم و ﻟﺒﻘﯿﺔ
اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻋﻠﻰ اﻟﺘﻮاﻟﻲ و ﺑﺎﻟﺘﺮﺗﯿﺐ ,اﻟﺟدول اﻟﺗﺎﻟﻲ ﯾوﺿﺢ اﻷرﻗﺎم واﻟﺻﻼﺣﯾﺎت اﻟﻣﻘﺎﺑﻠﺔ ﻟﮭﺎ
اﻟﺻﻼﺣﯾﺔ اﻟرﻗم
ﯾﺷﯾر إﻟﻰ ﻋدم إﻋطﺎء أي ﺻﻼﺣﯾﺔ . اﻟرﻗم 0
ﯾﺷﯾر إﻟﻰ إﻋطﺎء ﺻﻼﺣﯾﺔ اﻟﺗﻧﻔﯾذ ﻓﻘط . اﻟرﻗم 1
ﯾﺷﯾر إﻟﻰ إﻋطﺎء ﺻﻼﺣﯾﺔ اﻟﻛﺗﺎﺑﺔ ﻓﻘط . اﻟرﻗم 2
ﯾﺷﯾر إﻟﻰ إﻋطﺎء ﺻﻼﺣﯾﺔ اﻟﻛﺗﺎﺑﺔ واﻟﺗﻧﻔﯾذ . اﻟرﻗم 3
ﯾﺷﯾر إﻟﻰ إﻋطﺎء ﺻﻼﺣﯾﺔ اﻟﻘراءة ﻓﻘط . اﻟرﻗم 4
ﯾﺷﯾر إﻟﻰ إﻋطﺎء ﺻﻼﺣﯾﺔ اﻟﻘراءة واﻟﺗﻧﻔﯾذ . اﻟرﻗم 5
ﯾﺷﯾر إﻟﻰ إﻋطﺎء ﺻﻼﺣﯾﺔ اﻟﻘراءة واﻟﻛﺗﺎﺑﺔ . اﻟرﻗم 6
ﯾﺷﯾر إﻟﻰ إﻋطﺎء ﺻﻼﺣﯾﺔ اﻟﻘراءة واﻟﻛﺗﺎﺑﺔ واﻟﺗﻧﻔﯾذ . اﻟرﻗم 7
وﻣن اﻟﺟدول اﻟﺳﺎﺑق ﯾﻣﻛن أن ﻧﻛون أرﻗﺎم اﻟﺻﻼﺣﯾﺎت اﻟﺗﻲ ﻧﺣﺗﺎﺟﮭﺎﻣﺛﻼ ً اﻟرﻗم ) ( 0600ﯾﺷﯾر
إﻟﻰ إﻣﻛﺎﻧﯾﺔ اﻟﻘراءة واﻟﻛﺗﺎﺑﺔ ﻟﻠﻣﺳﺗﺧدم وﻻ ﺷﻲء ﻟﺑﻘﯾﺔ اﻟﻣﺳﺗﺧدﻣﯾن ,واﻟرﻗم ) ( 0755ﯾﺷﯾر إﻟﻰ
إﻣﻛﺎﻧﯾﺔ اﻟﻘراءة واﻟﻛﺗﺎﺑﺔ واﻟﺗﻧﻔﯾذ ﻟﻠﻣﺎل واﻟﻘراءة واﻟﺗﻧﻔﯾذ ﻟﺑﻘﯾﺔ اﻟﻣﺳﺗﺧدﻣﯾن .
اﻟﺪاﻟﺔ chown
ﻣﺜﺎل/
; ) اﻟﻤﻠﻒ او اﻟﻤﺠﻠﺪ ,ﻣﻌﺮف اﻟﻤﺴﺘﺨﺪم ( chown
اﻟﺪاﻟﺔ copy
ﺗﺴﺘﺨﺪم ﻹﻧﺸﺎء ﻧﺴﺨﺔ اﺣﺘﯿﺎطﯿﺔ ﻟﻤﻠﻒ ﯾﺤﺘﻮي ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﻣﮭﻤﺔ ﻟﻠﺤﻔﺎظ ﻋﻠﯿﮭﺎ
ﻣﺜﺎل/
; ) "copy( "arab1.html" , "arab1.php
ﺣﯿﺚ ھﻨﺎ ﻧﻨﺴﺦ اﻟﻤﻠﻒ arab1.htmlإﻟﻰ اﻟﻤﻠﻒ arab1.phpﻓﻲ ﻧﻔﺲ اﻟﻤﺠﻠﺪ .
اﻟﺪاﻟﺔ unlink
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺤﺬف ﻣﻠﻒ او ﻣﺠﻠﺪ وﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﻣﺴﺎر ھﺬا اﻟﻤﻠﻒ او اﻟﻤﺠﻠﺪ ) وﺳﻨﺘﻨﺎول
ﻣﻮﺿﻮع اﻟﻤﺠﻠﺪات ﺑﻌﺪ ﻗﻠﯿﻞ ( .
ﻣﺜﺎل/
; ) "unlink( " file.txt
ﻣﻼﺣﻈﺔ /ھﻨﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﻛﺎن اﻟﻤﻠﻒ ﻓﻲ ﻧﻔﺲ ﻣﺠﻠﺪ اﻟﺒﺮﻧﺎﻣﺞ وإن ﻟﻢ ﯾﻜﻦ ﻓﻲ ﻧﻔﺲ ﻣﺠﻠﺪ اﻟﺒﺮﻧﺎﻣﺞ
ﻓﯿﺠﺐ ﻛﺘﺎﺑﺔ اﻟﻤﺴﺎﻛﺎﻣﻼ ً .
اﻟﺪاﻟﺔ diskfreespace
ﺗﻌﻄﻲ ھﺬه اﻟﺪاﻟﺔ اﻟﻤﺴﺎﺣﺔ اﻟﻤﺘﺒﻘﯿﺔ ﻟﺪﯾﻨﺎ ﻓﻲ اﻟﻘﺮص اﻟﺼﻠﺐ ﺑﺎﻟﺒﺎﯾﺖ .
ﻣﺜﺎل/
; ) "echo diskfreespace( "/
وﯾﻤﻜﻦ أن ﻧﻜﺘﺐ اﺳﻢ اﻟﻤﺠﻠﺪ اﻟﻔﺮﻋﻲ إن ﻛﺎن ﻟﺪﯾﻨﺎ ﻟﻨﺤﺼﻞ ﻋﻠﻰ ﻣﺴﺎﺣﺘﮫ .
) ( 79 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
اﻟداﻟﺔ memory_get_usage
ﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﻣﻌﺮﻓﺔ ﺣﺠﻢ اﻟﻤﻠﻒ او اﻟﺴﻜﺮﺑﺖ اﻟﺬي ﻧﻌﻤﻞ ﻋﻠﯿﮫ وﺗﻌﻮد ﻟﻨﺎ ﺑﺮﻗﻢ ﯾﻤﺜﻞ ﺣﺠﻢ
اﻟﺴﻜﺮﺑﺖ .
ﻣﺜﺎل /
; ) (echo memory_get_usage
ﻻﺣﻆ ﺑﺄن ھﺬه اﻟﺪاﻟﺔ ﺗﺤﺴﺐ ﻣﺎ ﻓﻮﻗﮭﺎ ﻓﻘﻂ وﻟﻜﻲ ﻧﺤﺴﺐ ﺣﺠﻢ ﻛﺎﻣﻞ اﻟﻤﻠﻒ ) اﻟﺴﻜﺮﺑﺖ ( ﯾﺠﺐ ان
ﻧﻜﺘﺒﮭﺎ ﻓﻲ اﺳﻔﻞ اﻟﻜﻮد .
اﻟﺪاﻟﺔ filesize
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ ﺣﺠﻢ اﻟﻤﻠﻒ ﺑﺎﻟﺒﺎﯾﺖ وﺗﺤﺘﺎج ﻓﻘﻂ إﻟﻰ اﺳﻢ اﻟﻤﻠﻒ .
ﻣﺜﺎل/
; ) "echo filesize( "pic.php
اﻟﺪاﻟﺔ filetype
ھﺬه اﻟﺪاﻟﺔ ﺗﻌﯿﺪ ﻟﻨﺎ ﻧﻮع اﻟﻤﻠﻒ وﺗﺤﺘﺎج ﻓﻘﻂ اﺳﻢ اﻟﻤﻠﻒ .
ﻣﺜﺎل/
; ) "echo filetype( "pic.gif
اﻟﺪاﻟﺔ file
ﺗﺴﺘﻌﻤﻞ ﻟﻘﺮاءة اﻟﻤﻠﻔﺎت واﺳﺘﺨﻼص اﻟﺒﯿﺎﻧﺎت ﻣﻨﮭﺎ ,ﺣﯿﺚ ﺳﺘﻀﻊ اﻟﻤﻠﻒﻛﺎﻣﻼ ًوﺳﻄﺮا ً ﺳﻄﺮا ً داﺧﻞ
ﻣﺼﻔﻮﻓﺔ ﺑﺤﯿﺚ ﯾﺼﺒﺢ ﻛﻞ ﺳﻄﺮ ﻓﻲ ﻣﺘﻐﯿﺮ ﻣﻦ ﻣﺘﻐﯿﺮات اﻟﻤﺼﻔﻮﻓﺔ .
ﻣﺜﺎل/
; )”$arr = file( “file.txt
; ]echo arr[0
اﻟﺪاﻟﺔ file_exists
ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻣﻠﻒ ﺳﻮاء ﺑﺎﻟﻘﺮاءة او اﻟﻜﺘﺎﺑﺔ او ﻏﯿﺮھﺎ ﻻﺑﺪ ﻣﻦ ﻣﻌﺮﻓﺔ ھﻞ اﻟﻤﻠﻒ ﻣﻮﺟﻮد ﻓﻲ
اﻟﻤﻮﻗﻊ اﻟﺴﻠﯿﻢ أم ﻻ ,ﻷﻧﻨﺎ إذا ﺣﺎوﻟﻨﺎ أن ﻧﺘﻌﺎﻣﻞ ﻣﻌﮫ وﻟﻢ ﯾﻜﻦﻣﻮﺟﻮدا ً ﻓﺴﻮف ﻧﻘﻊ ﻓﻲ أﺧﻄﺎء ,وھﺬه
اﻟﺪاﻟﺔ ﻧﻌﻄﯿﮭﺎ اﺳﻢ اﻟﻤﻠﻒ ﻓﺘﻌﯿﺪ ﻟﻨﺎ اﻟﻘﯿﻤﺔ 1إذا ﻛﺎن اﻟﻤﻠﻒ ﻣﻮﺟﻮد او أي ﻗﯿﻤﺔ أﺧﺮى إذا ﻟﻢ ﯾﻜﻦ
ﻣﻮﺟﻮد .
ﻣﺜﺎل/
"اﻟﻤﻠﻒ ﻣﻮﺟﻮد" if( file_exists( "pic.jpg") ) { echo
اﻟداﻟﺔ file_get_contents
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة ﻣﻠﻒ ﺑﺄﻛﻤﻠﮫ ﻋﻠﻰ ﺷﻜﻞ ﺳﻠﺴﻠﺔ ﻧﺼﯿﺔ و ﯾُﻤﺮر ﻟﮭﺎ ﻣﺴﺎر اﻟﻤﻠﻒﻛﺎﻣﻼ ً .
ﻣﺜﺎل/
)'file_get_contents('login.json
اﻟداﻟﺔ file_put_contents
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻜﺘﺎﺑﺔ ﺑﯿﺎﻧﺎت اﻟﺘﻲ ﺗﻤﺮر ﻟﮭﺎ إﻟﻰ ﻣﻠﻒ ﻣﺎ وھﻲ ﺗﺄﺧﺬ وﺳﯿﻄﯿﻦ اﻷول ﯾﻤﺜﻞ ﻣﺴﺎر
اﻟﻤﻠﻒ واﻟﺜﺎﻧﻲ ﯾﻤﺜﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﺘﻀﺎف ﻟﻠﻤﻠﻒ ,وﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎء اﻟﻤﻠﻒ إذا ﻟﻢ ﯾﻜﻦ
ﻣﻮﺟﻮدا ,وﻓﻲ ﺣﺎل وﺟﻮده ﺗﻘﻮم ﺑﻤﺴﺢ ﺟﻤﯿﻊ ﻣﺤﺘﻮﯾﺎﺗﮫ .
اﻟﺪاﻟﺔ fopen
ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻊ أي ﻣﻠﻒ ﻻﺑﺪ ﻣﻦ أن ﻧﻘﻮم ﺑﻔﺘﺤﮫ وھﺬه اﻟﺪاﻟﺔ ﺗﻔﺘﺢ اﻟﻤﻠﻒ وﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ ﺛﻼﺛﺔ
ﻣﺘﻐﯿﺮات ﺣﯿﺚ أن اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻟﺚ اﺧﺘﯿﺎري وﯾﻤﻜﻦ ﻋﺪم ﻛﺘﺎﺑﺘﮫ وﺗﻌﻮد ﻟﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﺑﺮﻗﻢ ﯾﺪﻋﻰ
ﻣﻘﺒﺾ اﻟﻤﻠﻒ ﻋﻦ طﺮﯾﻘﮫ ﻧﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺪوال اﻷﺧﺮى وإﻟﯿﻚ اﻟﻤﺘﻐﯿﺮات -:
اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻧﻲ -:ﻣﺎ ھﻲ اﻟﺤﺎﻟﺔ اﻟﺘﻲ ﺗﺮﯾﺪ أن ﺗﻔﺘﺢ اﻟﻤﻠﻒ ﻋﻠﯿﮭﺎ ) ﻟﻠﻘﺮاءة ﻓﻘﻂ او ﻟﻠﻘﺮاءة واﻟﻜﺘﺎﺑﺔ او
ﻟﻠﻜﺘﺎﺑﺔ ﻓﻘﻂ ( .
اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻟﺚ -:وھﻮ اﺧﺘﯿﺎري وﯾﺤﺪد ھﻞ ﺗﺮﯾﺪ اﺳﺘﺨﺪام اﻟﻤﺠﻠﺪات اﻟﻤﺤﺪدةﻣﺴﺒﻘﺎ ً ﻓﻲ ﺧﯿﺎرات
phpواﻟﻘﯿﻤﺔ 1ﺗﻌﻨﻲ ﻧﻌﻢ .
اﻟﻤﺘﻐﯿﺮ اﻟﻌﻤﻞ
ﻓﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻘﺮاءة ﻓﻘﻂ ووﺿﻊ اﻟﻤﺆﺷﺮ ﻓﻲ اﻟﺒﺪاﯾﺔ . r
ﻓﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻘﺮاءة واﻟﻜﺘﺎﺑﺔ ووﺿﻊ اﻟﻤﺆﺷﺮ ﻓﻲ اﻟﺒﺪاﯾﺔ . r+
ﻓﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻜﺘﺎﺑﺔ ﻓﻘﻂ ووﺿﻊ اﻟﻤﺆﺷﺮ ﻓﻲ اﻟﺒﺪاﯾﺔ وﻣﺴﺢ ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت ,وإذا ﻟﻢ ﯾﻜﻦ w
اﻟﻤﻠﻒ ﻣﻮﺟﻮد ﺳﺘﻘﻮم اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎﺋﮫ .
ﻓﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻜﺘﺎﺑﺔ واﻟﻘﺮاءة ووﺿﻊ اﻟﻤﺆﺷﺮ ﻓﻲ اﻟﺒﺪاﯾﺔ وﻣﺴﺢ ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت ,وإذا ﻟﻢ ﯾﻜﻦ w+
اﻟﻤﻠﻒ ﻣﻮﺟﻮد ﺳﺘﻘﻮم اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎﺋﮫ .
ﻓﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻜﺘﺎﺑﺔ ﻓﻘﻂ ووﺿﻊ اﻟﻤﺆﺷﺮ ﻓﻲ اﻟﻨﮭﺎﯾﺔ ,وإذا ﻟﻢ ﯾﻜﻦ اﻟﻤﻠﻒ ﻣﻮﺟﻮد ﺳﺘﻘﻮم a
اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎﺋﮫ .
ﻓﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻘﺮاءة واﻟﻜﺘﺎﺑﺔ ووﺿﻊ اﻟﻤﺆﺷﺮ ﻓﻲ اﻟﻨﮭﺎﯾﺔ ,وإذا ﻟﻢ ﯾﻜﻦ اﻟﻤﻠﻒ ﻣﻮﺟﻮد ﺳﺘﻘﻮم a+
اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎﺋﮫ .
ﻣﺜﺎل/
; ) "$fp=fopen( "file.txt" , "r
ﻣﺜﺎل/
; ) "$fp=fopen( "http://www.example.com/file.txt" , "r
اﻟﺪاﻟﺔ fclose
وھﻲ ﺗﺴﺘﺨﺪم ﻹﻏﻼق اﻟﻤﻠﻒ اﻟﻤﻔﺘﻮح ﺣﯿﺚ إن أﺑﻘﯿﺖ اﻟﻤﻠﻒ ﻣﻔﺘﻮح ﻓﺴﻮف ﯾﺴﺘﮭﻠﻚ ﺟﺰء ﻣﻦ اﻟﺬاﻛﺮة
وﻛﻞ ﻣﺎ ﻧﺤﺘﺎﺟﮫ ھﻨﺎ ھﻮ ﻣﻘﺒﺾ اﻟﻤﻠﻒ اﻟﻤﻔﺘﻮح اﻟﺬي ﺗﺄﺗﯿﻨﺎ ﺑﮫ اﻟﺪاﻟﺔ fopen
ﻣﺜﺎل/
; ) "$fp=fopen( "file.txt" , "r
; ) fclose( $fp
) ( 82 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
اﻟﺪاﻟﺔ fread
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة ﻣﻠﻒ ﻣﻌﯿﻦ ﺑﻌﺪ ﻓﺘﺤﮫ وھﻲ ﺗﻘﺮأ ﺟﺰء ﻣﻌﯿﻦ ﻣﻦ اﻟﻤﻠﻒ ﯾﺤﺪده اﻟﻤﺒﺮﻣﺞ ﻣﻤﺎ
ﯾﻘﻠﻞ ﻣﻦ اﻟﺬاﻛﺮةﻓﻤﺜﻼ ً ﻟﻮ ﻛﺎن ﻟﺪﯾﻨﺎ ﻣﻠﻒ طﻮﻟﮫ 100ﺑﺎﯾﺖ وﻓﺘﺤﻨﺎه وﻣﻦ ﺛﻢ ﻗﺮأﻧﺎه ﺑﮭﺬه اﻟﺪاﻟﺔ وﺣﺪدﻧﺎ
ﻟﮫ اﻟﺤﺠﻢ 20ﺑﺎﯾﺖ ﻓﻌﻨﺪ اﺳﺘﺪﻋﺎﺋﮭﺎ ﺳﻮف ﺗﺤﻀﺮ ﻟﻨﺎ أول 20ﺑﺎﯾﺖ وﻋﻨﺪ اﺳﺘﺪﻋﺎﺋﮭﺎ ﻣﺮة أﺧﺮى
ﻟﻨﻔﺲ اﻟﻤﻠﻒ ﺗﺤﻀﺮ اﻠ 20ﺑﺎﯾﺖ اﻟﺘﺎﻟﯿﺔ وھﻜﺬا ﺣﺘﻰ ﻧﺼﻞ إﻟﻰ ﻧﮭﺎﯾﺔ اﻟﻤﻠﻒ ,ﺣﯿﺚ أن اﻟﺪاﻟﺔ ﺗﺤﺘﺎج
إﻟﻰ ﻣﺘﻐﯿﺮﯾﻦ اﻷول ﻣﻘﺒﺾ اﻟﻤﻠﻒ واﻟﺜﺎﻧﻲ اﻟﺤﺠﻢ اﻟﺬي ﻧﺮﯾﺪ ﻗﺮاءﺗﮫ .
ﻣﺜﺎل/
; ) "$fp = fopen( "file.txt" , "r
; ) $contents = fread( $fp , 20
; ) fclose( $fp
;echo $content
ﻻﺣﻆ ﺑﺄن ھﺬا اﻟﻤﺜﺎل ﺳﯿﻄﺒﻊ أول 20ﺣﺮف ﻣﻦ اﻟﻤﻠﻒ
اﻟداﻟﺔ fgets
ھﺬه اﻟﺪاﻟﺔ ھﻲﺗﻤﺎﻣﺎ ً ﻣﺜﻞ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ) ( freadواﻟﻔرق اﻟوﺣﯾد ھو أن ھذه اﻟداﻟﺔ ﻻ ﻧﺣدد ﻟﮭﺎ ﺣﺟم
ﺑﺎﻟﺑﺎﯾت ﻟﺗﻘرأه ﻷﻧﮭﺎ ﺳﺗﺄﺧذ ﺑﺷﻛل اﻓﺗراﺿﻲ اﻟﺣﺟم 1024ﺑﺎﯾت ,وﻛﻼ اﻟداﻟﺗﯾن ﺗﺗوﻗﻔﺎن ﺑﻌد ﻗراءة
اﻟﻣﻠف ﺑﺎﻟﻛﺎﻣل
اﻟﺪاﻟﺔ feof
وھﻲ ﺗﻔﯿﺪﻧﺎ ھﻞ ﺗﻢ ﻗﺮاءة اﻟﻤﻠﻒ ﺑﺎﻟﻜﺎﻣﻞ أي ھﻞ وﺻﻠﻨﺎ إﻟﻰ ﻧﮭﺎﯾﺔ اﻟﻤﻠﻒ وﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﻣﻘﺒﺾ
اﻟﻤﻠﻒ وﺳﻮف ﯾﻌﯿﺪ ﻟﻨﺎ اﻟﻘﯿﻤﺔ trueإذا ﻛﻨﺎ ﻗﺪ وﺻﻠﻨﺎ إﻟﻰ ﻧﮭﺎﯾﺔ اﻟﻤﻠﻒ .
) ( 83 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
ﻣﺜﺎل/
; ) feof( $fp
اﻟﺪاﻟﺔ fwrite
ھﺬه اﻟﺪاﻟﺔ ﺗﻘﻮم ﺑﻌﻤﻠﯿﺔ اﻟﻜﺘﺎﺑﺔ وھﻲ ﺗﺤﺘﺎج إﻟﻰ اﻟﻤﺘﻐﯿﺮات اﻟﺘﺎﻟﯿﺔ -:
وﺳﯿﺘﻢ اﻟﻜﺘﺎﺑﺔ ﻓﻲ داﺧﻞ اﻟﻤﻠﻒ ﻓﻲ اﻟﻤﻜﺎن اﻟﺬي ﺗﻮﻗﻒ ﻓﯿﮫ ﻣﺆﺷﺮ ﻗﺮاءة اﻟﻤﻠﻒ .
ﻣﺜﺎل/
; ) "fwrite( $fp , "My Program
ﻣﻼﺣظﺔ /ﺳﺗﻘوم ھذه اﻟداﻟﺔ ﺑطﺑﺎﻋﺔ رﺳﺎﻟﺔ ﺧطﺄ ﻋﻧد ﻋدم ﺗوﻓر ﺻﻼﺣﯾﺎت ﻟﻠﻛﺗﺎﺑﺔ ﻋﻠﻰ اﻟﻣﻠف .
اﻟداﻟﺔ fputs
ھﺬه اﻟﺪاﻟﺔ ھﻲﺗﻤﺎﻣﺎ ً ﻧﻔﺲ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ) ( fwriteوﺗﺄﺧذﺗﻣﺎﻣﺎ ً ﻧﻔس وﺳﺎﺋطﮭﺎ .
اﻟداﻟﺔ fseek
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﺘﻐﯿﯿﺮ ﻣﻜﺎن اﻟﻤﺆﺷﺮ ﺳﻮاء ﻋﻨﺪ اﻟﻘﺮاءة أو اﻟﻜﺘﺎﺑﺔ وھﻲ ﺗﻘﺒﻞ وﺳﯿﻄﯿﻦ إﺟﺒﺎرﯾﯿﻦ ,
اﻷول ھﻮ ﻣﻘﺒﺾ اﻟﻤﻠﻒ واﻟﺜﺎﻧﻲ ھﻮ اﻟﻤﻜﺎن اﻟﺬي ﺳﻮف ﯾﺘﻢ وﺿﺎع اﻟﻤﺆﺷﺮ ﻋﻨﺪه ,وﺗﻛون اﻟﺻﯾﻐﺔ
اﻟﻌﺎﻣﺔ ﻟﮭﺎ ﺑﮭذا اﻟﺷﻛل
;)fseek($handle, $offset
اﻟﺪاﻟﺔ rename
وھﻲ ﺗﺴﺘﺨﺪم ﻟﺘﻐﯿﯿﺮ اﺳﻢ ﻣﻠﻒ وﺗﺤﺘﺎج إﻟﻰ ﻣﺘﻐﯿﺮﯾﻦ اﻷول اﻻﺳﻢ اﻟﻘﺪﯾﻢ واﻟﺜﺎﻧﻲ اﻻﺳﻢ اﻟﺠﺪﯾﺪ .
) ( 84 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
ﻣﺜﺎل/
; )"echo rename( "backup.gif" , "backup1.gif
اﻟﺪاﻟﺔ realpath
ﺗﺴﺘﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﻌﺮف ﻋﻠﻰ اﻟﻤﺴﺎر اﻟﻜﺎﻣﻞ واﻟﺤﻘﯿﻘﻲ ﻟﻠﻤﻠﻒ اﻟﻤﺤﺪد .
ﻣﺜﺎل/
; ) "echo realpath( "backup.gif
اﻟﺪاﻟﺔ tempnam
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎء ﻣﻠﻒ ﻣﺆﻗﺖ وﺣﯿﺪ أي اﺳﻤﮫ ﻏﯿﺮ ﻣﻮﺟﻮدﻣﺴﺒﻘﺎ ً .
ﻣﺜﺎل/
; ) "$x=tempnam( " " , "sag
; echo $x
; ">echo "</p
; ) "$x=tempnam( " " , "sag
; echo $x
ﺣﯿﺚ أﻧﻨﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل اﺳﺘﺪﻋﯿﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﻣﺮﺗﯿﻦ أول ﺛﻼث أﺣﺮف ﻣﻨﮭﺎ sagوﺳﺘﻌﻄﻲ ﻟﻜﻞ واﺣﺪ
ﻣﻨﮭﺎ رﻗﻢ ﻣﻤﯿﺰ ﻟﻜﻲ ﻻ ﯾﻜﻮﻧﺎ ﻧﻔﺲ اﻻﺳﻢ .
اﻟداﻟﺔ filectime
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ آﺧﺮ وﻗﺖ ﻟﺘﻐﯿﯿﺮ ﻣﻠﻒ ﻣﺎ وﺗﻘﺒﻞ وﺳﯿﻂ واﺣﺪ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ وھﻮ
ﻣﺴﺎر اﻟﻤﻠﻒ ,وﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﺟﻤﯿﻊ اﻟﺘﻐﯿﺮات ﻋﻠﻰ ﻣﻠﻒ ﺳﻮاء ﻋﻠﻰ ﻣﺤﺘﻮﯾﺎﺗﮫ أم ﻋﻠﻰ ﺻﻼﺣﯿﺎت
اﻟﻮﺻﻮل إﻟﯿﮫ أم ﺗﻐﯿﯿﺮ اﻟﻤﺴﺘﺨﺪم اﻟﻣﺎﻟك ﻟﮫ .
ﻣﺛﺎل/
;)'filectime('file1.txt
) ( 85 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
اﻟداﻟﺔ filemtime
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ آﺧﺮ وﻗﺖ ﻵﺧﺮ ﺗﻌﺪﯾﻞ ﻋﻠﻰ اﻟﻤﻠﻒ وﺗﻘﺒﻞ ھﺬه اﻟﺪاﻟﺔ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ
وﺳﯿﻂ واﺣﺪ وھﻮ ﻣﺴﺎر اﻟﻤﻠﻒ ,وﻻﺣﻆ أن ھﺬه اﻟﺪاﻟﺔ ﺗﺸﯿﺮ إﻟﻰ آﺧﺮ ﺗﻌﺪﯾﻞ ﻓﻲ ﻣﺤﺘﻮﯾﺎت اﻟﻤﻠﻒ ﻓﻘﻂ
ﻣﺜﺎل/
;))'echo date("m/d/Y H:i:s", filemtime('file1.txt
اﻟداﻟﺔ fileatime
ﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﺑﺼﻤﺔ وﻗﺖ آﺧﺮ وﺻﻮل ﻟﻠﻤﻠﻒ او falseﻓﻲ ﺣﺎل ﻓﺸﻠﮭﺎ وﺗﻘﺒﻞ ھﺬه اﻟﺪاﻟﺔ ﺑﯿﻦ
ﻗﻮﺳﯿﮭﺎ وﺳﯿﻂ واﺣﺪ وھﻮ ﻣﺴﺎر اﻟﻤﻠﻒ .
ﻣﺜﺎل/
;)'fileatime('file1.txt
اﻟﺪاﻟﺔ is_readable
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ إﻣﻜﺎﻧﯿﺔ اﻟﻘﺮاءة ﻋﻠﻰ ﻣﻠﻒ او ﻗﯿﺪ وﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ trueﻓﻲ ﺣﺎل ﻧﺠﺎﺣﮭﺎ
واﻟﻘﯿﻤﺔ falseﻓﻲ ﺣﺎل ﻓﺸﻠﮭﺎ ,وﺗﻘﺒﻞ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ وﺳﯿﻂ واﺣﺪ وھﻮ ﻣﺴﺎر اﻟﻤﻠﻒ .
ﻣﺜﺎل/
;)'is_readable('file1.txt
اﻟداﻟﺔ is_writeable
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ إﻣﻜﺎﻧﯿﺔ اﻟﻜﺘﺎﺑﺔ ﻋﻠﻰ ﻣﻠﻒ او ﻗﯿﺪ وﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ trueﻓﻲ ﺣﺎل ﻧﺠﺎﺣﮭﺎ
واﻟﻘﯿﻤﺔ falseﻓﻲ ﺣﺎل ﻓﺸﻠﮭﺎ ,وﺗﻘﺒﻞ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ وﺳﯿﻂ واﺣﺪ وھﻮ ﻣﺴﺎر اﻟﻤﻠﻒ .
ﻣﺜﺎل/
;)'is_writable('file1.txt
) ( 86 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ إﻣﻜﺎﻧﯿﺔ اﻟﺘﻨﻔﯿﺬ ﻋﻠﻰ ﻣﻠﻒ او ﻗﯿﺪ وﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ trueﻓﻲ ﺣﺎل ﻧﺠﺎﺣﮭﺎ
واﻟﻘﯿﻤﺔ falseﻓﻲ ﺣﺎل ﻓﺸﻠﮭﺎ ,وﺗﻘﺒﻞ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ وﺳﯿﻂ واﺣﺪ وھﻮ ﻣﺴﺎر اﻟﻤﻠﻒ .
ﻣﺜﺎل/
;)'is_executable('file1.txt
اﻟﺪاﻟﺔ dirname
ﻣﺜﺎل/
; ) "echo dirname( "www.example.com/help/index.php
اﻟداﻟﺔ opendir
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻘﺒﺾ اﻟﻤﺠﻠﺪ ﺣﯿﺚ ﺗﻘﺒﻞ ھﺬه اﻟﺪاﻟﺔوﺳﯿﻄﺎ ً واﺣﺪ ھﻮ ﻣﺴﺎر اﻟﻤﺠﻠﺪ
,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
;)$resorce = opendir($path
اﻟداﻟﺔ closedir
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻐﻠﻖ اﻟﻤﺠﻠﺪ اﻟﺬي ﻓﺘﺤﻨﺎه ﺑﻮاﺳﻄﺔ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ وھﻲ ﺗﺄﺧﺬ وﺳﯿﻂ واﺣﺪ ھﻮ ﻣﻘﺒﺾ
اﻻﺗﺼﺎل اﻟﺬي ﺗﺠﻠﺒﮫ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ,واﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ
;)closedir($handle
) ( 87 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
اﻟداﻟﺔ readdir
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة اﻟﻘﯿﺪ اﻟﺘﺎﻟﻲ ﻣﻦ ﻣﺠﻠﺪ ﺗﻢ إﻧﺸﺎء ﻣﻘﺒﻀﮫ ﺑﻮاﺳﻄﺔ اﻟﺪاﻟﺔ opendirﺣﯿﺚ
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻘﺮاءة ﻗﯿﻮد اﻟﻤﻠﻔﺎت ﻋﻠﻰ اﻟﺘﺘﺎﻟﻲ وﺣﺴﺐ ﺗﺮﺗﯿﺐ ﻧﻈﺎم اﻟﻤﻠﻔﺎت اﻟﻤ ُﺴﺘﺨﺪم ﺗﻘﺒﻞ ھﺬه
اﻟﺪاﻟﺔ وﺳﯿﻄﺎ واﺣﺪا ھﻮ ﻣﻘﺒﺾ اﻟﻤﺠﻠﺪ و ﺗ ُﻌﯿﺪ اﻟﻘﯿﺪ ) اﺳﻢ اﻟﻤﻠﻒ أو اﻟﻤﺠﻠﺪ ( ,وﻟﻠﻤﺮور ﻋﻠﻰ ﺟﻤﯿﻊ
ﻗﯿﻮد اﻟﻤﺠﻠﺪ ﻧﺴﺘﺨﺪم ﺣﻠﻘﺔ اﻟﺘﻜﺮار whileوﻟﺘﻄﺒﯿﻖ اﻟﺪوال اﻟﺜﻠﺚ اﻟﺴﺎﺑﻘﺔ ﻧﺠﺮب اﻟﻣﺛﺎل اﻟﺗﺎﻟﻲ
<?php
;)'$dir = opendir('folder
)while (($file = readdir($dir) )!== false
{
;'>echo $file.'<br
}
;)closedir($dir
>?
اﻟﺪاﻟﺔ mkdir
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎء اﻟﻤﺠﻠﺪ وﺗﺤﺘﺎج إﻟﻰ ﻣﺘﻐﯿﺮﯾﻦ اﻷول اﺳﻢ اﻟﻤﺠﻠﺪ واﻟﺜﺎﻧﻲ اﻟﺘﺮﺧﯿﺺ اﻟﺬي ﺗﻮد
إﻋﻄﺎءه ﻟﮫ .
ﻣﺜﺎل/
; ) echo mkdir( "backup" , 0777
اﻟﺪاﻟﺔ is_dir
ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ أن ﻧﻨﺸﺄ ﻣﺠﻠﺪ وﯾﻜﻮن ﻣﻮﺟﻮد ﯾﺤﺪث ﺧﻄﺄ ﯾﻌﻄﻞ اﻟﺒﺮﻧﺎﻣﺞ وھﺬه اﻟﺪاﻟﺔ ﺗﺨﺒﺮﻧﺎ أن ﻛﺎن
اﻟﻤﺠﻠﺪ ﻣﻮﺟﻮد وﻻ ﺗﺤﺘﺎج إﻻ إﻟﻰ اﺳﻢ اﻟﻤﺠﻠﺪ وإن ﻛﺎن ﻣﻮﺟﻮد ﺗﻌﻮد ﻟﻨﺎ ﺑﺎﻟﻘﯿﻤﺔ 1وإن ﻟﻢ ﯾﻜﻦ ﻣﻮﺟﻮد
ﺗﻜﻮن اﻟﻘﯿﻤﺔ . 0
ﻣﺜﺎل/
; ) "echo is_dir( "mydir
) ( 88 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
اﻟﺪاﻟﺔ rmdir
وھﻲ ﺗﺴﺘﺨﺪم ﻟﺤﺬف اﻟﻤﺠﻠﺪ وﻛﻞ ﻣﺎ ﺗﺤﺘﺎﺟﮫ ھﻮ اﺳﻢ اﻟﻤﺠﻠﺪ ,وﻗﺒﻞ اﺳﺘﺨﺪاﻣﮭﺎ ﻣﻦ اﻟﻤﻔﻀﻞ اﺳﺘﺨﺪام
اﻟﺪاﻟﺔ is_dirﻟﻠﺘﺄﻛﺪ ﻣﻦ أن اﻟﻤﻠﻒ ﻣﻮﺟﻮد .
ﻣﺜﺎل/
; ) "echo rmdir( "backup
ﻣﻼﺣظﺔ /ﯾﺠﺐ أن ﯾﻜﻮن اﻟﻤﺠﻠﺪ اﻟﻤﺮاد ﺣﺬﻓﮫ ﻓﺎرﻏﺎ أﻣﺎ إذا ﻛﺎن اﻟﻤﺠﻠﺪ ﯾﺤﺘﻮي أي ﻣﻠﻒ او ﻣﺠﻠﺪ
ﻓﺮﻋﻲ ,ﻓﻠﻦ ﯾﺘﻢ ﺗﻨﻔﯿﺬ ھﺬه اﻟﺘﻌﻠﯿﻤﺔ و ﺳﯿﺘﻢ ﺗﻮﻟﯿﺪ رﺳﺎﻟﺔ ﺧﻄﺄ ﻟﻜﻦ إذا أردﻧﺎ ﺣﺬف ﻣﺠﻠﺪ ﯾﺤﻮي ﻣﻠﻔﺎت
وﻣﺠﻠﺪات ﻓﺮﻋﯿﺔ ,ﻓﯿﺠﺐ ﻋﻠﯿﻨﺎ أوﻻ ً أن ﻧﻘﻮم ﺑﺤﺬف ﺟﻤﯿﻊ ﻣﺤﺘﻮﯾﺎﺗﮫ ﻗﺒﻞ ﻣﺤﺎوﻟﺔ اﺳﺘﺪﻋﺎء ھﺬه اﻟﺪاﻟﺔ
,وأﯾﻀﺎ ً ﯾﺠﺐ اﻻﻧﺘﺒﺎه اﻟﻰ ان اﻟﺘﺼﺮﯾﺢ اﻟﻤﻌﻄﻰ ﻟﻠﻤﻠﻒ ﯾﺴﻤﺢ ﺑﺤﺬﻓﮫ .
ﻓﻲ اﻟﺒﺪاﯾﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﻤﻠﻔﺎت ﯾﺠﺐ ان ﻧﻔﻌﻠﮭﺎ ﻣﻦ ﺧﻼل اﻟﻤﻠﻒ php.iniاﻟﺬي ﯾﻜﻮن
ﻣﺮﻓﻖ ﻣﻊ اﻟﺴﺮﻓﺮ ﺣﯿﺚ ﺳﻨﺒﺤﺚ ﻋﻦ اﻟﻌﺒﺎرة ) ( extension=php_zip.dllﻓﻲ داﺧﻞ اﻟﻤﻠﻒ
ﺳﻨﺠﺪ ﻗﺒﻞ ھﺬه اﻟﻌﺒﺎرة ) ﻓﻲ ﺑﺪاﯾﺔ اﻟﺴﻄﺮ ( ھﺬه اﻟﻌﻼﻣﺔ ) ; ( اﻟﻔﺎرزة اﻟﻤﻨﻘﻮطﺔ وھﺬا ﯾﺪل ﻋﻠﻰ اﻧﮭﺎ
ﻻ ﺗﻌﻤﻞ وﻛﻞ ﻣﺎ ﻋﻠﯿﻨﺎ ﻓﻌﻠﮫ ھﻮ ان ﻧﺤﺬف ھﺬه اﻟﻔﺎرزة اﻟﻤﻮﺟﻮدة ﻓﻲ ﺑﺪاﯾﺔ اﻟﺴﻄﺮ ﻟﺘﻔﻌﯿﻠﮭﺎ .
zip_open
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﻔﺘﺢ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط وﻛﻞ ﻣﺎ ﻋﻠﯿﻨﺎ ﻓﻌﻠﮫ ھﻮ ان ﻧﻤﺮر ﻟﮭﺎ ﻣﺴﺎر ھﺬا اﻟﻤﻠﻒ ﺑﯿﻦ
ﻗﻮﺳﯿﮭﺎ ,وﺳﺘﻌﯿﺪ ﻟﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﻣﻘﺒﺾ ﻟﻌﻤﻠﯿﺔ اﻟﻔﺘﺢ .
ﻣﺜﺎل/
;)"$o = zip_open("file.zip
zip_close
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺤﺮﯾﺮ ﻣﻘﺒﺾ اﻟﻔﺘﺢ اﻟﺬي ﺗﻌﯿﺪه اﻟﺪاﻟﺔ zip_openوھﻲ ﻻ ﺗﺤﺘﺎج إﻻ اﻟﻰ اﺳﻢ
اﻟﻤﻘﺒﺾ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ .
) ( 89 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
ﻣﺜﺎل/
;)"$o = zip_open("file.zip
zip_read
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة اﻟﻤﻠﻔﺎت اﻟﻤﻮﺟﻮدة ﺑﺪاﺧﻞ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط وﻧﻀﻊ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ اﻟﻤﻘﺒﺾ
اﻟﺬي ﻋﺎدت ﺑﮫ إﻟﯿﻨﺎ اﻟﺪاﻟﺔ , zip_readوﻻﺣﻆ ﺑﺄﻧﮫ اذا اردﻧﺎ اﻟﻮﺻﻮل اﻟﻰ ﻣﻠﻒ ﻣﺤﺪد ﻣﻮﺟﻮد ﻓﻲ
داﺧﻞ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮد ﻓﯿﺠﺐ ان ﻧﺴﺘﺨﺪم ﺣﻠﻘﺔ ﺗﻜﺮار ﻟﺘﺪور ﻋﻠﻰ ﻛﻞ اﻟﻤﻠﻔﺎت اﻟﻤﻮﺟﻮدة وﻣﻦ ﺛﻢ
ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ اﻟﻤﻨﺎﺳﺒﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ھﺬا اﻟﻤﻠﻒ وﺳﻨﺸﺮح ھﺬه اﻟﺪوال ﺑﻌﺪ ﻗﻠﯿﻞ .
ﻣﺜﺎل/
;)"$o = zip_open("file.zip
{) if( $o
;) $e = zip_read( $o
{) while( $e
ھﻧﺎ ﻧﻛﺗب اﻟدوال اﻟﺗﻲ ﻧﺣﺗﺎﺟﮭﺎ ﻟﻠﺗﻌﺎﻣل ﻣﻊ اﻟﻣﻠﻔﺎت اﻟداﺧﻠﯾﮫ وھذه اﻟدوال ﺳﻧﺷرﺣﮭﺎ ﺑﻌد ﻗﻠﯾل //
}
}
ﻻﺣﻆ ﺑﺄﻧﻨﺎ ﺗﺤﻘﻘﻨﺎ ﻣﻦ ﻣﻘﺒﺾ اﻷﺗﺼﺎل $oﻷﻧﮫ اذا ﻛﺎن اﻟﻤﺴﺎر اﻟﻤﻤﺮر اﻟﻰ اﻟﺪاﻟﺔ zip_open
ﺧﻄﺄ ﺳﺘﻌﯿﺪ ﻟﻨﺎ falseوﺳﺘﺴﺒﺐ ﻟﻨﺎ ﻣﺸﻜﻠﮫ ﻟﺬﻟﻚ وﺿﻌﻨﺎ ھﺬا اﻟﺸﺮط
zip_entry_name
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة اﺳﻤﺎء اﻟﻤﻠﻔﺎت اﻟﻤﻮﺟﻮدة داﺧﻞ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط .
ﻣﺜﺎل/
;)"$o = zip_open("file.zip
{) if( $o
;) $e = zip_read( $o
{) while( $e
;) $n = zip_entry_name( $e
; ">echo $n . "<br
;) $e = zip_read( $o
} }
) ( 90 اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (
ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﯿﻘﺮاء ﻛﻞ اﺳﻤﺎء اﻟﻤﻠﻔﺎت اﻟﻤﻮﺟﻮدة داﺧﻞ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط .
zip_entry_filesize
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة ﺣﺠﻢ اﻟﻤﻠﻒ اﻟﺪاﺧﻠﻲ اﻟﻤﻮﺟﻮد داﺧﻞ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط .
إذا ﻛﺘﺐ اﻟﻤﺴﺘﺨﺪم ﺟﻤﻠﺔ ﻓﻲ ﻣﺮﺑﻊ ﻧﺺ ﯾﺤﺘﻮي ﻋﻠﻰ ﻋﺪة ﻛﻠﻤﺎت وﺗﺮﯾﺪ أن ﺗﺘﺄﻛﺪ ﻣﻦ وﺟﻮد ﻛﻠﻤﺔ
ﻣﻌﯿﻨﺔ وﺳﻂ ھﺬه اﻟﺠﻤﻠﺔ أو ﻣﻌﺮﻓﺔ ﺻﺤﺔ ﻛﺘﺎﺑﺔ اﻟﺒﺮﯾﺪ اﻻﻟﯿﻜﺘﺮوﻧﻲ اﻟﻤﺪﺧﻞ أو ...اﻟﺦ ,ﻧﺤﺘﺎج إﻟﻰ
اﻟﺪاﻟﺔ . ereg
اﻟﺪاﻟﺔ ereg
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ وﺟﻮد ﻛﻠﻤﺔ ﻓﻲ ﻣﺘﻐﯿﺮ ﻣﺎ ,واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ -:
) اﺳﻢ اﻟﻤﺘﻐﯿﺮ " ,اﻟﻜﻠﻤﺔ " ( ereg
ﻣﺜﺎل -:
-2ﻓﻲ داﺧﻞ اﻟﺪاﻟﺔ eregوﺿﻌﻨﺎ ﺑﻌﺪ اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﺳﻢ ﻣﺼﻔﻮﻓﺔ وذﻟﻚ ﻟﺘﺨﺰﯾﻦ اﻟﻜﻠﻤﺔ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ,
وﯾﻤﻜﻦ ﻋﺪم ﻛﺘﺎﺑﺔ ھﺬه اﻟﻤﺼﻔﻮﻓﺔ .
-3وﺟﻮد أﻛﺜﺮ ﻣﻦ ﻛﻠﻤﺔ oneﻓﻲ اﻟﻤﺘﻐﯿﺮ wordوﻣﻊ ذﻟﻚ ﻓﮭﻮ ﻻ ﯾﻄﺒﻊ ﺳﻮى ﻛﻠﻤﺔ واﺣﺪة وذﻟﻚ
ﻷن اﻟﺪاﻟﺔ eregﻋﻨﺪﻣﺎ ﺗﺠﺪ أول ﻛﻠﻤﺔ ﺳﻮف ﺗﻌﻄﻲ اﻟﻨﺘﯿﺠﺔ trueوﺑﺬﻟﻚ ﯾﺘﺤﻘﻖ اﻟﺸﺮط وﻻ ﺗﮭﺘﻢ
ﺑﻌﺪد اﻟﻜﻠﻤﺎت .
ﻣﻼﺣﻈﺔ /اﻟﺪاﻟﺔ eregﺣﺴﺎﺳﺔ ﻟﺤﺎﻟﺔ اﻷﺣﺮف اﻟﻜﺒﯿﺮة واﻟﺼﻐﯿﺮة ﻟﻠﻜﻠﻤﺔ اﻟﻤﻄﻠﻮب اﻟﺒﺤﺚ ﻋﻨﮭﺎ ﻓﺄن
) ( Oneﺗﺨﺘﻠﻒ ﻋﻦ ) ( oneوأﯾﻀﺎ ً ﯾﺠﺐ اﻻﻧﺘﺒﺎه ﻟﻠﻔﻮاﺻﻞ ﺣﯿﺚ ﻟﻮ ﻛﺘﺒﻨﺎ ) " ) ( " oneوﺿﻌﻨﺎ
) ( 92 اﻟﻔﺻل اﻟﺧﺎﻣس ﻋﺷر ) ﺗﺻﯾد اﻷﺧطﺎء (
ﻓﺎﺻﻠﺔ ﻗﺒﻞ اﻟﻜﻠﻤﺔ ( ﻓﻔﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻻ ﺗﺴﺘﻄﯿﻊ اﻟﺪاﻟﺔ إﯾﺠﺎد اﻟﻜﻠﻤﺔ ﻟﻮ ﻛﺎﻧﺖ ﻣﻦ ﺿﻤﻦ ﻛﻼم ﻣﺜﻞ
) ( onedyوﻟﻜﻦ ﯾﻤﻜﻦ إﯾﺠﺎد اﻟﻜﻠﻤﺔ ) ( oneﻣﻦ ﺿﻤﻦ ھﺬا اﻟﻜﻼم إذا ﺣﺬﻓﻨﺎ اﻟﻔﺎﺻﻠﺔ ﻗﺒﻞ اﻟﻜﻠﻤﺔ
) ". ( "one
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ وﺿﻊ ﻣﻜﺎن اﻟﻜﻠﻤﺔ اﻟﻤﺮاد اﻟﺒﺤﺚ ﻋﻨﮭﺎ ﻓﻲ اﻟﺪاﻟﺔ eregاﺳﻢ ﻣﺘﻐﯿﺮ ﻣﻌﺮفﻣﺴﺒﻘﺎ ً
ﻣﺜﺎل -:
; "$d = "one
; "$word = "one , two , three
} ; " ﻟﻘﺪ وﺟﺪت اﻟﻌﺪد 'if (ereg ($d , $word ) { echo " 'one
ﻣﻼﺣﻈﺔ /ﺗﻌﺘﺒﺮ ﻟﻠﻨﻘﻄﺔ ) ( .ﻗﺪاﺳﺔ ﻓﻲ اﻟﺪاﻟﺔ eregوﻋﻨﺪ وﺿﻌﮭﺎ ﻓﺄﻧﮫ ﺳﯿﻔﮭﻤﮭﺎ ﻋﻠﻰ إﻧﮭﺎ ﻣﻜﺎن
ﻟﺤﺮف أو ﻓﺮاغ وﻟﻜﻲ ﻧﻠﻐﻲ ھﺬه اﻟﻘﺪاﺳﺔ وﻧ ُﻔﮭﻢ phpﻋﻠﻰ إﻧﮭﺎ رﻣﺰ اﻟﻨﻘﻄﺔ ) ( .ﯾﺠﺐ إﺿﺎﻓﺔ
اﻟﻌﻼﻣﺔ ) \ ( ﻗﺒﻞ اﻟﻨﻘﻄﺔ ,ﻣﺜﻞ ( one\. ) -:
ﻧﻘﺼﺪ ﺑﺬﻟﻚ إﻧﻨﺎ ﻧﺤﺪد ﻧﻄﺎق ﻣﻌﯿﻦ ﻣﻦ اﻟﻜﻠﻤﺔ ﻣﻦ اﻟﻤﻤﻜﻦ أن ﯾﻜﻮن ﻓﻲ ھﺬا اﻟﻨﻄﺎق أي ﺣﺮوف ﻣﻦ
اﻟﻔﺌﺔ اﻟﺘﻲ أﻗﻮم ﺑﺘﺤﺪﯾﺪھﺎ .
ﻣﺜﺎل -:
; "?$y = "how are you
ھﻨﺎ ﻓﺈﻧﮫ ﺳﻮف ﯾﺒﺤﺚ ﻋﻦ أي ﻛﻠﻤﺔ ﺗﺒﺪأ ﺑﺎﻟﺤﺮف hوﻣﻦ ﺛﻢ ﯾﺘﺒﻌﮭﺎ أﺣﺪ ھﺎذﯾﻦ اﻟﺤﺮﻓﯿﻦ oأو , e
وإن أردﻧﺎ اﻟﺒﺤﺚ ﻋﻦ ﻛﻠﻤﺔ ﺗﺒﺪأ ﺑﺎﻟﺤﺮف hوﻟﻜﻦ ﯾﺠﺐ أن ﻻ ﯾﺘﺒﻌﮭﺎ ھﺎذﯾﻦ اﻟﺤﺮﻓﯿﻦ ﻓﺈﻧﻨﺎ ﻧﻀﯿﻒ
اﻟﻌﻼﻣﺔ ) ^ ( ﻗﺒﻞ اﻟﺤﺮﻓﯿﻦ "]. "h[^oe
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻨﻨﺎ اﺳﺘﻌﻤﺎل اﺧﺘﺼﺎرات ﻟﺒﻌﺾ اﻷﻣﻮر ﻓﻤﺜﻼ ً إذا ﻛﻨﺎ ﻧﺮﯾﺪ ﻛﻠﻤﺔ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ أي
رﻗﻢ ﻛﻨﺎ ﺳﻨﻜﺘﺐ ﻛﺎﻟﺘﺎﻟﻲ ] [ ^ 123456789وﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل اﺧﺘﺼﺎر ﻟﻠﻤﻮﺿﻮع ﻛﺎﻟﺘﺎﻟﻲ [ ^ 0 -
] , 9وﺣﺘﻰ إذا أردﻧﺎ أن ﯾﺘﺄﻛﺪ ﻣﻦ وﺟﻮد اﻟﺮﻗﻢ ﻓﻌﻠﯿﻨﺎ ﻣﺴﺢ ھﺬه اﻟﻌﻼﻣﺔ ) ^ ( ,وھﺬه اﻻﺧﺘﺼﺎرات
ﻓﻲ اﻟﺠﺪول ﻓﻲ اﻷﺳﻔﻞ ﺗﺸﻤﻞ أﺣﺮف وأﺷﯿﺎء أﺧﺮى .
) ( 93 اﻟﻔﺻل اﻟﺧﺎﻣس ﻋﺷر ) ﺗﺻﯾد اﻷﺧطﺎء (
ﻣﻼﺣﻈﮫ /ﻟﺘﺤﺪﯾﺪ ﻣﻜﺎن اﻟﻜﻠﻤﺔ إن ﻛﺎﻧﺖ ﻓﻲ اﻟﺒﺪاﯾﺔ أو ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﻨﺺ ﺣﯿﺚ إن اﻟﻌﻼﻣﺔ ) ^ ( ﻟﺘﺤﺪﯾﺪ
اﻟﻤﻜﺎن ﻟﺒﺪاﯾﺔ اﻟﺠﻤﻠﺔ واﻟﻌﻼﻣﺔ ) ( $ﻟﻨﮭﺎﯾﺔ اﻟﺠﻤﻠﺔ .
ﻣﺜﺎل -:
ﻣﺜﺎل -:
; "$x = "how are you
ﻣﺜﺎل -:
; "$x = "how are you
اﻟﻌﻼﻣﺎت ) * و +و ? (
ﺑﺎﺳﺘﺨﺪام ھﺬه اﻟﻌﻼﻣﺎت ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ إذا ﻣﺎ ﻛﺎن ﺣﺮف أو ﺟﻤﻠﺔ ﻣﺘﻜﺮرة ﺑﻌﺪد ﻣﻦ اﻟﻤﺮات أو ﻣﺮة
واﺣﺪة .
) ( 94 اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (
ﺗﻌﻤﻞ ﻋﻼﻣﺔ اﻟﻀﺮب ) * ( ﺑﺎﻟﺘﺤﻘﻖ ﻣﻦ أن اﻟﺤﺮف اﻟﺬي ﺗﻮﺿﻊ ﺑﻌﺪ ﻣﺘﻜﺮر ﻣﺮة أو أﻛﺜﺮ أو أ-
ﻏﯿﺮ ﻣﻮﺟﻮدﺑﺘﺎﺗﺎ ً ,ﻣﺜﻼ ً ﻻﺣﻆ ھﺬه اﻟﻜﻠﻤﺔ Bea*tﻓﺈن وﺿﻌﻨﺎھﺎ ﻓﻲ اﻟﺒﺤﺚ ﻓﺄﻧﮭﺎ ﺳﺘﺠﺪ أي ﻣﻦ
ھﺬه اﻟﻜﻠﻤﺎت ) . ( Beaat , Beat , Bet
ب -ﺗﻌﻤﻞ ﻋﻼﻣﺔ اﻟﺠﻤﻊ ) ( +ﺑﺎﻟﺘﺤﻘﻖ ﻣﻦ وﺟﻮد اﻟﻌﻨﺼﺮ اﻟﺬي ﯾﺴﺒﻘﮭﺎ ﻣﺮة واﺣﺪة أو أﻛﺜﺮ ,ﻣﺜﻼ ً
ﻻﺣﻆ ھﺬه اﻟﻜﻠﻤﺔ Bea+tإن وﺿﻌﻨﺎھﺎ ﻓﻲ اﻟﺒﺤﺚ ﻓﺈﻧﮭﺎ ﺳﺘﺠﺪ أي ﻣﻦ ھﺬه اﻟﻜﻠﻤﺎت ( Beat ,
) . Beaat
ت -ﺗﻌﻤﻞ ﻋﻼﻣﺔ اﻻﺳﺘﻔﮭﺎم ) ? ( ﺑﺎﻟﺘﺄﻛﺪ ﻣﻦ وﺟﻮد اﻟﻌﻨﺼﺮ اﻟﺬي ﯾﺴﺒﻘﮭﺎ ﻣﺮة واﺣﺪة أو ﻋﺪم وﺟﻮده
ﺑﺘﺎﺗﺎ ً ,ﻣﺜﻼ ً ﻻﺣﻆ ھﺬه اﻟﻜﻠﻤﺔ Bea?tإن وﺿﻌﻨﺎھﺎ ﻓﻲ اﻟﺒﺤﺚ ﻓﺈﻧﮭﺎ ﺳﺘﺠﺪ أي ﻣﻦ ھﺬه اﻟﻜﻠﻤﺎت (
) . Beat , Bet
* ﻻﺣﻆ أن ھﺬه اﻟﻌﻼﻣﺎت اﻟﺜﻼﺛﺔ ﻓﻲ ھﺬه اﻷﻣﺜﻠﺔ اﻟﺴﺎﺑﻘﺔ ﻛﺎﻧﺖ ﻣﺴﺒﻮﻗﺔ ﺑﺤﺮف واﺣﺪ ﻓﻘﻂ ,وإن
أردﻧﺎ أن ﯾﺸﻤﻞ ﺗﺄﺛﯿﺮھﺎ ﻋﻠﻰ ﻋﺪة أﺣﺮف ﻗﺒﻠﮭﺎ ﻓﺈﻧﻨﺎ ﻧﻀﻊ ﺗﻠﻚ اﻷﺣﺮف ﻓﻲ ﻗﻮﺳﯿﻦ ) ( ,ﻣﺜﻼ ً -:
( wo )?man
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻨﻨﺎ اﻟﺘﺄﻛﺪ ﻣﻦ ﺗﻜﺮار ﺣﺮف ﺑﺸﻜﻞ ﻣﻌﯿﻦ ﻣﻦ اﻟﻤﺮات أو أﻛﺒﺮ ﻣﻦ ﻋﺪد ﻣﻌﯿﻦ ﻣﻦ اﻟﻤﺮات
أو أﺻﻐﺮ ﻣﻦ ﻋﺪد ﻣﻌﯿﻦ ﻣﻦ اﻟﻤﺮات ﻓﯿﻤﻜﻨﻨﺎ ذﻟﻚ ﺑﺎﺳﺘﺨﺪام اﻟﻘﻮﺳﯿﻦ } , { x , yﻣﺜﻼ ً ﻟﻮ أردﻧﺎ أن
ﻧﺘﺄﻛﺪ ﻣﻦ أن اﻟﺤﺮف dﻣﻜﺮر ﻣﺮﺗﯿﻦ إﻟﻰ أرﺑﻊ ﻣﺮات ﺳﻨﻜﺘﺐ } , d{2,4أﻣﺎ إذا أردﻧﺎ أن ﻧﺘﺄﻛﺪ ﻣﻦ
أﻧﮫ ﻣﻜﺮر أﻛﺚ ﻣﻦ ﻣﺮﺗﯿﻦ إﻟﻰ ﻋﺪد ﻏﯿﺮ ﻣﺤﺪد ﻣﻦ اﻟﻤﺮات ﺳﻨﻜﺘﺐ } , d{2,أﻣﺎ إذا أردﻧﺎ أن ﯾﺘﻜﺮر
ﻛﺤﺪ أﻋﻼ 4ﻣﺮات ﺳﻨﻜﺘﺐ } d{ ,4و وإذا أردﻧﺎ أن ﯾﺘﻜﺮر ﺑﻌﺪد ﻣﻌﯿﻦ ﻣﻦ اﻟﻤﺮات ﺳﻨﻜﺘﺐ }. d{8
* اﻻﺧﺘﺼﺎر \bﻣﻌﻨﺎه أي ﺷﻲء وﻟﻜﻦ ﻟﯿﺲﺣﺮﻓﺎ ً ) اﻟﺤﺮوف أﻟﺘﻲ ﺑﯿﻦ \wو \Wﺗﻘﺮﯾﺒﺎ ً ( ,إﻟﯿﻚ
ھﺬا اﻟﺠﺪول أذي ھﻮ ﻣﻠﺨﺺ ﻟﻤﺎ أﺧﺬﻧﺎه ﻣﻦ ﻗﻮاﻋﺪ -:
اﻟﻤﻌﻨﻰ اﻟﻘﺎﻋﺪة
أي ﺣﺮف ﻛﺎن aأو bأو c ][abc
أي ﻣﺎ ﻋﺪا ﺣﺮف aأو bأو c ] [^ a b c
اﻟﺤﺮوف اﻟﺘﻲ ﺑﯿﻦ \wو \W \b
أي ﺣﺮف .
ﺗﻌﺘﺒﺮ abcﻛﻤﺠﻤﻮﻋﺔ )( abc
ﺣﺮف أو ﻣﺠﻤﻮﻋﺔ ﺣﺮوف ﻣﻜﺮرة ﻣﺮة أو ﻏﯿﺮ ﻣﻜﺮراﻧﮭﺎﺋﯿﺎ ً ?
) ( 95 اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (
اﻟﺸﺮح اﻟﺮﻣﺰ
ﯾﺠﺐ أن ﯾﺒﺪأ اﻟﻨﺺ ^
أي ﺣﺮف ﻣﻦ aإﻟﻰ zﻛﺒﯿﺮ أو ﺻﻐﯿﺮ أو أرﻗﺎم ][-a-z A-Z 0-9-
ﻣﺜﺎل -:
{ )function mer( $mail , $t
; "Sx = "^[-a-z A-Z 0-9-]+(\.[-A-Z a-z 0-9-]+)*@[a-z A-Z 0-9-]+(\.[a-z A-Z 0-9-]+)*$
; " if (ereg ($x , $mail) { $r = " the mail is true
; "echo $r ; } else {$r = "the mail is not true
}; echo $r ; } return
; )mer ("ahmedcia71@yahoo.com" , $t
) ( 96 اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (
اﻟﺪاﻟﺔ ; ) ( eregi
وھﻲ ﻣﺜﻞ اﻟﺪاﻟﺔ eregوﻟﻜﻦ اﻟﻔﺮق ﺑﯿﻨﮭﻤﺎ إن ھﺬه اﻟﺪاﻟﺔ ﻻ ﺗﻔﺮق ﺑﯿﻦ اﻟﺤﺮوف اﻟﻜﺒﯿﺮة واﻟﺼﻐﯿﺮة .
اﻟﺪاﻟﺔ ereg_replace
ﻧﺴﺘﻄﯿﻊ ﺑﺎﺳﺘﺨﺪام ھﺬه اﻟﺪاﻟﺔ اﻟﺘﺨﻠﺺ ﻣﻦ ﺑﻌﺾ اﻟﺤﺮوف أو اﺳﺘﺒﺪاﻟﮭﺎ ﺑﺤﺮوف أﺧﺮى ,واﻟﺼﯿﻐﺔ
اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ -:
; ) اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﺳﯿﺠﺮي ﻋﻠﯿﮫ اﻟﺘﻐﯿﯿﺮ " ,اﻟﺤﺮف اﻟﺠﺪﯾﺪ "" ,اﻟﺤﺮف اﻟﻘﺪﯾﻢ" (
ereg_replace
ﻣﺜﺎل -:
; "$x = "C:\windows\desktop
; " $y = "Ail love his game ....
; ) $newx = ereg_replace ("[\.]" , "/" , $x
; ) $newy = ereg_replace ("\." , " " , $y
; echo $newx
; ">echo "<br
; echo $newy
اﻟداﻟﺔ preg_match
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻟﺒﺤﺚ ﻋﻦ ﻧﻤﻂ ﻟﻠﺘﻌﺎﺑﯿﺮ اﻟﻨﻈﺎﻣﯿﺔ ﻓﻲ داﺧﻞ اﻟﺴﻠﺴﻠﺔ اﻟﻨﺼﯿﺔ ,ﻓﻲ ﺣﺎﻟﺔ وﺟﻮد
ﻣﻄﺎﺑﻘﺔ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ trueوﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ falseﺑﺨﻼف ذﻟﻚ .
ﻣﺜﺎل/1
<?php
;'$reg = '/(\d{4})-(\d{1,2})-(\d{1,2})/
;'$date1 = '1995-5-21
;'$date2 = '95-May-21
)if(preg_match($reg, $date1) != false
{
;"echo "Date '$date1' is a valid Date
{ } else
;"echo "Date '$date1' is a NOT valid Date
( 97 ) ( اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء
}
echo '<br>';
if(preg_match($reg, $date2) != false)
{
echo "Date '$date2' is a valid Date";
} else {
echo "Date '$date2' is a NOT valid Date";
}
?>
/2ﻣﺜﺎل
<?php
$reg = ' (\d{4})-(\d{1,2})-(\d{1,2}) ';
$date = '1995-5-21';
if(preg_match($reg, $date, $results) != false)
{
echo "Date '$date' is a valid Date";
echo '<br>';
echo "The full match is {$results[0]} <br>";
echo "The Year is {$results[1]} <br>";
echo "The Month is {$results[2]} <br>";
echo "The Day is {$results[3]}";
}
else
{
echo "Date '$date' is a NOT valid Date";
}
?>
preg_repalce اﻟداﻟﺔ
. ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﺳﺘﺒﺪال ﻧﺺ ﺑﻨﺺ آﺧﺮ ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ اﻟﺘﻌﺎﺑﯿﺮ اﻟﻨﻈﺎﻣﯿﺔ
) ( 98 اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (
ﻣﺜﺎل /ﯾﺤﻮل ﺻﯿﻐﺔ اﻟﺘﺎرﯾﺦ ﻣﻦ اﻟﺸﻜﻞ " "YYYY-MM-DDإﻟﻰ اﻟﺸﻜﻞ ""DD | MM | YYYY
<?php
; ' )}$x = ' (\d{4})-(\d{1,2})-(\d{1,2
; ' $y = ' $3 | $2 | $1
; )'echo preg_replace($x , $y , '1995-5-21
>?
اﻟداﻟﺔ filter_var
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﻠﺗﺣﻘق ﻣن اﻟﻣﺗﻐﯾر وذﻟك ﺑﺷﻛل ﺟﺎھز وھﻲ ﺗﺄﺧذ ﺑﺎراﻣﺗرﯾن اﻷول ھو اﻟﻣﺗﻐﯾر
واﻟﺛﺎﻧﻲ ھو ﻧوع اﻟﺗﺣﻘق أي اﻟﺗﺣﻘق اﻟذي ﻧرﯾده ﻣﺛﻼ ھل اﻟﻣﺗﻐﯾر ﯾﺣﻣل ﻗﯾﻣﺔ ﻟﺑرﯾد اﻟﻛﺗروﻧﻲ او
ﯾﺣﻣل ipاو ﯾﺣﻣل ﻗﯾﻣﺔ راﺑط .
ﻣﺛﺎل/
; “ $x = “ ahmed@gmail.com
; “ echo “ yes
{ } else
} ; “ echo “ no
ﻛﻣﺎ ﺗﻼﺣظ ھﻧﺎ ﺗﺣﻘﻘﻧﺎ ﻣن أن اﻟﻣﺗﻐﯾر ﯾﺣﻣل ﺑرﯾد اﻟﯾﻛﺗروﻧﻲ ,وھﻧﺎك اﻧواع أﺧرى ﻣن اﻟﺗﺣﻘﻘﺎت
ﻣﻧﮭﺎ -:
اﻟﺪاﻟﺔ ctype_alnum
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ان اﻟﻨﺺ اﻟﻤﻤﺮر ﻟﮭﺎ ﯾﺘﻜﻮن ﻓﻘﻂ ﻣﻦ ﺣﺮوف ﻛﺒﯿﺮة او ﺻﻐﯿﺮ او
ارﻗﺎم ,وﻻﺣﻆ ﺑﺄﻧﮫ اذا وﺟﺪ ﻓﺎﺻﻠﺔ ) ﻣﺴﺎﻓﺔ ﻓﺎرﻏﺔ ( ﺑﯿﻦ اﻟﻨﺺ ﺳﺘﻌﺘﺒﺮه ﺣﺮف ﺧﺎطﺊ وﺗﻌﯿﺪ
اﻟﻘﯿﻤﺔ falseاﻣﺎ اذا ﻛﺎن ﻛﻞ ﺷﻲء ﺻﺤﯿﺢ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ true
ﻣﺜﺎل/
;"$val = "Welcome34
{ ) ) if( ctype_alnum( $val
;"echo "Yes
{ } else
} ;"echo "No
اﻟﺪاﻟﺔ ctype_alpha
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ان اﻟﻨﺺ اﻟﻤﻤﺮر ﻟﮭﺎ ھﻮ ﺣﺮوف ﻓﻘﻂ ) ﻛﺒﯿﺮة او ﺻﻐﯿﺮ ( واذا ﻛﺎن
ﯾﺤﺘﻮي ﻋﻠﻰ أي ﺷﻲء آﺧﺮ ﻣﺜﻞ ﻓﺎﺻﻠﺔ او رﻣﺰ او رﻗﻢ ﺳﺘﻌﯿﺪ اﻟﻘﯿﻤﺔ falseوﺑﺨﻼف ذﻟﻚ ﺳﺘﻌﯿﺪ
اﻟﻘﯿﻤﺔ true
ﻣﺜﺎل/
;"$val = "Welcome
{ ) ) if( ctype_alpha( $val
;"echo "Yes
{ } else
} ;"echo "No
اﻟﺪاﻟﺔ ctype_lower
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ان اﻟﻨﺺ اﻟﻤﻤﺮر ﻟﮭﺎ ھﻮ ﺣﺮوف ﺻﻐﯿﺮ ﻓﻘﻂ واذا ﻛﺎن ﯾﺤﺘﻮي ﻋﻠﻰ
أي ﺷﻲء آﺧﺮ ﻣﺜﻞ ﺣﺮف ﻛﺒﯿﺮ او ﻓﺎﺻﻠﺔ او رﻣﺰ او رﻗﻢ ﺳﺘﻌﯿﺪ اﻟﻘﯿﻤﺔ falseوﺑﺨﻼف ذﻟﻚ ﺳﺘﻌﯿﺪ
اﻟﻘﯿﻤﺔ true
ﻣﺜﺎل/
;"$val = "Welcome
{ ) ) if( ctype_lower( $val
;"echo "Yes
{ } else
} ;"echo "No
) ( 100 اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (
اﻟﺪاﻟﺔ ctype_upper
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ان اﻟﻨﺺ اﻟﻤﻤﺮر ﻟﮭﺎ ھﻮ ﺣﺮوف ﻛﺒﯿﺮة ﻓﻘﻂ واذا ﻛﺎن ﯾﺤﺘﻮي ﻋﻠﻰ
أي ﺷﻲء آﺧﺮ ﻣﺜﻞ ﺣﺮف ﺻﻐﯿﺮ او ﻓﺎﺻﻠﺔ او رﻣﺰ او رﻗﻢ ﺳﺘﻌﯿﺪ اﻟﻘﯿﻤﺔ falseوﺑﺨﻼف ذﻟﻚ
ﺳﺘﻌﯿﺪ اﻟﻘﯿﻤﺔ true
ﻣﺜﺎل/
;"$val = "WELCOME
{ ) ) if( ctype_upper( $val
;"echo "Yes
{ } else
} ;"echo "No
اﻟﺪاﻟﺔ ctype_digit
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ان اﻟﻨﺺ اﻟﻤﻤﺮر ﻟﮭﺎ ھﻮ أرﻗﺎم ﻓﻘﻂ واذا اﺣﺘﻮى ﻋﻠﻰ أي ﺷﻲء آﺧﺮ
ﺳﺘﻌﯿﺪ اﻟﻘﯿﻤﺔ false
ﻣﺜﺎل/
;"$val = "50273
{ ) ) if( ctype_alpha( $val
;"echo "Yes
{ } else
} ;"echo "No
اﻟﺪاﻟﺔ ctype_cntrl
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺤﻘﻖ إذا ﻛﺎن اﻟﻨﺺ اﻟﻤﻤﺮر ﻟﮭﺎ ﯾﺘﻜﻮن ﻓﻘﻂ ﻣﻦ اﻟﺤﺮوف اﻟﺴﻼﺷﯿﺔ control
ﻣﺜﺎل/
;"$val = "\t\n
{ ) ) if( ctype_cntrl( $val
;"echo "Yes
{ } else
} ;"echo "No
) ( 101 اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (
اﻟﺪاﻟﺔ ctype_punct
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ان اﻟﻨﺺ اﻟﻤﺮر ﻟﮭﺎ ﯾﺘﻜﻮن ﻓﻘﻂ ﻣﻦ اﻟﺮﻣﻮز punctuationأي ﻻ
ﯾﺤﺘﻮي ﻋﻠﻰ ارﻗﺎم وﻻ ﻋﻠﻰ ﺣﺮوف وﻻ ﻋﻠﻰ ﻓﺎﺻﻠﺔ .
ﻣﺜﺎل/
;"){@$val = "#%
{ ) ) if( ctype_punct( $val
;"echo "Yes
{ } else
} ;"echo "No
اﻟﺪاﻟﺔ ctype_space
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ان اﻟﻨﺺ اﻟﻤﻤﺮر ﻟﮭﺎ ﯾﺘﻜﻮن ﻣﻦ اﻟﻤﺴﺎﻓﺎت ﻓﻘﻂ ) ﻧﻘﺼﺪ ﺑﺎﻟﻤﺴﺎﻓﺎت
ھﻮ ﻛﻞ ﻓﺮاغ ﺳﻮاء ﻧﺘﺞ ﻋﻦ اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﻤﺴﻄﺮة او ﺗﺎب او أﻧﺘﺮ ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ ( ﺳﺘﻌﯿﺪ
اﻟﻘﯿﻤﺔ trueاذا ﻛﺎن ﯾﺘﻜﻮن ﻣﻦ اﻟﻤﺴﺎﻓﺎت ﻓﻘﻂ و falseﺑﺨﻼف ذﻟﻚ .
ﻣﺜﺎل/
$val = " \n \t ;"
{ ) ) if( ctype_space( $val
;"echo "Yes
{ } else
} ;"echo "No
ﻻﺣﻆ ﺑﺄن \nﯾﻌﺎدل اﻟﻀﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎح enterواﻟﺮﻣﺰ \tﯾﻌﺎدل اﻟﻀﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎح . tab
اﻟﺪاﻟﺔ ctype_xdigit
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺘﺄﻛﺪ ﻣﻦ ان اﻟﻨﺺ اﻟﻤﻤﺮر ﻟﮭﺎ ھﻮ ﻓﻘﻂ ﯾﺘﻜﻮن ﻣﻦ ﺣﺮوف وارﻗﺎم اﻟﻨﻈﺎم
اﻟﺴﺘﻌﺸﺮي ,ﺳﺘﻌﯿﺪ اﻟﻘﯿﻤﺔ trueاذا ﻛﺎن ﻛﺬﻟﻚ وﺑﺨﻼﻓﺔ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ . false
ﻣﺜﺎل/
;"$val = "52cf
{ ) ) if( ctype_xdigit( $val
;"echo "Yes
{ } else
} ;"echo "No
ﺗﺠﺎھﻞ اﻷﺧﻄﺎء
إن وﺿﻌﺖ ﺧﻄﺄﻣﺘﻌﻤﺪا ً وأردت ﺗﺠﺎھﻞ ھﺬا اﻟﺨﻄﺄ ﻓﯿﻤﻜﻦ ذﻟﻚ ﺑﻮﺿﻊ اﻟﻌﻼﻣﺔ @ ﻗﺒﻞ اﻟﺪاﻟﺔ اﻟﺘﻲ
ﻓﯿﮭﺎ ﺧﻄﺄ ,أﻧﺖ ﺗﻌﻠﻢ إن ﻗﺴﻤﺔ رﻗﻢ ﻋﻠﻰ ﺻﻔﺮ ﯾﻌﺘﺒﺮ ﺧﻄﺄ ﻓﻲ ﻟﻐﺔ , phpﻓﻤﺜﻼ ً ﻟﻮ أردت ﺗﺠﺎھﻞ ھﺬا
اﻟﺨﻄﺄ وﻋﺪم طﺒﺎﻋﺔ اﻟﺨﻄﺄ واﻻﺳﺘﻤﺮار ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ,ﻻﺣﻆ -:
{ )function bob($y
; $y = $y / 0
} ; return $y
; )$x = @bob(44
; echo $x
) ( 103 اﻟﻔﺼﻞ اﻟﺴﺎدس ﻋﺸﺮ ) ( Sessions & Cookies
وھﻲ ﻣﻠﻔﺎت ﯾﺘﻢ ﺗﺨﺰﯾﻨﮭﺎ داﺧﻞ ﺟﮭﺎز اﻟﻤﺴﺘﺨﺪم ﻟﻠﺘﻌﺮف ﻋﻠﯿﮫ ﻋﻨﺪ زﯾﺎرة ﻣﻮﻗﻌﻨﺎ ﻣﺮة أﺧﺮى ,
ﻟﺰراﻋﺔ ﻣﻠﻒ اﻟﻜﻮﻛﯿﺰ ﻧﺤﺘﺎج إﻟﻰ اﻟﺪاﻟﺔ setcookieواﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ -:
; ) ﺗﺎرﯾﺦ ﻧﮭﺎﯾﺔ اﻟﻜﻮﻛﯿﺰ ,ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ,اﺳﻢ اﻟﻤﺘﻐﯿﺮ( setcookie
ﻣﺜﺎل -:
; ) )setcookie ("myname" , "MyValue" , time()+(3600
وﯾﻤﻜﻦ أن ﻧﻀﯿﻒ ﻗﯿﻢ أﺧﺮى ﺑﯿﻦ ﻗﻮﺳﻲ اﻟﺪاﻟﺔ setcookieﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ اﻟﻘﯿﻢ اﻟﺜﻼﺛﺔ اﻟﺴﺎﺑﻘﺔ
وھﺬه اﻟﻘﯿﻢ اﺧﺘﯿﺎرﯾﺔ أي ﯾﻤﻜﻦ ﻋﺪم وﺿﻌﮭﺎ ) ﻧﻔﺼﻞ ﺑﯿﻦ ﻗﯿﻤﺔ وأﺧﺮى ﺑﻔﺎرزة ( وﻣﻦ ھﺬه اﻟﻘﯿﻢ ﻣﺜﻼ
ﯾﻤﻜﻦ إﺿﺎﻓﺔ اﻟﻌﻼﻣﺔ ﺳﻼش " " /ﺑﻌﺪ ﻗﯿﻤﺔ اﻟﻮﻗﺖ وھﺬه اﻟﻌﻼﻣﺔ ﺗﻌﻨﻲ أن ھﺬا اﻟﻜﻮﻛﯿﺰ ) اﻟﻜﻌﻜﺔ (
ﺳﺘﻜﻮن ﻣﺘﺎﺣﺔ ﻟﺠﻤﯿﻊ ﻣﺠﻠﺪات اﻟﻤﻮﻗﻊ ﻟﻜﻦ إذا أﺿﻔﻨﺎ ﻣﻊ ھﺬه اﻟﻌﻼﻣﺔ اﺳﻢ اﻟﻤﺠﻠﺪ ﻣﺜﻼ "
" /exampleھﻨﺎ ﺳﯿﻜﻮن ھﺬا اﻟﻜﻮﻛﯿﺰ ﻣﺘﺎح ﻟﮭﺬا اﻟﻤﺠﻠﺪ ﻓﻘﻂ ,وھﻨﺎ ﻗﯿﻤﺔ أﺧﺮى ﯾﻤﻜﻦ إﺿﺎﻓﺘﮭﺎ
ﺑﻌﺪ اﻟﻘﯿﻤﺔ اﻟﺴﺎﺑﻘﺔ وھﻲ ﺗﺄﺧﺬ ﺑﺸﻜﻞ اﻓﺘﺮاﺿﻲ اﻟﻘﯿﻤﺔ falseﻟﻜﻦ ﯾﻤﻜﻦ أن ﻧﻌﻄﯿﮭﺎ اﻟﻘﯿﻤﺔ true
ﺣﯿﺚ إذا ﻛﺎﻧﺖ ھﺬه اﻟﻘﯿﻤﺔ trueﻓﮭﺬا ﯾﻌﻨﻲ أن اﻟﻜﻌﻜﺔ ﯾﺠﺐ أن ﯾﺘﻢ ﻧﻘﻠﮭﺎ ﺑﻮاﺳﻄﺔ اﺗﺼﺎل آﻣﻦ ﻋﻦ
طﺮﯾﻖ , HTTPSوھﻨﺎك ﻗﯿﻤﺔ أﺧﺮى أﯾﻀﺎ ً ﯾﻤﻜﻦ إﺿﺎﻓﺘﮭﺎ ﺑﻌﺪ اﻟﻘﯿﻤﺔ اﻟﺴﺎﺑﻘﺔ وھﻲ ﺗﺸﯿﺮ إﻟﻰ أن
اﻟﻜﻌﻜﺔ ﻻ ﯾﻤﻜﻦ اﻟﻮﺻﻮل إﻟﯿﮭﺎ إﻻ ﻋﻦ طﺮﯾﻖ ﺑﺮوﺗﻮﻛﻮل HTTPوھﺬا ﯾﻌﻨﻲ أن اﻟﻘﯿﻢ اﻟﻤﺨﺰﻧﺔ ﻓﻲ
اﻟﻜﻌﻜﺔ ﻻ ﯾﻜﻤﻦ اﻟﻮﺻﻮل إﻟﯿﮭﺎ ﻋﻦ طﺮﯾﻖ JavaScriptﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل .
ﻣﻼﺣﻈﺔ /ﻻﯾﺼﺢ أن ﻧﻌﺮف اﻟﻜﻮﻛﯿﺰ ﺑﻌﺪ أي ﻣﺨﺮﺟﺎت ﻟﺬﻟﻚ ﯾﻔﻀﻞ ﻛﺘﺎﺑﺘﮫ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺼﻔﺤﺔ.
) ( 104 اﻟﻔﺼﻞ اﻟﺴﺎدس ﻋﺸﺮ ) ( Sessions & Cookies
اﻟﺪاﻟﺔ $_COOKIE
ھﺬه اﻟﺪاﻟﺔ ھﻲ اﻟﺘﻲ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت اﻟﻜﻌﻜﺎت داﺧﻠﮭﺎ ﻋﻠﻰ ﺷﻜﻞ ﻣﺼﻔﻮﻓﺔ وﻣﻦ ﺧﻼﻟﮭﺎ ﯾﻤﻜﻦ
ﻋﺮض اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ .
ﻣﺜﺎل/
;]'echo $_COOKIE['myname
ﺣﯿﺚ ﺳﯿﺘﻢ طﺒﺎﻋﺔ اﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ mynameوھو اﺳم اﻟﻣﺗﻐﯾر اﻟذي ﺧزﻧﺎ اﻟﻘﯾﻣﺔ
داﺧﻠﮫ ﻣﺳﺑﻘﺎ ً ﻣن ﺧﻼل اﻟداﻟﺔ setcookie
ﻣﺴﺢ اﻟﻜﻮﻛﯿﺰ
ﯾﻤﻜﻨﻨﺎ ﻣﺴﺢ اﻟﻜﻮﻛﯿﺰ ﺑﺄﻛﺜﺮ ﻣﻦ طﺮﯾﻘﺔ ،ﺑﺎﻟﻄﺒﻊ ﻓﺈن اﻟﻤﺴﺘﺨﺪم ﯾﺴﺘﻄﯿﻊ ﻣﺴﺢ اﻟﻜﻮﻛﯿﺰ وﺗﻐﯿﯿﺮ
ﻣﺤﺘﻮﯾﺎﺗﮭﺎ ﺑﻨﻔﺴﮫ وﻟﻜﻦ ﻓﻲ ﺣﺎﻟﺔ ﻣﺎ إذا أردﻧﺎ أن ﻧﺠﻌﻞ اﻟﺴﯿﺮﻓﺮ ﯾﻘﻮم ﺑﻤﺴﺤﮭﺎ ﻓﺈﻧﻨﺎ ﻧﺴﺘﺨﺪم إﺣﺪى
ھﺎﺗﯿﻦ اﻟﻄﺮﯾﻘﺘﯿﻦ
اﻟﺠﻠﺴﺔ ھﻲ آﻟﯿﺔ ﻟﺘﺘﺒﻊ اﻟﻤﺴﺘﺨﺪم وھﻮ ﯾﻘﻮم ﺑﻤﺨﺘﻠﻒ اﻟﻌﻤﻠﯿﺎت داﺧﻞ اﻟﻤﻮﻗﻊ ﺣﯿﺚ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ھﺬه
اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ ﺟﮭﺎز اﻟﺴﯿﺮﻓﺮﻋﻮﺿﺎ ً ﻋﻦ ﺣﻔﻈﮭﺎ ﻋﻠﻰ ﺟﮭﺎز اﻟﻤﺴﺘﺨﺪم ﻛﻤﺎ ھﻮ اﻟﺤﺎل ﻓﻲ اﻟﻜﻮﻛﯿﺰ ,
ﻟﻜﻞ ﻣﺴﺘﺨﺪم idﺧﺎص ﺑﮫ ﯾﺴﻤﻰ session idاو اﺧﺘﺼﺎرا . sid
ﻟﺒﺪأ اﻟﺠﻠﺴﺔ ﯾﺠﺐ ﺗﻀﻤﯿﻦ ;) ( session_startﻓﻲ رأس ﻛﻞ ﺻﻔﺤﺔ ﻧﻮد اﺳﺘﺨﺪام اﻟﺠﻠﺴﺎت ﻓﯿﮭﺎ .
اﻟﺪاﻟﺔ $_SESSION
وھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت اﻟﺠﻠﺴﺎت ﻓﯿﮭﺎ وﻣﻦ ﺧﻼﻟﮭﺎ ﯾﺘﻢ إﺿﺎﻓﺔ ﻣﺘﻐﯿﺮ ﺧﺎص
ﺑﺎﻟﺠﻠﺴﺔ ﻣﺒﺎﺷﺮة ,وﺗﻜﻮن اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ﺑﮭﺬا اﻟﺸﻜﻞ
;$_SESSION[' var '] = value
ﻻﺣظ أن varﯾﻣﺛل اﺳم اﻟﻣﺗﻐﯾر اﻟذي ﺳﺗﺧزن ﻓﯾﮫ اﻟﻘﯾﻣﺔ وﯾﻣﻛن اﺧﺗﯾﺎر أي اﺳم ,وﯾﻣﻛن طﺑﺎﻋﺗﮫ
ﺑﮭذا اﻟﺷﻛل -:
; ]‘ echo $_SESSION[‘ var
اﻟداﻟﺔ unset
اﻟداﻟﺔ ;) (session_destroy
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﺣذف ﻛﺎﻣل اﻟﺟﻠﺳﺔ وذﻟك ﺑﻛﺗﺎﺑﺗﮭﺎ ﻓﻘط ﻣﻊ ﻣﻼﺣظﺔ ﺑﺄﻧﮫ ﯾﺟب أن ﻧﻛﺗب ﻗﺑﻠﮭﺎ
اﻟداﻟﺔ . session_start
ﻣﺛﺎل/
; ) (session_start
; ) (session_destroy
) ( 106 اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ﻋﺸﺮ ) ( MYSQL
وﺗﻌﻤﻞ ھﺬه اﻟﻠﻐﺔ ﻋﻠﻰ إﻧﺸﺎء وﺗﻌﺪﯾﻞ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت واﻟﺠﺪاول ,وأھﻢ أواﻣﺮھﺎ create table ,
. alter , create database
وھﺬه اﻟﻠﻐﺔ ﺗﺨﺘﺺ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺪرﺟﺔ داﺧﻞ اﻟﺠﺪاول ﻣﻦ ﻋﻤﻠﯿﺎت ﺣﺬف وﺗﺤﺮﯾﺮ وإدراج
وﺗﻌﺪﯾﻞ ...اﻟﺦ ,وأھﻢ أواﻣﺮھﺎ . select , replace , delete , insert , update
ﻣﻼﺣﻈﺔ /ﺑﻌﺪ ﻛﺘﺎﺑﺔ أي ﺳﻄﺮ ﻓﻲ MySQLﯾﺠﺐ وﺿﻊ ﻓﺎرزة ﻣﻨﻘﻮطﺔ ) ; ( ﻓﻲ ﻧﮭﺎﯾﺘﮫ ﺛﻢ ﻧﻀﻐﻂ
, enterوﻻﺣﻆ أﻧﮫ إن ﻛﺎن اﻟﻜﻮد ﯾﺘﻜﻮن ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺳﻄﺮ ﯾﺠﺐ أن ﻧﻜﺘﺐ ﺑﺸﻜﻞ أﻓﻘﻲ وﻓﻲ ﻧﮭﺎﯾﺔ
اﻟﺴﻄﺮ ھﻮ ﺳﯿﻨﺰل إﻟﻰ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲﺗﻠﻘﺎﺋﯿﺎ ً وﻻ ﯾﻤﻜﻦ أن ﻧﻨﺰل ﻧﺤﻦ إﻟﻰ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻰ
enterﻷن اﻟﻜﻮد ﺳﯿﻜﻮن ﻣﺠﺰأ وﻟﻦ ﺗﺘﻌﺮف MySQLﻋﻠﯿﮫ .
* ﻋﻨﺪ اﻟﺪﺧﻮل ﻓﻲ MySQLﯾﻤﻜﻦ اﻟﺨﺮوج ﻣﻦ ﺧﻼل ﻛﺘﺎﺑﺔ exitﺛﻢ ) enterﻻﺣﻆ ﻋﺪم وﺿﻊ
ﻓﺎرزة ﻣﻨﻘﻮطﺔ ) ; ( ﺑﻌﺪ . ( exit
* ﻟﻜﻲ ﻧﻈﮭﺮ ﺟﻤﯿﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻟﺪﯾﻨﺎ ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; show databases
ﺳﻮف ﺗﺸﺎھﺪ ﺟﻤﯿﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻟﺪﯾﻚ ,واﻵن ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻣﻌﯿﻨﺔ ﯾﺠﺐ أن
ﻧﺨﺒﺮ MySQLﻋﻨﮭﺎ ,وﻟﻨﻔﺘﺮض إﻧﻨﺎ ﻧﺮﯾﺪ أن ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺴﻤﺎة mysqlﻓﯿﺠﺐ
ﻋﻠﯿﻨﺎ ﻛﺘﺎﺑﺔ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; use mysql
) ( 107 اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ﻋﺸﺮ ) ( MYSQL
واﻵن ﯾﺘﻮﻗﻊ اﻟﺒﺮﻧﺎﻣﺞ إن أي اﺳﺘﻔﺴﺎر ﻗﺎدم ﻟﮫ ﺳﻮف ﯾﻜﻮن ﻣﻮﺟﮫ إﻟﻰ ھﺬه اﻟﻘﺎﻋﺪة ,واﻵن ﻟﻜﻲ
ﻧﺸﺎھﺪ اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ھﺬه ﻧﺤﺘﺎج إﻟﻰ ﻛﺘﺎﺑﺔ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; shoe tables
أو ﻧﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺔ اﻷﻣﺮ ﺑﮭﺬا اﻟﺸﻜﻞ ) إن ﻟﻢ ﻧﻜﻦ ﻗﺪ ﺣﺪدﻧﺎ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﻮف ﻧﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ
ﺳﺎﺑﻘﺎ ً (
; show tables from mysql
ﺳﺘﻼﺣﻆ ظﮭﻮر اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﻓﻲ ھﺬه اﻟﻘﺎﻋﺪة ,وﻟﻜﻲ ﻧﺘﻌﺮف ﻋﻠﻰ اﻟﺤﻘﻮل اﻟﻤﻮﺟﻮدة وﻧﻮﻋﮭﺎ
واﻟﺸﺮوط اﻟﻤﻔﺮوﺿﺔ ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﻮف ﺗﺴﺠﻞ ﺑﮭﺎ ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; show columns from user
أو ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ اﻷﻣﺮ ﺑﮭﺬا اﻟﺸﻜﻞ ﺣﯿﺚ ﻻ ﯾﻮﺟﺪ ﻓﺮق ﺑﯿﻦ اﻷﻣﺮﯾﻦ -:
; describe user
وﻟﻜﻲ ﻧﺘﻌﺮف ﻋﻠﻰ ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺠﺪول اﻟﻤﺴﻤﻰ userﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; select * from user
ﻋﻨﺪ ﺗﻨﻔﯿﺬ ھﺬا اﻷﻣﺮ ﺳﻮف ﺗﻼﺣﻆ إن اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺣﺼﻠﺖ ﻋﻠﯿﮭﺎ ﻛﺜﯿﺮة وﻻ ﯾﻤﻜﻦ ﻗﺮاءﺗﮭﺎ وﻟﻜﻲ
ﻧﺤﺼﻞ ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﻣﺮﺗﺒﺔ وواﺿﺤﺔ ﯾﺠﺐ أن ﻧﻄﻠﺐ ﺑﯿﺎﻧﺎت أﻗﻞﻓﻤﺜﻼ ً ﯾﻤﻜﻨﻨﺎ أن ﻧﻄﻠﺐ ﻓﻘﻂ اﻷﺳﻤﺎء
وﻛﻠﻤﺎت اﻟﺴﺮ اﻟﻤﻮﺟﻮدة ﻓﻲ ھﺬا اﻟﺠﺪول وذﻟﻚ ﺑﻜﺘﺎﺑﺔ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; selec t user , password from user
ﻻﺣﻆ أﻧﻨﺎ ﺣﺼﻠﻨﺎ ﻋﻠﻰ ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ ھﺬﯾﻦ اﻟﺤﻘﻠﯿﻦ ,وﻟﻜﻦ ﻣﺎذا ﻟﻮ ﻛﻨﺎ ﻧﺮﯾﺪ ﻓﻘﻂ
اﻟﺒﯿﺎﻧﺎت اﻟﺨﺎﺻﺔ ﺑﺎﺳﻢ ﻣﺴﺘﺨﺪم واﺣﺪ اﻟﻤﺴﻤﻰ , rootﺳﻮف ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; 'select user , password from user where user = 'root
) ( 108 اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ﻋﺸﺮ ) ( MYSQL
* اﻵن ﺳﻮف ﻧﺘﻌﺮف ﻛﯿﻒ ﯾﻤﻜﻨﻨﺎ أن ﻧﻨﺸﺄ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ,ﻓﻤﺜﻼ ً ﻟﻮ أردﻧﺎ أن ﻧﻨﺸﺊ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت
وﻧﺴﻤﯿﮭﺎ schoolﺳﻨﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; create database school
وﻟﻮ أردﻧﺎ أن ﻧﻤﺴﺢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ھﺬه ) ( schoolﻓﺴﻮف ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; drop database school
ﻣﻼﺣﻈﺔ /ﻓﻲ MySQLﻻ ﻓﺮق ﺑﯿﻦ اﻟﺤﺮوف اﻟﻜﺒﯿﺮة واﻟﺼﻐﯿﺮ ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﺪوال ,ﻣﺜﻼ -:
SELECT = select
ﻣﻼﺣﻈﺔ MySQL /ﻻ ﺗﮭﺘﻢ ﺑﺎﻟﻔﻮاﺻﻞ إن ﻛﺎﻧﺖ ﻓﺎﺻﻠﺔ واﺣﺪة أو أﻛﺜﺮ ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﺪوال وﻟﻜﻦ ﻻ
ﯾﻤﻜﻦ أن ﻻ ﻧﻀﻊ أي ﻓﺎﺻﻠﺔ ﺑﯿﻦ اﻟﻜﻠﻤﺘﯿﻦ .
اﻵن ﻟﻮ أردﻧﺎ أن ﻧﻨﺸﺊ ﺟﺪول اﺳﻤﮫ stdﻓﯿﮫ اﻟﺤﻘﻮل اﻟﺘﺎﻟﯿﺔ ) اﻟﺮﻗﻢ واﻻﺳﻢ واﻟﺪرﺟﺔ ( ,ﺳﻮف ﻧﻜﺘﺐ
اﻟﻜﻮد اﻟﺘﺎﻟﻲ -:
وﻟﻜﻦ ﻓﻲ اﻟﺒﺪاﯾﺔ ﻧﺨﺒﺮ اﻟﺴﯿﺮﻓﺮ ﻋﻠﻰ إﻧﻨﺎ ﻧﺴﺘﺨﺪم ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت schoolﺑﻮاﺳﻄﺔ ھﺬا اﻷﻣﺮ -:
; use school
ﻋﻨﺪ ﺗﻨﻔﯿﺬ اﻟﻜﻮد اﻟﺴﺎﺑﻖ ﺳﻮف ﺗﺸﺎھﺪ رﺳﺎﻟﺔ ﺗﺨﺒﺮك ﺑﻨﺠﺎح اﻟﻌﻤﻠﯿﺔ .
ﻛﻤﺎ ﺗﻌﺮف ﻓﺄن ) ( create tableﺗﺨﺒﺮ اﻟﺴﯿﺮﻓﺮ ﻋﻦ إﻧﺸﺎء ﺟﺪول ﺟﺪﯾﺪ وﻗﺪ ﺳﻤﯿﻨﺎ ھﺬا اﻟﺠﺪول
) (stdﺑﻌﺪ ذﻟﻚ ﻧﻔﺘﺢﻗﻮﺳﺎ ً ﻟﻨﻀﻊ ﺣﻘﻮل اﻟﺠﺪول ﺣﯿﺚ وﺿﻌﻨﺎ naوھﻲ ﺗﻤﺜﻞ اﻟﺮﻗﻢ ) ( number
وﯾﻤﻜﻦ وﺿﻊ أي اﺳﻢ آﺧﺮ ,ﺑﻌﺪ ذﻟﻚ وﺿﻌﻨﺎ intوھﻲ ﺗﻤﺜﻞ اﻟﻘﯿﻢ اﻟﻌﺪدﯾﺔ ﺣﯿﺚ إن وﺿﻌﻨﺎ intﻓﻲ
أي ﺣﻘﻞ ﺳﯿﺪل ذﻟﻚ ﻋﻠﻰ إن ھﺬا اﻟﺤﻘﻞ ﻟﻦ ﯾﺴﺘﻘﺒﻞ إﻻ اﻷﻋﺪاد ,وﺑﻌﺪھﺎ وﺿﻌﻨﺎ ﺑﯿﻦ ﻗﻮﺳﯿﻦ اﻟﺮﻗﻢ ) 5
( ﺣﯿﺚ إن ھﺬا ﯾﺪل ﻋﻠﻰ إن أﻛﺒﺮ ﻗﺪر ﯾﻤﻜﻦ أن ﯾﺤﺘﻮي ھﺬا اﻟﺤﻘﻞ ھﻮ ﺧﻤﺲ أرﻗﺎم وﺑﻌﺪھﺎ وﺿﻌﻨﺎ
) ( not nullوھﺬه ﺗﺸﯿﺮ إﻟﻰ أن ھﺬا اﻟﺤﻘﻞ ﻻ ﯾﻤﻜﻦ أن ﯾﺘﺮكﻓﺎرﻏﺎ ً وﺑﻌﺪھﺎ وﺿﻌﻨﺎ ﻓﺎرزة ﻟﻨﺒﯿﻦ
) ( 109 اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ﻋﺸﺮ ) ( MYSQL
اﻧﺘﮭﺎء ھﺬا اﻟﺤﻘﻞ وﻧﻌﺮف ﺣﻘﻞ ﺟﺪﯾﺪ ,وﻻﺣﻆ إﻧﻨﺎ ھﻨﺎ ﻋﺮﻓﻨﺎ ﺛﻼﺛﺔ ﺣﻘﻮل ﻓﻲ ھﺬا اﻟﺠﺪول .ﺣﯿﺚ إن
) ( varcherﺗﺸﯿﺮ إﻟﻰ أن ﻗﯿﻢ ھﺬا اﻟﺤﻘﻞ ھﻲ ﻓﻘﻂ ﺣﺮوف .
وﻋﻨﺪ ﺗﻨﻔﯿﺬ ذﻟﻚ ﺳﻮف ﺗﺸﺎھﺪ رﺳﺎﻟﺔ ﺗﺨﺒﺮك ﻋﻦ ﻧﺠﺎح اﻟﻌﻤﻠﯿﺔ .
وﻟﻮ أردﻧﺎ أن ﻧﻀﯿﻒ ﺑﯿﺎﻧﺎت ﻓﻲ ﺣﻘﻮل اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﺳﻮف ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ -:
; )insert into std (no,name,gride) value (1,'sager',95
وﻋﻨﺪ ﺗﻨﻔﯿﺬ ذﻟﻚ ﺳﻮف ﺗﺸﺎھﺪ رﺳﺎﻟﺔ ﺗﺨﺒﺮك ﻋﻦ ﻧﺠﺎح اﻟﻌﻤﻠﯿﺔ .
ﻣﻼﺣﻈﺔ /ﻋﻨﺪ ﻛﺘﺎﺑﺔ ﻗﯿﻤﺔ ﻧﺼﯿﺔ ﻧﻀﻌﮭﺎ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ﻣﻔﺮدة ) ' ' ( وأن وﺿﻌﻨﺎ ﻗﯿﻤﺔ
ﻋﺪدﯾﺔ ﻓﻼ داﻋﻲ ﻟﻌﻼﻣﺎت اﻟﺘﻨﺼﯿﺺ .
) ( 110 اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ( SQL
ﻣﻼﺣﻈﺔ ﻣﮭﻤﺔ /ﺳﻨﻔﺘﺮض أﻧﻨﺎ أﻧﺸﺄﻧﺎ ﺟﺪول ﻟﻠﻄﻼب اﺳﻤﮫ stdوﻓﯿﮫ ﺛﻼﺛﺔ ﺣﻘﻮل وأﺳﻤﺎﺋﮭﺎ -:رﻗﻢ
اﻟﻄﺎﻟﺐ noواﺳﻢ اﻟﻄﺎﻟﺐ nameودرﺟﺔ اﻟﻄﺎﻟﺐ . grideوﺳﻨﺠﺮي اﻷﻣﺜﻠﺔ اﻟﻘﺎدﻣﺔ ﻋﻠﻰ ھﺬا
اﻷﺳﺎس .
اﻟﺘﻌﻠﯿﻤﺔ select
ﻣﺜﺎل -:
; select no , name from std
ﻻﺣﻆ ھﻨﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﻮف ﯾﻌﯿﺪ ﻟﻨﺎ ﺟﻤﯿﻊ أرﻗﺎم وأﺳﻤﺎء اﻟﻄﻠﺒﺔ اﻟﻤﻮﺟﻮدﯾﻦ ﻓﻲ ھﺬا اﻟﺠﺪول .
* ﻟﻮ أردﻧﺎ اﺳﺘﺮﺟﺎع ﺟﻤﯿﻊ اﻟﺤﻘﻮل وﺟﻤﯿﻊ اﻟﺴﺠﻼت ﻓﻲ ھﺬا اﻟﺠﺪول ﺳﻨﻜﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ -:
; select * from std
اﻟﺘﻌﻠﯿﻤﺔ where
وﺗﺴﺘﺨﺪم ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﻻﺳﺘﺨﺮاج ﺑﯿﺎﻧﺎت ﻣﺤﺪدة ﻣﻦ اﻟﺠﺪول اﻟﺘﻲ ﺳﯿﻨﻄﺒﻖ ﻋﻠﯿﮭﺎ اﻟﺸﺮط ,واﻟﺼﯿﻐﺔ
اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ -:
; ??? = select col1 , col2 , ... from table1 , table2 , ... where col
) ( 111 اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ( SQL
ﻣﺜﺎل -:ﻟﻮ أردﻧﺎ اﻟﺤﺼﻮل ﻋﻠﻰ رﻗﻢ واﺳﻢ ودرﺟﺔ اﻟﻄﺎﻟﺐ ﻣﻦ ﺟﺪول اﻟﻄﻠﺒﺔ ) ( stdﻟﻠﻄﺎﻟﺐ اﻟﺬي
رﻗﻤﮫ 4ﻓﺴﻮف ﻧﻜﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ -:
; select no , name , gride from std where no = 4
ﺣﯿﺚ ھﻨﺎ أﺧﺒﺮﻧﺎ اﻟﺴﯿﺮﻓﺮ ﺑﺄﻧﻨﺎ ﻧﺮﯾﺪ رﻗﻢ واﺳﻢ ودرﺟﺔ اﻟﻄﺎﻟﺐ ﻋﻨﺪﻣﺎ ﯾﺘﺤﻘﻖ اﻟﺸﺮط وھﻮ أن ﯾﻜﻮن
رﻗﻤﮫ ﯾﺴﺎوي 4وﻟﻜﻦ إن أردﻧﺎ أن ﻧﺒﺤﺚ ﻣﻦ ﺧﻼل اﺳﻢ اﻟﻄﺎﻟﺐ ﻓﺴﻮف ﯾﻜﻮن اﻟﻜﻮد ﻛﺎﻟﺘﺎﻟﻲ -:
; 'select * from std where name = 'Ahmed
* ﻻ ﯾﺸﺘﺮط أن ﺗﻜﻮن اﻟﻤﻘﺎرﻧﺔ ﻓﻘﻂ ﺑﺎﺳﺘﺨﺪام ﻋﻼﻣﺔ اﻟﻤﺴﺎواة ﺣﯿﺚ ﯾﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻌﻼﻣﺎت
اﻷﺧﺮى ﻣﺜﻞ
ﻓﻤﺜﻼ ً ﻟﻤﺸﺎھﺪة اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ درﺟﺎﺗﮭﻢ أﻛﺒﺮ ﻣﻦ 90ﺳﻨﻜﺘﺐ ھﺬا اﻟﻜﻮد -:
; select * from std where gride > 90
ﺗﺘﯿﺢ ﻟﻨﺎ ھﺬه اﻟﻌﻼﻣﺔ اﻟﻤﻘﺎرﻧﺔ ﺑﺠﺰء ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت ,ﻣﺜﻼ ً ﻟﻮ أردﻧﺎ أن ﻧﺘﻌﺮف ﻋﻠﻰ اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ ﺗﺒﺪأ
أﺳﻤﺎﺋﮭﻢ ﺑﺤﺮف sﺳﻨﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; 'select * from std where name like 's%
وﻟﻮ أردﻧﺎ اﻟﺘﻌﺮف ﻋﻠﻰ اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ ﯾﻮﺟﺪ ﻣﻦ ﺿﻤﻦ أﺳﻤﺎﺋﮭﻢ اﻟﺤﺮف ) ) ( sﻓﻲ أي ﻣﻜﺎن ﻣﻦ
اﻻﺳﻢ ( ﺳﯿﻜﻮن اﻟﻜﻮد ﻛﺎﻟﺘﺎﻟﻲ -:
; 'select * from std where name like '%s%
ﻻﺣﻆ ﻟﻮ أردﻧﺎ أن ﻧﺘﻌﺮف ﻋﻠﻰ اﻻﺳﻢ اﻟﺬي ﯾﻨﺘﮭﻲ ﺑﺤﺮف sﻣﺜﻼ ً ,ﻧﻀﻊ ' '%sوﻣﻦ ذﻟﻚ ﻧﺴﺘﻨﺘﺞ أن
اﻟﻌﻼﻣﺔ %ﺗﻤﺜﻞﺣﺮﻓﺎ ً ) أي ﺣﺮف ( .
) ( 112 اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ( SQL
ﯾﻤﻜﻦ ﺗﻌﺮﯾﻒ ھﺬه اﻟﻌﻼﻣﺔ ﻋﻠﻰ إﻧﮭﺎ اﻟﺸﺮط ) ﺗﻮﻓﺮ أﺣﺪ ھﺬه اﻟﻘﯿﻢ ( أي ان اﻟﺸﺮط ﯾﺘﺤﻘﻖ إذا ﻛﺎن أﺣﺪ
ھﺬه اﻟﻘﯿﻢ ﺻﺤﯿﺢ .
ﻣﺜﺎل -:ﻟﻮ أردﻧﺎ درﺟﺎت اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ أرﻗﺎﻣﮭﻢ 1و 3و 4ﻓﺈﻧﻨﺎ ﺳﻮف ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; )select * from std where no in (1,3,4
ﺑﮭﺬه اﻟﻌﻼﻣﺔ ﻧﺨﺒﺮ اﻟﺴﯿﺮﻓﺮ إﻧﻨﺎ ﻧﺤﺘﺎج إﻟﻰ اﻟﻘﯿﻢ اﻟﻮاﻗﻌﺔ ﺑﯿﻦ ھﺎﺗﯿﻦ اﻟﻘﯿﻤﺘﯿﻦ ,وﺗﺴﺘﺨﺪمﻋﺎدﺗﺎ ً ﻓﻲ
اﻟﺒﺤﺚ ﺑﯿﻦ ﺗﺎرﯾﺨﯿﻦ ﻣﻌﯿﻨﯿﻦ .
ﻣﺜﺎل -:ﻋﻨﺪﻣﺎ ﻧﺤﺘﺎج إﻟﻰ اﻟﻄﻠﺒﺔ اﻟﺘﻲ درﺟﺎﺗﮭﻢ ﺑﯿﻦ 80و 90ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; select * from std where gride between 80 and 90
* ﻟﻌﺮض اﻟﻄﻠﺒﺔ اﻟﺘﻲ درﺟﺎﺗﮭﻢ ﻻ ﺗﻜﻮن ﻣﻦ ﺿﻤﻦ اﻟﺪرﺟﺎت اﻟﻤﺤﺼﻮرة ﺑﯿﻦ 80و 90ﻧﻀﻊ not
ﻗﺒﻞ . between
* ﻋﻨﺪ اﺳﺘﺨﺪام اﻟﺘﻮارﯾﺦ ﻧﻀﻊ اﻟﻌﻼﻣﺔ #ﺑﺪل ﻣﻦ ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ ) ' ' ( .
دﻣﺞ اﻟﺸﺮط
ﻧﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺔ أﻛﺜﺮ ﻣﻦ ﺷﺮط ﻋﻠﻰ ﻧﻔﺲ اﻟﺤﻘﻞ أو ﺣﻘﻮل ﻣﺘﻌﺪدة .وﻟﻜﻲ ﻧﻔﻌﻞ ذﻟﻚ ﻧﺴﺘﺨﺪم اﻟﻜﻠﻤﺘﯿﻦ
اﻟﺘﺎﻟﯿﺘﯿﻦ -:
ﻣﺜﺎل -:ﻟﻮ أردﻧﺎ أن ﻧﻌﺮف اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ أرﻗﺎﻣﮭﻢ أﻛﺜﺮ ﻣﻦ 2ودرﺟﺎﺗﮭﻢ أﻛﺒﺮ ﻣﻦ 70ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ
اﻟﺘﺎﻟﯿﺔ -:
; select * from std where no > 2 and gride > 70
ﻧﺤﺘﺎج ﻓﻲ ﻛﺜﯿﺮ ﻣﻦ اﻷﺣﯿﺎن إﻟﻰ ﺗﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت ﺣﺴﺐ ﺻﻒ ﻣﻌﯿﻦ ,وﻟﺬﻟﻚ ﻧﺴﺘﺨﺪم ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ,
وﺗﺄﺗﻲ ﻣﻊ ھﺬه اﻟﺘﻌﻠﯿﻤﺔ اﻟﻜﻠﻤﺘﺎن -:
ﻣﺜﺎل -:ﻟﻠﺤﺼﻮل ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺐ ﺣﺴﺐ اﻟﺪرﺟﺔ ﻣﻦ اﻷﺻﻐﺮ إﻟﻰ اﻷﻛﺒﺮ ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ ﻛﺎﻟﺘﺎﻟﻲ
-:
; select * from std order by gride asc
وإن أردﻧﺎ اﻟﺘﺮﺗﯿﺐ ﺑﺎﻟﻌﻜﺲ ﻧﻀﻊ ) ( descﻣﻜﺎن ) , ( ascوإ1ا أردﻧﺎ ﺗﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت ﺑﺤﺴﺐ
اﻻﺳﻢ واﻟﺪرﺟﺔﻣﺜﻼ ً ,ﺳﻮف ﻧﻜﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ -:
; select name , gride from std order by name , gride
اﻟﺘﻌﻠﯿﻤﺔ limit
وھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﺗﺤﺪد ﻋﺪد اﻟﺴﺠﻼت اﻷﻗﺼﻰ اﻟﺬي ﻧﺤﺼﻞ ﻋﻠﯿﮫ ,ﺣﯿﺚﻣﺜﻼ ً ﻟﻮ أردﻧﺎ اﺳﺘﺮﺟﺎع أول
ﺛﻼث ﺳﺠﻼت ﻓﻘﻂ ﺳﻨﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; select * from std limit 3
ﻣﺜﺎل -:ﻟﻮ أردﻧﺎ أن ﻧﺤﻀﺮ اﻟﺴﺠﻠﯿﻦ اﻟﺮاﺑﻊ واﻟﺨﺎﻣﺲ ,ﺳﻮف ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; select * from std 3 , 2
ﺣﯿﺚ إن اﻟﺮﻗﻢ اﻷول ﯾﻤﺜﻞ اﻟﺮﻗﻢ اﻟﺬي ﻧﺒﺪأ اﻟﻌﺪ ﺑﻌﺪه واﻟﺮﻗﻢ اﻟﺜﺎﻧﻲ ﯾﻤﺜﻞ ﻋﺪد اﻟﺴﺠﻼت .
ﻧﺴﺘﺨﺪم ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﻋﻨﺪﻣﺎ ﻧﺤﺘﺎج إﻟﻰ إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت إﻟﻰ اﻟﺠﺪول .
ﻣﺜﺎل -:ﻟﻮ أردﻧﺎ إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت طﺎﻟﺐ ﺟﺪﯾﺪ اﺳﻤﮫ اﻷول yosefودرﺟﺘﮫ 92ورﻗﻤﮫ , 6ﻧﺤﺘﺎج إﻟﻰ
ﻛﺘﺎﺑﺔ ھﺬه اﻟﺠﻤﻠﺔ -:
) ( 114 اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ( SQL
وﻋﻨﺪ ﺗﻨﻔﯿﺬ ھﺬه اﻟﺠﻤﻠﺔ ﺗﻈﮭﺮ رﺳﺎﻟﺔ ﺗﺆﻛﺪ أﻧﮫ ﺗﻢ إﺿﺎﻓﺔ ﺳﺠﻞ واﺣﺪ إﻟﻰ اﻟﺠﺪول ,أﯾﻀﺎ ً ﻧﺴﺘﻄﯿﻊ
ﻛﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻟﺴﺎﺑﻘﺔ ﺑﮭﺬا اﻟﺸﻜﻞ -:
; )insert into std values (6,'yosef',92
* وﻛذﻟك ﯾﻣﻛن اﺿﺎﻓﺔ اﻟﺑﯾﺎﻧﺎت إﻟﻰ اﻟﺣﻘول ﺑﮭذه اﻟطرﯾﻘﺔ ,ﻻﺣظ -:
; Insert into std set no=6, name=’yosef’,gride=92
اﻟﺘﻌﻠﯿﻤﺔ update
ﻣﺜﺎل -:ﻟﻮ إن اﻟﻄﺎﻟﺐ رﻗﻢ 3أوﺿﺢ إن اﺳﻤﮫ ھﻮ Aliوﻟﯿﺲ Ahmedوطﻠﺐ ﻣﻨﺎ ﺗﻌﺪﯾﻞ ذﻟﻚ ,
ﺳﻮف ﻧﺴﺘﺨﺪم اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; update std set name = 'Ali' where no = 3
ﻻﺣﻆ ھﻨﺎ ﺣﯿﺚ اﺳﺘﺨﺪﻣﻨﺎ اﻟﺘﻌﻠﯿﻤﺔ whereوإن ﻟﻢ ﻧﺴﺘﺨﺪﻣﮭﺎ ﻓﺴﻮف ﺗﺤﻮل ﺟﻤﯿﻊ اﻷﺳﻤﺎء
اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺠﺪول إﻟﻰ , Aliوﻻﺣﻆأﯾﻀﺎ ً إن أردﻧﺎ ﻣﺜﻼ ً ﺗﻐﯿﯿﺮ اﻻﺳﻢ واﻟﺪرﺟﺔﻣﻌﺎ ً ,ﺳﻨﻜﺘﺐ
اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; update std set name = 'Ali' , gride = 90 where no = 3
اﻟﺘﻌﻠﯿﻤﺔ delete
ﻣﺜﺎل -:ﻟﻮ أردﻧﺎ ﺣﺬف ﺳﺠﻞ اﻟﻄﺎﻟﺐ رﻗﻢ 4ﻣﻦ اﻟﺠﺪول ,ﺳﻨﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; delete from std where no = 4
وﻋﻨﺪ ﺗﻨﻔﯿﺬ ھﺬه اﻟﺠﻤﻠﺔ ﺳﻮف ﻧﺤﺼﻞ ﻋﻠﻰ رﺳﺎﻟﺔ ﺗﺒﯿﻦ إن اﻟﻌﻤﻠﯿﺔ ﺗﻤﺖ ﺑﻨﺠﺎح ,ﻻﺣﻆ ھﻨﺎ ﻓﻲ ھﺬا
اﻟﻤﺜﺎل وﺿﻌﻨﺎ اﻟﺘﻌﻠﯿﻤﺔ whereوإن ﻟﻢ ﻧﻀﻌﮭﺎ ﻓﺴﻮف ﺗﺤﺬف ﺟﻤﯿﻊ اﻟﺴﺠﻼت .
) ( 115 اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ( SQL
اﻟﺘﻌﻠﯿﻤﺔ count
ﻣﺜﺎل -:ﻟﺘﺘﻌﺮف ﻋﻠﻰ ﻋﺪد اﻟﻄﻠﺒﺔ اﻟﻤﻮﺟﻮدﯾﻦ ﻟﺪﯾﻨﺎ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; select count(*) from std
اﻟﺘﻌﻠﯿﻤﺔ max
ﻣﺜﺎل -:ﻟﻠﺤﺼﻮل ﻋﻠﻰ أﻛﺒﺮ درﺟﺔ ﺣﺼﻞ ﻋﻠﯿﮭﺎ طﺎﻟﺐ ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; select max (gride) frome std
اﻟﺘﻌﻠﯿﻤﺔ min
ﻣﺜﺎل -:ﻟﻠﺤﺼﻮل ﻋﻠﻰ أﻛﺒﺮ درﺟﺔ ﺣﺼﻞ ﻋﻠﯿﮭﺎ طﺎﻟﺐ ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; select min (gride) from std
اﻟﺘﻌﻠﯿﻤﺔ avg
ﻣﺜﺎل -:ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﺪل اﻟﺪرﺟﺎت اﻟﺘﻲ ﺣﺼﻞ ﻋﻠﯿﮭﺎ طﺎﻟﺐ ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; select avg (gride) from std
) ( 116 اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ( SQL
اﻟﺘﻌﻠﯿﻤﺔ sum
ﻣﺜﺎل -:ﻟﻨﺘﻌﺮف ﻋﻠﻰ ﻣﺠﻤﻮع اﻟﺪرﺟﺎت اﻟﺘﻲ ﺣﺼﻞ ﻋﻠﯿﮭﺎ اﻟﻄﻠﺒﺔ ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ -:
; select sum (gride) from std
اﻟﺘﻌﻠﯿﻤﺔ distinct
ﻣﺜﺎل -:ﻟﻌﺮض أﺳﻤﺎء اﻟﻄﻼب وﻟﻜﻦ ﺑﺪون أن ﻧﻌﺮض اﻷﺳﻤﺎء اﻟﻤﻜﺮرة ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ -:
; select distinct name from std
ﺗﺳﺗﺧدم ھذه اﻟﺗﻌﻠﯾﻣﺔ ﻟرﺑط ﺟدوﻟﯾن ﻣﻊ ﺑﻌﺿﮭﻣﺎ اﻟﺑﻌض أي ﺳﯾﻣﻛﻧﻧﺎ أن ﻧﺳﺗﺧرج اﻟﺑﯾﺎﻧﺎت ﻣن ﻛﻼ
اﻟﺟدوﻟﯾن ﻓﻲ ﻧﻔس اﻟوﻗت وﻛﺄﻧﮭﻣﺎ ﺟدول واﺣد ﻣﻊ ﻣﻼﺣظﺔ أن اﻟﺟدوﻟﯾن ﻟن ﯾﺗم دﻣﺟﮭﻣﺎ ﻓﻲ
ﺟدول واﺣد ﻓﻲ ﻗﺎﻋدة اﻟﺑﯾﺎﻧﺎت ﻟﻛن ﻟﻐﺔ اﻟـ phpﺳﺗﺗﻌﺎﻣل ﻣﻌﮭم ﻛﺟدول واﺣد ,وﻻﺣظ أن
اﻟﺟدوﻟﯾن ﯾﺟب أن ﯾﺣﺗوي ﻛل ﻣﻧﮭم ﻋﻠﻰ ﺣﻘل ﯾﻛون ھذا اﻟﺣﻘل ﻣﺿﺎف ﻓﻲ ﻛﻠﯾﮭﻣﺎ .
ﻣﺛﺎل /
;)“ mysql_query(“ select * from std inner join std2 on std.id=std2.id
ﺣث ھﻧﺎ اﻟﺣﻘل اﻟﻣﺷﺗرك ﺑﯾن اﻟﺟدوﻟﯾن ھو , idوﻻﺣظ ﺑﺄﻧﮫ ﯾﻣﻛن أن ﻧﻛﺗب ﺑﻌد ھذه اﻟﺟﻣﻠﺔ أي
ﺗﻌﻠﯾﻣﺔ ﻧﺷﺎء ﻣﺛل اﻟﺗﻌﻠﯾﻣﺔ whereواﻟﺗﻌﻠﯾﻣﺔ order byوﻏﯾرھﺎ ﻣن اﻟﺗﻌﻠﯾﻣﺎت ﺑﺷﻛل أﻋﺗﯾﺎدي .
ﺗﺳﺗﺧدم ھذه اﻟﺗﻌﻠﯾﻣﺔ ﻹﻓراغ ﻣﺣﺗوى ﺟدول أي ﺗﺟﻌﻠﮫ ﻓﺎرغ ﺗﻣﺎﻣﺎ ً ﻣن أي ﺑﯾﺎﻧﺎت ﺗﻣت إﺿﺎﻓﺗﮭﺎ
إﻟﯾﮫ أي وﻛﺄﻧﮫ ﻗد ﺗم إﻧﺷﺎﺋﺔ ﻟﻠﺗو أي ﺳﺗﺑﻘﻰ ﻓﻘط أﺳﻣﺎء ﻋﻧﺎوﯾن اﻟﺣﻘول اﻷﺻﻠﯾﺔ .
) ( 117 اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ( SQL
ﻣﺛﺎل/
* ﻟﺮﺑﻂ ﺻﻔﺤﺔ phpﺑﻘﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻧﺤﺘﺎج إﻟﻰ ﺧﻄﻮﺗﯿﻦ اﻟﺨﻄﻮة اﻷوﻟﻰ ﻣﻦ ﺧﻼل إﺟﺮاء اﻻﺗﺼﺎل
ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ اﻟﺘﺎﻟﯿﺔ -:
اﻟﺪاﻟﺔ mysql_connect
ھﺬه اﻟﺪاﻟﺔ ﺗﺴﺘﺨﺪم ﻷﺟﺮاء اﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وھﻲ ﺗﺤﺘﺎج إﻟﻰ ﺛﻼﺛﺔ ﻣﺘﻐﯿﺮات -:
وﺗﻌﻮد ھﺬه اﻟﺪاﻟﺔ ﺑﻤﻘﺒﺾ اﻻﺗﺼﺎل ﻓﻲ ﺣﺎل ﻧﺠﺎح اﻻﺗﺼﺎل أو رﺳﺎﻟﺔ ﺗﻌﺒﺮ ﻋﻦ اﻟﺨﻄﺄ ﻓﻲ ﺣﺎل ﻓﺸﻞ
اﻻﺗﺼﺎل .
;)mysql_close ($link
>?
ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﻋﻨﺪ ﺣﺪوث اﻻﺗﺼﺎل ﺳﻮف ﯾﺘﻢ طﺒﺎﻋﺔ اﻟﻌﺒﺎرة ﺗﻢ اﻻﺗﺼﺎل ,وﻟﻜﻦ ﻋﻨﺪ ﻓﺸﻞ اﻻﺗﺼﺎل
ﺳﺘﻄﺒﻊ اﻟﻌﺒﺎرة ﻓﺸﻞ اﻻﺗﺼﺎل وﺗﻼﺣﻆ ﺑﺄﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺈﻧﮭﺎء اﻻﺗﺼﺎل ﺑﻮاﺳﻄﺔ اﻟﺪاﻟﺔ . mysql_close
ﻣﻼﺣظﺔ /ﯾﻣﻛن اﺟراء اﻷﺗﺻﺎل ﻣن ﺧﻼل اﻟداﻟﺔ mysql_pconnectوھﻲ ﺗﻛﺗب ﺑﻧﻔس ظرﯾﻘﺔ
اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ واﻟﻔرق ﺑﯾﻧﮭﻣﺎ ھو أن اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ ﯾﺟب أﻏﻼﻗﮭﺎ ﺑواﺳطﺔ اﻟداﻟﺔ mysql_close
ﺑﻌد اﻷﻧﺗﮭﺎء ﺗﻣﺎﻣﺎ ً ﻣن اﻟﻛود أﻣﺎ ھذه اﻟداﻟﺔ ﻓﻼ ﺗﺣﺗﺎج إﻟﻰ اﻷﻏﻼق ﻟﻛﻧﮭﺎ ﺳوف ﺗﻌﻣل أﺗﺻﺎل ﺟدﯾد
) ( 119 اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال phpﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ( MYSQL
ﻟﻛل ﻣﺳﺗﺧدم ﯾدﺧل إﻟﻰ اﻟﻣوﻗﻊ وھذا ﺳﯾﻌﻣل ﺿﻐط ﻋﻠﻰ اﻟﺧﺎدم ﻟذا ﯾﻔﺿل اﺳﺗﺧدام اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ
. mysql_connect
ﻧﺤﺪد ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﻮد اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ اﻟﺘﺎﻟﯿﺔ -:
اﻟﺪاﻟﺔ mysql_select_db
ﺗﺤﺪد ھﺬه اﻟﺪاﻟﺔ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻌﮭﺎﺣﺎﻟﯿﺎ ً ,وﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ ﻣﺘﻐﯿﺮﯾﻦ ھﻤﺎ -:
وﺗﻌﻮد ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻟﻘﯿﻤﺔ trueﻓﻲ ﺣﺎل ﻧﺠﺎﺣﮭﺎ ,أو falseﻓﻲ ﺣﺎل ﺣﺪوث ﺧﻄﺄ .
ﻣﺜﺎل -:
<?php
)" " $link = mysql_connect ("localhost" , "root" ,
; )"ﻓﺸﻞ اﻻﺗﺼﺎل"( or die
; )"ﺗﻢ اﻻﺗﺼﺎل"( print
; )mysql_select_db ("school" , $link
>?
وﺑﺬﻟﻚ ﻧﺴﺘﻄﯿﻊ اﻟﺤﺼﻮل أو اﻟﺘﺤﻜﻢ ﺑﺠﻤﯿﻊ اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﻟﻜﻲ ﻧﻔﻌﻞ ذﻟﻚ ﺗﻮﻓﺮ
ﻟﻨﺎ phpﻋﺪة دوال ﺳﻮف ﻧﺸﺮﺣﮭﺎ ﻓﯿﻤﺎ ﯾﻠﻲ .
اﻟﺪاﻟﺔ mysql_query
ﺗﻨﻔﺬ ھﺬه اﻟﺪاﻟﺔ ﺟﻤﻞ اﻻﺳﺘﻌﻼم ﻋﻠﻰ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وﺗﻌﻮد ﻟﻨﺎ ﺑﺎﻟﻘﯿﻢ اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ اﻻﺳﺘﻌﻼم
ﻋﻠﻰ ﺷﻜﻞ ﻣﻘﺒﺾ ﻟﻌﻤﻠﯿﺔ اﻻﺳﺘﻌﻼم .
) ( 120 اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال phpﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ( MYSQL
ﻣﺜﺎل -:
; )"$result = mysql_query ("select * from std
ﺗﻼﺣﻆ أن اﻟﻘﯿﻢ اﻟﻤﺴﺘﺨﺮﺟﺔ وﺿﻌﺖ ﻓﻲ اﻟﻤﺘﻐﯿﺮ resultوﻟﻜﻲ ﻧﺴﺘﻔﯿﺪ ﻣﻦ ھﺬه اﻟﻘﯿﻢ ﻧﺴﺘﺨﺪم إﺣﺪا
ھﺬه اﻟﺪوال اﻟﻤﻮﺿﺤﺔ ﻓﻲ اﻷﺳﻔﻞ -:
-1اﻟﺪاﻟﺔ mysql_fetch_row
ﺗﻀﻊ ھﺬه اﻟﺪاﻟﺔ اﻟﻘﯿﻢ اﻟﻤﺴﺘﺨﺮﺟﺔ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﺑﺴﮭﻮﻟﺔ وﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﻣﻘﺒﺾ
ﻋﻤﻠﯿﺔ اﻻﺳﺘﻌﻼم .
ﻣﺜﺎل -:
; )$row = mysql_fetch_row ($result
اﻵن أﺻﺒﺢ ﻟﺪﯾﻨﺎ ﻣﺼﻔﻮﻓﺔ ﻧﺴﺘﻄﯿﻊ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﺑﻜﻞ ﺳﮭﻮﻟﺔ ﻻﺣظ -:
;]’$x = $row[‘id_cat
* ﯾﻤﻜﻦ وﺿﻊ arrayﻣﻜﺎن rowﺣﯿﺚ إن rowﺳﯿﺨﺮج اﻟﺼﻒ ﻓﻘﻂ أﻣﺎ arrayﻓﺴﻮف ﺗﺴﺘﺨﺮج
اﻟﻤﺼﻔﻮﻓﺔ ,أي ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ﺑﮭﺬا اﻟﺸﻜﻞ ) . ( mysql_fetch_array
-2اﻟﺪاﻟﺔ mysql_fetch_assoc
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻻﺳﺗﺧراج اﻟﺑﯾﺎﻧﺎت ﻣن اﻟﺟدول ﻓﻲ ﻗﺎﻋدة اﻟﺑﯾﺎﻧﺎت ﻋﻠﻰ ﺷﻛل ﻣﺻﻔوﻓﺔ وھﻲ
ﻧﻔس اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ ﺗﻣﺎﻣﺎ ً .
ﻣﺛﺎل/
; )$row = mysql_fetch_assoc ($result
;]’$x = $row[‘id_cat
-3اﻟﺪاﻟﺔ mysql_fetch_object
ﺗﺴﺘﺨﺮج ھﺬه اﻟﺪاﻟﺔ اﻟﻘﯿﻢ ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﯾﺘﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻛﻜﺎﺋﻦ وﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﻣﻘﺒﺾ
ﻋﻤﻠﯿﺔ اﻻﺳﺘﻌﻼم ,وھﻲ ﻣﺸﺎﺑﮭﮫ ﻟﻠﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ,وﻻﺣظ أﻧﮫ ﯾﺗم اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﻘﯾم اﻟﻣﺳﺗﺧرﺟﺔ ﺑﮭذا
اﻟﺷﻛل -:
ﻣﺜﺎل -:
; )$row = mysql_fetch_object($result
اﻟداﻟﺔ mysql_free_result
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﺑﻌد اﻻﻧﺗﮭﺎء ﻣن ﻋﻣﻠﯾﺔ اﻻﺳﺗﻌﻼم ﺑواﺳطﺔ اﻟداﻟﺔ mysql_queryﺣﯾث
أﻧﮭﺎ ﺗﻌﺗﺑر ﺑﻣﺛﺎﺑﺔ إﻏﻼق ﻟﻸﺳﺗﻌﻼم وھﻲ ﻣﮭﻣﺔ ﻟﻛﻲ ﻻ ﯾﻛون ھﻧﺎك ﺿﻐط ﻋﻠﻰ اﻟﺧﺎدم
ﺧﺻوﺻﺎ ً إذا ﻛﺎﻧت ھﻧﺎك ﺑﯾﺎﻧﺎت ﻛﺛﯾرة ,وھﻲ ﻋﺎدﺗﺎ ً ﺗﺳﺗﺧدم إذا ﻛﻧﺎ ﻗد اﺳﺗﺧدﻣﻧﺎ select
وﺑﻌدھﺎ ﺣﻠﻘﺔ ﺗﻛرار .
ﻣﺛﺎل/
; )"$result = mysql_query ("select * from std
; )$row = mysql_fetch_object($result
اﻟﺪاﻟﺔ mysql_num_rows
ﺗﻌﻮد ﻟﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﺑﻌﺪد اﻟﺴﺠﻼت اﻟﺘﻲ ﺣﺼﻠﻨﺎ ﻋﻠﯿﮭﺎ ﺑﻌﺪ اﺳﺘﺨﺪام اﻟﺘﻌﻠﯿﻤﺔ selectﻓﻘﻂ ,وﺗﺤﺘﺎج
ھﺬه اﻟﺪاﻟﺔ إﻟﻰ ﻣﺘﻐﯿﺮ واﺣﺪ ﻓﻘﻂ وھﻮ ﻣﻘﺒﺾ اﻻﺗﺼﺎل .
* وﯾﻤﻜﻦ وﺿﻊ fieldsﻣﻜﺎن rowsﻟﺘﺄﺗﻲ ﻟﻨﺎ ﺑﻌﺪد اﻟﻔﯿﻼت وﺗﻜﻮن اﻟﺪاﻟﺔ ﺑﮭﺬا اﻟﺸﻜﻞ
) . ( mysql_num_fields
) ( 122 اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال phpﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ( MYSQL
ﻣﺛﺎل/
; )"$result = mysql_query ("select * from std
;)$x = mysql_num_rows($result
; echo $x
اﻟداﻟﺔ mysqli_num_rows
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺤﺴﺎب ﻋﺪد اﻟﺤﻘﻮل اﻟﺘﻲ ﺗﻢ ﺟﻠﺒﮭﺎ ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت .
ﻣﺜﺎل -:
; )"$result = mysql_query ("select * from std
;)$x = mysqli_num_rows($result
;echo $x
اﻟﺪاﻟﺔ mysql_affacted_rows
ﺗﻌﻮد ﻟﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﺑﻌﺪد اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺄﺛﺮت ﻣﻦ أﺣﺪ اﻟﻌﻤﻠﯿﺎت ) ( delete , insert , update
وﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ ﻣﺘﻐﯿﺮ واﺣﺪ وھﻮ ﻣﻘﺒﺾ اﻻﺗﺼﺎل .
ﻣﻼﺣﻈﺔ /ﻋﻨﺪ اﺳﺘﺨﺪام اﻟﺘﻌﻠﯿﻤﺔ deleteﺑﺪون اﺳﺘﺨﺪام whereﻓﺴﻮف ﯾﺘﻢ ﺣﺬف ﺟﻤﯿﻊ اﻟﺴﺠﻼت
ﻓﻲ اﻟﺠﺪول وﻟﻜﻦ اﻟﺪاﻟﺔ ﺳﻮف ﺗﻌﯿﺪ ﻟﻨﺎ اﻟﻘﯿﻤﺔ ﺻﻔﺮ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ .
اﻟﺪاﻟﺔ mysql_craete_db
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻹﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة وﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ اﺳﻢ ھﺬه اﻟﻘﺎﻋﺪة ,وﺗﻌﻮد ﺑﺎﻟﻘﯿﻤﺔ
trueﻓﻲ ﺣﺎل ﻧﺠﺎح اﻟﻌﻤﻠﯿﺔ .
) ( 123 اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال phpﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ( MYSQL
ﻣﺜﺎل -:
<?php
)" " $link = mysql_connect ("localhost" , "root" ,
; )"ﻓﺸﻞ اﻟﺘﺼﺎل"( or die
{ ) )"if (mysql_create_db ("school
} ; )"ﺗﻢ إﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت"( print
} ; )"ﺣﺪث ﺧﻄﺄ"( else { print
>?
اﻟﺪاﻟﺔ mysql_drop_db
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺤﺬف ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﺟﻤﯿﻊ اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﻓﯿﮭﺎ وﺗﺤﺘﺎج ﻓﻘﻂ إﻟﻰ اﺳﻢ ﻗﺎﻋﺪة
اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮب ﺣﺬﻓﮭﺎ ,وﺗﻌﻮد ﺑﺎﻟﻘﯿﻤﺔ trueﻓﻲ ﺣﺎل ﻧﺠﺎح اﻟﻌﻤﻠﯿﺔ .
ﻣﺜﺎل -:
<?php
)" " $link = mysql_connect ("localhost" , "root" ,
; )"ﻓﺸﻞ اﻟﺘﺼﺎل"( or die
{ ) )"if (mysql_drop_db ("school
} ; )"ﺗﻢ إﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت"( print
} ; )"ﺣﺪث ﺧﻄﺄ"( else { print
>?
اﻟﺪاﻟﺔ mysql_list_dbs
ﺑﻮاﺳﻄﺔ ھﺬه اﻟﺪاﻟﺔ ﻧﺴﺘﻄﯿﻊ ﻣﻌﺮﻓﺔ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻮﻓﺮة ﻟﺪﯾﻨﺎ وﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﻣﻘﺒﺾ اﻻﺗﺼﺎل ,
ﻻﺣﻆ ھﺬا اﻟﻤﺜﺎل -:
; )$result = mysql_list_dbs ($link
ﻧﻼﺣﻆ إن اﻟﻘﯿﻢ اﻟﻤﺴﺘﺨﺮﺟﺔ وﺿﻌﺖ ﻓﻲ اﻟﻤﺘﻐﯿﺮ resultوﻟﻜﻲ ﻧﺴﺘﻔﯿﺪ ﻣﻦ ھﺬه اﻟﻘﯿﻢ ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ
mysql_fetch_rowاﻟﺘﻲ ﺗﻌﺮﻓﻨﺎ ﻋﻠﯿﮭﺎﻣﺴﺒﻘﺎ ً .
) ( 124 اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال phpﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ( MYSQL
اﻟﺪاﻟﺔ mysql_list_tables
ﺑﻮاﺳﻄﺔ ھﺬه اﻟﺪاﻟﺔ ﻧﺴﺘﻄﯿﻊ ﻣﻌﺮﻓﺔ اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ
ﻣﺘﻐﯿﺮ واﺣﺪ ھﻮ اﺳﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت .
ﻣﺜﺎل -:
; )"$result = mysql_list_tables ("school
ﻧﻼﺣﻆ ﺑﺄن اﻟﻘﯿﻢ اﻟﻤﺴﺘﺨﺮﺟﺔ وﺿﻌﺖ ﻓﻲ اﻟﻤﺘﻐﯿﺮ resultوﻟﻜﻲ ﻧﺴﺘﻔﯿﺪ ﻣﻦ ھﺬه اﻟﻘﯿﻢ ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ
mysql_fetch_rowاﻟﺘﻲ ﺗﻌﺮﻓﻨﺎ ﻋﻠﯿﮭﺎﻣﺴﺒﻘﺎ ً .
اﻟﺪاﻟﺔ mysql_list_fields
ﺑﻮاﺳﻄﺔ ھﺬه اﻟﺪاﻟﺔ ﻧﺴﺘﻄﯿﻊ ﻣﻌﺮﻓﺔ اﻟﺤﻘﻮل اﻟﻤﻮﺟﻮدة ﻓﻲ ﺟﺪول ﻣﻌﯿﻦ وﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ
ﻣﺘﻐﯿﺮﯾﻦ ھﻤﺎ -:
وﺳﻮف ﺗﻌﻮد ھﺬه اﻟﺪاﻟﺔ ﺑﻤﻘﺒﺾ ﻟﻠﻌﻤﻠﯿﺔ ﻟﻨﺴﺘﺨﺪﻣﮫ ﻓﻲ ﻣﻌﺮﻓﺔ ﻣﻌﻠﻮﻣﺎت ﺣﻘﻮل اﻟﺠﺪول ﺳﻮاء اﻻﺳﻢ
أو اﻟﻨﻮع أو اﻟﻄﻮل أو اﻟﺸﺮط ,ﺑﻮاﺳﻄﺔ اﻟﺪوال اﻟﺘﺎﻟﯿﺔ -:
اﻟداﻟﺔ )(mysqli_connect_error
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻌﺮض اﻟﺨﻄﺄ إذا ﻟﻢ ﯾﺘﻢ اﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﻨﺠﺎح .
ﻣﺜﺎل/
;))(die(mysqli_connect_error
) ( 125 اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال phpﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ( MYSQL
اﻟﺪاﻟﺔ ) (mysql_error
ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻌﺮض اﻟﺨﻄﺄ ﺑﺎﻟﺘﻔﺼﯿﻞ ﻋﻨﺪ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت .
ﻣﺜﺎل/
; ) ) (die(mysql _error
mysql_errno
ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﺗﻌﯾد آﺧر ﺧطﺄ ﺣﺻل ﻓﻲ ﻋﻣﻠﯾﺔ اﻟﺗﻌﺎﻣل ﻣﻊ ﻗﺎﻋدة اﻟﺑﯾﺎﻧﺎت .
; ) ﻣﻘﺑض اﻷﺗﺻﺎل (mysql _errno
) ( 126 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
اﻟﻔﺼﻞ اﻟﻌﺸﺮون
اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ) ( OOP
ان اﻟﻔﺎﺋﺪة ﻣﻦ اﻟﺒﺮﻣﺠﺔ ﻏﺮﺿﺔ ) ﻛﺎﺋﻨﯿﺔ ( اﻟﺘﻮﺟﺔ ھﻮ اﺧﺘﺼﺎر اﻟﻮﻗﺖ ﻋﻠﻰ اﻟﻤﺒﺮج ﻓﺪﻻ ً ﻣﻦ ان
ﯾﻜﺘﺐ ﻛﻮد ﺑﺮﻣﺠﻲ ﻣﻦ اﻟﺼﻔﺮ ﻓﻲ ﻛﻞ ﻣﺮة ﯾﺮﯾﺪ ﻓﯿﮭﺎ اﻧﺸﺎء ﺑﺮﻧﺎﻣﺞ ﯾﻤﻜﻨﮫ ﻛﺘﺎﺑﺔ ﻣﺠﻤﻮﻋﺔ ﻣﻦ
اﻟﻜﻼﺳﺎت واﻟﺘﻲ ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ اﻛﺜﺮ ﻣﻦ ﺑﺮﻧﺎﻣﺞ ) اﻟﺒﺮاﻣﺞ اﻟﻤﺘﺸﺎﺑﮭﮫ ( وﻣﻦ ﺛﻢ ﻋﻠﯿﮫ ﻓﻘﻂ
اﺳﺘﺪﻋﺎء ھﺬه اﻟﻜﻼﺳﺎت ﻓﻲ ﺑﺮﻧﺎﻣﺠﮫ .
وﻻﻧﺸﺎء ﻛﻼس ﯾﺠﺐ ان ﻧﺘﺒﻊ اﻟﻘﻮاﻋﺪ اﻟﻤﺨﺼﺼﺔ ﻹﻧﺸﺎﺋﮫ واﻟﺘﻌﺎﻣﻞ ﻣﻌﮫ .
ﻹﻧﺸﺎء ﻛﻼس ﻣﻌﯿﻦ ﯾﺠﺐ أوﻻ ً ان ﻧﻜﺘﺐ ﻛﻠﻤﺔ classﺛﻢ ﺑﻌﺪھﺎ اﺳﻢ ھﺬا اﻟﻜﻼس وﻧﺤﻦ ﻧﺨﺘﺎر اﻻﺳﻢ
ﻛﻤﺎ ﻧﺸﺎء ﻟﻜﻦ ﻋﻨﺪ ﺗﺴﻤﯿﺘﮫ ﯾﺠﺐ ان ﻧﺨﻀﻊ ﻟﻨﻔﺲ ﻗﻮاﻋﺪ ﺗﺴﻤﯿﺔ اﻟﻤﺘﻐﯿﺮات ﺑﺨﻼف اﻧﮫ ھﻨﺎ ﻻ ﯾﻤﻜﻦ
ان ﻧﺴﺘﺨﺪم اﻟﻔﺎﺻﻠﺔ اﻟﺴﻔﻠﯿﺔ _ وﺑﻌﺪ اﺳﻢ اﻟﻜﻼس ﻧﻀﻊ ﻗﻮس ﻣﻌﻜﻮف وﺑﺪاﺧﻠﮫ ﻧﻜﺘﺐ ﻛﻮد اﻟﻜﻼس
ﻻﺣﻆ -:
{ class ahmed
اﻟﻜﻮد ھﻨﺎ
}
ﻓﻲ داﺧﻞ اﻟﻜﻼس ﯾﻤﻜﻦ ان ﻧﻜﺘﺐ ﻛﻮد اﻋﺘﯿﺎدي ﻛﻤﺎ ﻧﻜﺘﺐ ﻓﻲ ﺧﺎرج اﻟﻜﻼس ﺣﯿﺚ ﻧﺴﺘﻄﯿﻊ ان
ﻧﺴﺘﺨﺪم اﻟﺪوال واﻟﻤﺘﻐﯿﺮات واﻟﻤﺼﻔﻮﻓﺎت إﻟﺦ ...ﻟﻜﻦ ھﻨﺎك ﺑﻌﺾ اﻟﺘﻐﯿﯿﺮات اﻟﺒﺴﯿﻄﺔ اﻟﺘﻲ ﻧﺠﺮﯾﮭﺎ
ﻋﻠﻰ اﻟﻜﻮد وﺳﻨﺸﺮح ھﺬه اﻟﺘﻐﯿﯿﺮات ﺑﻌﺪ ﻗﻠﯿﻞ ,واذا اردﻧﺎ اﺳﺪﻋﺎء اﻟﻜﻼس اﻟﺴﺎﺑﻖ ﻧﻜﺘﺐ اﻟﻜﻮد
اﻟﺘﺎﻟﻲ -:
;) ($x = new ahmed
ﻻﺣﻆ ھﻨﺎ اوﻻ ً ﻗﻤﻨﺎ ﺑﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ اﻋﺘﯿﺎدي زﻧﻌﻄﯿﮫ أي اﺳﻢ ﺛﻢ ﻧﺠﻌﻠﮫ ﯾﺴﺎوي newوﺑﻌﺪھﺎ اﺳﻢ
اﻟﻜﻼس اﻟﻤﻄﻠﻮب اﺳﺘﺪﻋﺎﺋﮫ ,واﻵن وﺑﻌﺪ ان ﻋﺮﻓﻨﺎ ) اﺳﺘﺪﻋﯿﻨﺎ ( اﻟﻜﻼس اﻟﻤﻄﻠﻮب ﯾﻤﻜﻦ ان ﻧﺠﻠﺐ
أي ﻗﯿﻤﺔ ﻣﻦ داﺧﻞ ھﺬا اﻟﻜﻼس وذﻟﻚ ﺑﻤﺠﺮد ﻛﺘﺎﺑﺔ اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﺬي وﺿﻌﻨﺎ ﻓﯿﮫ اﻟﻜﻼس ﺛﻢ ﻓﺎﺻﻠﺔ
وﻋﻼﻣﺔ أﻛﺒﺮ ﻣﻦ ھﻜﺬا > -ﺑﻌﺪھﺎ اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﻧﺮﯾﺪ ان ﻧﺠﻠﺐ ﻗﯿﻤﺘﮫ او اﺳﻢ اﻟﺪاﻟﺔ اﻟﻤﻄﻠﻮﺑﺔ
ﻟﻜﻦ ﻻﺣﻆ اﻧﻨﺎ ھﻨﺎ ﻻ ﻧﻜﺘﺐ اﻟﻌﻼﻣﺔ $ﻗﺒﻞ اﺳﻢ اﻟﻤﺘﻐﯿﺮ ,ﻟﺠﻠﺐ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ ﻣﻌﺮف ﻓﻲ داﺧﻞ
اﻟﻜﻼس اﻟﺴﺎﺑﻖ ﻧﻜﺘﺐ ھﺬا اﻟﻜﻮد -:
;) ($x = new ahmed
; $x -> var
;) ($x -> fun
ﺣﯿﺚ ان varھﻮ اﺳﻢ ﻣﺘﻐﯿﺮ ﻣﻌﺮف ﻓﻲ داﺧﻞ اﻟﻜﻼس ahmedاﻣﺎ funﻓﮭﻲ داﻟﺔ function
ﻣﻌﺮﻓﺔ ﻓﻲ داﺧﻞ ﻧﻔﺲ اﻟﻜﻼس ,وﯾﻤﻜﻦ ان ﻧﻤﺮر ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ ﺑﺎراﻣﺘﺮات اذا ﻛﻨﺎ ﻗﺪ وﺿﻌﻨﺎ ﻟﮭﺎ
ﺑﺎراﻣﺘﺮات ﻓﻲ ﺗﻌﺮﯾﻔﺎ وﯾﻤﻜﻦ ان طﺒﻊ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اذا وﺿﻌﻨﺎ ﻗﺒﻠﮫ اﻟﺪاﻟﺔ echoﻻﺣﻆ -:
;echo $x -> var
) ( 127 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
public
ﻧﺴﺘﺨﺪم ھﺬه اﻟﻜﻠﻤﺔ ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ ان ﻧﻌﺮف ﻣﺘﻐﯿﺮ او داﻟﺔ ﺑﺄﻧﮫ ﻋﺎم أي اﻧﮫ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ھﺬا اﻟﻤﺘﻐﯿﺮ
او اﻟﺪاﻟﺔ ﺧﺎرج اﻟﻜﻼس وﯾﻤﻜﻦ ﺣﺘﻰ ان ﻧﻐﯿﺮ ﻗﯿﻤﺘﮫ ﻣﻦ ﺧﺎرج اﻟﻜﻼس .
ﻣﺜﺎل/
{ class myClass
; " public $x = " Value
{ ) (public function myFun
}
}
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ ﺗﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮ ﺑﺪون ان ﻧﻌﻄﯿﮫ ﻗﯿﻤﺔ ﺛﻢ ﻧﺴﻨﺪ ﻟﮫ ﻗﯿﻤﺔ ﻓﯿﻤﺎ ﺑﻌﺪ .
this
ﻋﺮﻓﻨﺎ ﺑﺄﻧﮫ ﯾﻤﻜﻦ ان ﻧﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺘﻐﯿﺮات واﻟﺪوال ﻣﻦ ﺧﺎرج اﻟﻜﻼس وذﻟﻚ ﺑﺬﻛﺮ اﺳﻢ اﻟﻜﻼس
وﺑﻌﺪه اﻟﻌﻼﻣﺔ > -ﺛﻢ اﺳﻢ اﻟﻤﺘﻐﯿﺮ او اﻟﺪاﻟﺔ ﻟﻜﻦ اذا اردﻧﺎ ان ﻧﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺘﻐﯿﺮ ﻣﻦ داﺧﻞ ﻧﻔﺲ
اﻟﻜﻼس ﻓﺴﻮف ﻧﺤﺘﺎج اﻟﻰ ﻛﺘﺎﺑﺔ اﻟﻜﻠﻤﺔ this
ﻣﺜﺎل/
{ class myClass
; " public $x = " Value
{ ) (public function myFun
; echo this -> x
}
{ ) (public function myFun2
; ) (echo this -> myFun
}
}
ﻻﺣﻆ ﺑﺄﻧﮫ اذا اردﻧﺎ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺪاﻟﺔ او اﻟﻤﺘﻐﯿﺮ ﻣﻦ داﺧﻞ ﻧﻔﺲ اﻟﻜﻼس ﻓﻠﯿﺲ ﻣﻦ اﻟﻀﺮورة ان
ﯾﻜﻮن ﻣﻦ اﻟﻨﻮع public
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ ان ﻧﺬﻛﺮ اﺳﻢ اﻟﻜﻼس ﺑﺪﻻ ً ﻣﻦ ﻛﻠﻤﺔ thisوﻟﻦ ﺗﺤﺪث أي ﻣﺸﻜﻠﺔ ﻟﻜﻦ ﯾﻔﻀﻞ ان
ﻧﺴﺘﺨﺪم ﻛﻠﻤﺔ thisﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ اﻟﻮﺻﻮل اﻟﻰ ﻣﺘﻐﯿﺮ او داﻟﺔ ﻓﻲ داﺧﻞ اﻟﻜﻼس وذﻟﻚ ﻻﻧﮫ ﻣﻦ
اﻟﻤﺤﺘﻤﻞ ان ﻧﺮﯾﺪ ﺗﻐﯿﯿﺮ اﺳﻢ اﻟﻜﻼس اﻟﻰ اﺳﻢ آﺧﺮ وﺑﺬﻟﻚ ﻟﻦ ﻧﻀﻄﺮ اﻟﻰ ﺗﻐﯿﯿﺮ اﻻﺳﻤﺎء اﻟﻘﺪﯾﻤﺔ
ﻟﻠﻜﻼس واﻟﺘﻲ ذﻛﺮﻧﺎھﺎ ﻓﻲ داﺧﻞ ﻧﻔﺲ اﻟﻜﻼس .
) ( 128 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
private
ﻧﺴﺘﺨﺪم ھﺬه اﻟﻜﻠﻤﺔ ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ ان ﻧﻌﺮف ﻣﺘﻐﯿﺮ او داﻟﺔ ﺑﺄﻧﮫ ﺧﺎص أي ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮫ او
اﻟﻮﺻﻮل اﻟﯿﮫ ﻣﻦ ﺧﺎرج اﻟﻜﻼس وﻻ ﺣﺘﻰ ﻣﻦ ﺧﻼل ﺗﻮرﯾﺚ اﻟﻜﻼس ) وﺳﻨﺸﺮح ﻋﻤﻠﯿﺔ اﻟﺘﻮرﯾﺚ
ﺑﻌﺪ ﻗﻠﯿﻞ ( ,واذا ﺣﺎوﻟﻨﺎ اﻟﻮﺻﻮل اﻟﯿﮫ ﻣﻦ ﺧﺎرج اﻟﻜﻼس ﺳﯿﻌﻄﯿﻨﺎ ﺧﻄﺄ .
ﻣﺜﺎل/
{ class myClass
; " private $x = " Value
{ ) (private function myFun
}
}
protected
ﻧﺴﺘﺨﺪم ھﺬه اﻟﻜﻠﻤﺔ ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ ان ﻧﻌﺮف ﻣﺘﻐﯿﺮ او داﻟﺔ ﺑﺄﻧﮫ ﻣﺤﻤﻲ أي ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮫ او
اﻟﻮﺻﻮل اﻟﯿﮫ ﻣﻦ ﺧﺎرج اﻟﻜﻼس وﻟﻜﻦ ﯾﻤﻜﻦ اﻟﻮﺻﻮل اﻟﯿﮫ ﻣﻦ ﺧﻼل ﺗﻮرﯾﺚ اﻟﻜﻼس ) وﺳﻨﺸﺮح
ﻋﻤﻠﯿﺔ اﻟﺘﻮرﯾﺚ ﺑﻌﺪ ﻗﻠﯿﻞ ( ,واذا ﺣﺎوﻟﻨﺎ اﻟﻮﺻﻮل اﻟﯿﮫ ﻣﻦ ﺧﺎرج اﻟﻜﻼس ﺳﯿﻌﻄﯿﻨﺎ ﺧﻄﺄ .
ﻣﺜﺎل/
{ class myClass
; " protected $x = " Value
{ ) (protected function myFun
}
}
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ ان ﻧﺴﺘﺪﻋﻲ اﻟﻤﺘﻐﯿﺮات اﻟﺨﺎﺻﺔ او اﻟﻤﺤﻤﯿﺔ ﻣﻦ ﺧﺎرج اﻟﻜﻼس وذﻟﻚ ﻋﻦ طﺮﯾﻖ
ذﻛﺮ ھﺬه اﻟﻤﺘﻐﺮات ﻓﻲ داﺧﻞ دوال ﻋﺎﻣﺔ .
ﻣﺜﺎل/
{ class myClass
; " protected $x = " Value
{ ) (public function myFun
; return this -> x
}
}
;) ($obj = new myClass
; ) (echo $obj -> myFun
ھﻨﺎ ﺳﯿﺘﻢ طﺒﺎﻋﺔ اﻟﻘﯿﻤﺔ value
) ( 129 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
const
ﯾﺘﻢ ﺗﻌﺮﯾﻒ اﻟﺜﺎﺑﺖ ﺑﺈﺳﺘﺨﺪام اﻟﻜﻠﻤﺔ اﻟﻤﺤﺠﻮزة constوﯾﻔﻀﻞ أن ﯾﻜﻮن اﺳﻢ اﻟﺜﺎﺑﺖ ﺑﺎﻟﺤﺮوف
اﻟﻜﺒﯿﺮة واﻟﺜﺎﺑﺖ ﯾﻜﺘﺐ ﺑﺪون اﻟﻌﻠﻤﺔ $وﯾﺠﺐ إﻋﻄﺎء اﻟﺜﺎﺑﺖ ﻗﯿﻤﺔ ﻋﻨﺪ ﺗﻌﺮﯾﻔﺔ وﻻ ﻧﺴﺘﻄﯿﻊ ﺗﻐﯿﯿﺮ
ھﺬه اﻟﻘﯿﻤﺔ ﻓﯿﻤﺎ ﺑﻌﺪ ﻻﻧﮭﺎ ﺛﺎﺑﺘﮫ .
ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ إﺳﺘﺨﺪام اﻟﺜﺎﺑﺖ ل ﻧﺴﺘﺨﺪم طﺮﯾﻘﺔ إﻧﺸﺎء ﻛﺎﺋﻦ ﻣﻦ اﻟﻔﺌﺔ ﻛﻤﺎ ﺳﺒﻖ وﻟﻜﻦ ﻧﻘﻮم ﺑﻜﺘﺎﺑﺔ اﺳﻢ
اﻟﻜﻼس ﺛﻢ اﻟﻌﻼﻣﺘﯿﻦ ::ﺛﻢ اﺳﻢ اﻟﺜﺎﺑﺖ .
ﻣﺜﺎل/
{ class myClass
;"const NAME = "User
}
; echo myClass :: NAME
واذا اردﻧﺎ ان ﻧﺴﺘﺨﺪم اﻟﺜﺎﺑﺖ ﻓﻲ داﺧﻞ ﻧﻔﺲ اﻟﻜﻼس ﻓﯿﻤﻜﻦ ان ﻧﻜﺘﺐ اﺳﻢ اﻟﻜﻼس او اﻟﻜﻠﻤﺔ
اﻟﻤﺤﺠﻮزة ) selfﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻜﻠﻤﺔ thisﻣﻊ اﻟﺜﺎﺑﺖ ( وﺑﻌﺪھﺎ ﻧﻀﻊ اﻟﻌﻼﻣﺘﯿﻦ ::ﺛﻢ اﺳﻢ
اﻟﺜﺎﺑﺖ .
ﻣﺜﺎل /
{ class myClass5
;"const NAME="User
{) (public function test
;return self::NAME
}
;echo myClass5::NAME
;">echo "<br
;) ($obj=new myClass5
;) (echo $obj->test
static
ﻧﺴﺘﺨﺪم ھﺬه اﻟﻜﻠﻤﺔ ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ ان ﻧﻌﺮف ﻣﺘﻐﯿﺮ ﺑﺄﻧﮫ ﺳﺎﻛﻦ ,واﻟﻤﺘﻐﯿﺮ ﻣﻦ ﻟﻨﻮع اﻟﺴﺎﻛﻦ ﯾﻈﻞ
ﻣﺤﺘﻔﻆ ﺑﻘﯿﻤﺘﺔ داﺧﻞ اﻟﻔﺌﺔ ) اﻟﻜﻼس ( إﻟﻰ أن ﯾﻨﺘﮭﻰ ﻋﻤﻞ اﻟﻔﺌﺔ ) اﻟﻜﻼس ( وھﻮ ﯾﺸﺒﺔ ﻓﻰ ھﺬا ﻋﻤﻞ
اﻟﻤﺘﻐﯿﺮات اﻟﺘﻰ ﺗﻌﺮف ﻓﻰ ﺑﺪاﯾﺔ اﻟﻔﺌﺔ وﻟﻜﻦ ﻓﻰ ﺑﻌﺾ اﻟﺤﯿﺎن ﻧﺤﺘﺎج ﻟﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮات داﺧﻞ
اﻟﺪوال وﻧﺮﯾﺪ أن ﺗﻈﻞ ﻗﯿﻤﺘﮭﺎ ﻣﺤﻔﻮظﺔ داﺧﻞ اﻟﻤﺘﻐﯿﺮ وﻻ ﺗﻨﺘﮭﻲ ﺑﺈﻧﺘﮭﺎء ﻋﻤﻞ اﻟﺪاﻟﺔ وﻟﮭﺬا ﻧﻘﻮم
ﺑﺘﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮ ﻋﻠﻰ أﻧﮫ ﺳﺎﻛﻦ ,وﻟﮭﺬا ﺗﺴﺘﺨﺪم staticﻟﺘﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮ داﺧﻞ اﻟﺪوال .
وأﯾﻀﺎ ً ﻻﺣﻆ ﺗﺠﺎھﻞ اﻟﻘﯿﻤﺔ اﻻﺑﺘﺪاﺋﯿﺔ اﻟﺘﻰ ﺗﺴﻨﺪ ﻟﻠﻤﺘﻐﯿﺮ اﻟﺴﺎﻛﻦ ﻋﻨﺪ ﺗﻌﺮﯾﻔﺔ داﺧﻞ اﻟﺪاﻟﺔ
) ( 130 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
<?php
{ class myClass6
{)(public function test
;$t=0
;$t++
;return $t
}
{)(public function test2
;static $t2=0
;$t2++
;return $t2
}
{)(public function test3
;">echo $this->test()."<br
;">echo $this->test()."<br
;">echo $this->test()."<br
;">echo "---------------<br
;">echo $this->test2()."<br
;">echo $this->test2()."<br
;">echo $this->test2()."<br
}
}
;)($obj=new myClass6
;)($obj->test3
>?
ﺗﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮات اﻟﺴﺎﻛﻨﺔ داﺧﻞ اﻟﺪوال ﯾﺠﻌﻠﻨﺎ ﻻ ﻧﺴﺘﻄﯿﻊ إﺳﺘﺨﺪام ھﺬه اﻟﻤﺘﻐﯿﺮات ﺧﺎرج اﻟﻨﻄﺎق
اﻟﻤﻌﺮﻓﺔ ﺑﮫ ﻻﻧﮭﺎ ﺗﻌﺘﺒﺮ ﻣﺘﻐﯿﺮات ﻣﺤﻠﯿﺔ ذات طﺎﺑﻊ ﺧﺎص ,وﻟﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮات ﻋﺎﻣﺔ ﻣﻦ اﻟﻨﻮع
اﻟﺴﺎﻛﻦ ﯾﺘﻢ اﻟﻮﺻﻮل إﻟﯿﮭﺎ ﻣﻦ ﺧﻼل اﻟﻜﻠﻤﺔ اﻟﻤﺤﺠﻮزة selfﺛﻢ اﻟﻌﻼﻣﺘﯿﻦ ::ﺛﻢ اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﺴﺎﻛﻦ
وﻻ ﻧﻨﺴﻰ ﻋﻼﻣﺔ $ﺧﻼف اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﺑﺖ .
وﻻﺳﺘﺨﺪام اﻟﻤﺘﻐﯿﺮات اﻟﺴﺎﻛﻨﺔ ﺧﺎرج ﻧﻄﺎق اﻟﻔﺌﺔ ﻧﻜﺘﺐ اﺳﻢ اﻟﻔﺌﺔﻣﺘﺒﻮﻋﺎ ً ﺑﺎﻟﻌﻼﻣﺘﯿﻦ ::ﺛﻢ اﺳﻢ
اﻟﻤﺘﻐﯿﺮ اﻟﺴﺎﻛﻦ .
) ( 131 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
ﻣﺜﺎل/
{ class myClass7
;"public static $name="user1
;"private static $name2="user2
{)(public function test
;return self::$name2
}
}
;echo myClass7::$name
;">echo "<br
;)($obj=new myClass7
;)(echo $obj->test
اﻟﺪوال اﻟﺴﺎﻛﻨﺔ
ﯾﺘﻢ ﺗﻌﺮﯾﻒ اﻟﺪوال ﻋﻠﻰ أﻧﮭﺎ ﺳﺎﻛﻨﺔ وﻟﻜﻦ ﻓﻰ ھﺬه اﻟﺤﺎﻟﺔ ﻻ ﻧﺴﺘﻄﯿﻊ إﺳﺘﺨﺪام اﻟﻜﻠﻤﺔ thisأي ﻻ
ﻧﺴﺘﻄﯿﻊ إﺳﺘﺨﺪام ﻣﻜﻮﻧﺎت اﻟﻔﺌﺔ ) اﻟﻜﻼس ( داﺧﻠﮭﺎ وﻟﻜﻦ ﯾﻤﻜﻦ إﺳﺘﺨﺪام اﻟﻤﻜﻮﻧﺎت اﻟﻤﻌﺮﻓﺔ ﻋﻠﻰ
أﻧﮭﺎ ﺳﺎﻛﻨﺔ داﺧﻞ اﻟﺪوال اﻟﺴﺎﻛﻨﺔ ,وﯾﻤﻜﻦ إﺳﺘﺨﺪام اﻟﻤﻜﻮﻧﺎت اﻟﺴﺎﻛﻨﺔ داﺧﻞ اﻟﻔﺌﺔ ) اﻟﻜﻼس ( ﺑﻜﺘﺎﺑﺔ
selfﺛﻢ ::ﺛﻢ اﺳﻢ اﻟﻌﻨﺼﺮ اﻟﺴﺎﻛﻦ ,وﻋﻨﺪ إﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ ﺧﺎرج اﻟﻔﺌﺔ ﻧﻜﺘﺐ اﺳﻢ اﻟﻔﺌﺔ ﺛﻢ ::ﺛﻢ اﺳﻢ
اﻟﺪاﻟﺔ .
ﻣﺜﺎل /
{ class myClass8
;"public static $name="user
{) (public static function test
;return self::$name
}
{) (public static function test2
;) (return self::test
}
}
;) (echo myClass8::test2
اﻟﻮراﺛﺔ extends
اﻻﺳﻢ ﯾﺸﺮح ﻧﻔﺴﮫ ﻓﮭﻰ ﻋﻤﻠﯿﺔ وراﺛﺔ ﻣﻜﻮﻧﺎت اﻟﻔﺌﺔ ) اﻟﻜﻼس ( اﻟﻤﻮروﺛﺔ ﻓﻰ اﻟﻔﺌﺔ اﻟﻮارﺛﺔ أي
إﻣﻜﺎﻧﯿﺔ إﺳﺘﺨﺪام ﻣﻜﻮﻧﺎت اﻟﻔﺌﺔ اﻟﻤﻮروﺛﺔ – ﻣﻦ دوال وﻣﺘﻐﯿﺮات – ﻓﻲ اﻟﻔﺌﺔ ) اﻟﻜﻼس ( اﻟﻮارﺛﺔ .
ﻣﻼﺣﻈﺔ /ﯾﺘﻢ وراﺛﺔ اﻟﻤﻜﻮﻧﺎت اﻟﻤﻌﺮﻓﺔ ﻋﻠﻰ أﻧﮭﺎ ﻋﺎﻣﺔ أو ﻣﺤﻤﯿﺔ وﻻ ﯾﺘﻢ ﺗﻮرﯾﺚ اﻟﻤﻜﻮﻧﺎت اﻟﻤﻌﺮﻓﺔ
ﻋﻠﻰ أﻧﮭﺎ ﺧﺎﺻﺔ .
) ( 132 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
ﻣﺜﺎل/
<?php
{ class A
;'public $name='user1
;'private $name2='user2
;'protected $name3='user3
}
{ class B extends A
{)(public function test
;echo $this->name
;">echo "<br
;//echo $this->name2
;echo $this->name3
}
}
;)($obj=new B
;)(echo $obj->test
;">echo "<br
;echo $obj->name
>?
اﻟﻜﻮد اﻟﻤﻮﺿﻮع ﻓﻰ اﻟﺘﻌﻠﯿﻖ ھﻮ ﻛﻮد ﺧﺎطﺊ ﻻﻧﮫ ﯾﻌﺘﺒﺮ ﻋﻤﻠﯿﺔ وﺻﻮل ﻟﻤﺘﻐﯿﺮ ﺧﺎص واﻟﻤﻜﻮﻧﺎت
اﻟﻤﻌﺮﻓﺔ ﻋﻠﻰ أﻧﮭﺎ ﺧﺎﺻﺔ ﻻ ﺗﻮرث ,وﻋﻨﺪ إﻧﺸﺎء ﻛﺎﺋﻦ ﻣﻦ اﻟﻔﺌﺔ اﻟﺠﺪﯾﺪة ﻧﺴﺘﻄﯿﻊ إﺳﺨﺪام ﻣﻜﻮﻧﺎت
اﻟﻔﺌﺔ وﻣﻜﻮﻧﺎت اﻟﻔﺌﺔ اﻟﺘﻰ ورﺛﺘﮭﺎأﯾﻀﺎ ً ﺑﺸﺮط أن ﺗﻜﻮن ﻣﻌﺮﻓﺔ ﻋﻠﻰ أﻧﮭﺎ ﻣﻜﻮﻧﺎت ﻋﺎﻣﺔ .
ﻣﻼﺣﻈﺔ /ﻻ ﯾﻤﻜﻦ وراﺛﺔ اﻟﻜﻼس اﻟﺬي ورث ﻣﻦ ﻛﻼس آﺧﺮ ﻣﺜﻼ ً ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻻ ﯾﻤﻜﻦ وراﺛﺔ
اﻟﻜﻼس B
ﻣﻼﺣﻈﺔ /ﻧﺴﺘﺨﺪم اﻟﻜﻠﻤﺔ اﻟﻤﺤﺠﻮزة thisﻟﻠﻮﺻﻮل ﻟﻤﻜﻮﻧﺎت اﻟﻔﺌﺔ ) اﻟﻜﻼس ( اﻟﻤﻮروﺛﺔ وﻟﻜﻦ ﻓﻰ
ﺣﺎﻟﺔ اﻟﺜﻮاﺑﺖ واﻟﻤﻜﻮﻧﺎت اﻟﻤﻌﺮﻓﺔ ﻋﻠﻰ أﻧﮭﺎ ﺳﺎﻛﻨﺔ ﯾﺘﻢ إﺳﺘﺨﺪام اﻟﻜﻠﻤﺔ اﻟﻤﺤﺠﻮزة parentﺛﻢ ﯾﺘﺒﻌﮭﺎ
::ﺛﻢ اﺳﻢ اﻟﺜﺎﺑﺖ أو اﻟﻌﻨﺼﺮ اﻟﺴﺎﻛﻦ ﻣﻠﺤﻮظﺔ ":اﻟﺜﺎﺑﺖ ﻻ ﺗﺴﺒﻘﺔ اﻟﻌﻼﻣﺔ $وﻟﻜﻦ ﺗﺴﺒﻖ اﻟﻌﻨﺎﺻﺮ
اﻟﺴﺎﻛﻨﺔ " .
ﻣﺜﺎل /
<?php
{ class A
;"const NAME="User1
;'public static $name='user1
;'private static $name2='user2
}
{ class B extends A
;"const NAME2="User2
;'private static $name3='user3
( 133 ) ( OOP اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ
abstract
ﺗﻮﺿﻊ ھﺬه اﻟﻜﻠﻤﺔ ﻗﺒﻞ اﺳﻢ اﻟﻼس اذا ﻛﻨﺎ ﻧﺮﯾﺪ ان ﻧﻜﺘﺐ ﻛﻼس وھﺬا اﻟﻜﻼس ﻻ ﻧﺮﯾﺪ ان ﻧﺴﺘﺨﺪﻣﮫ
. إﻻ ﻓﻲ اﻟﺘﻮرﯾﺚ
/ﻣﺜﺎل
abstract class A {
public function test( ){
echo "user";
}
}
class B extends A {
public function test2( ){
$this->test( );
}
}
//$obj=new A( );
//echo $obj->test( );
$obj=new B( );
echo $obj->test2( );
. ﻻﺣﻆ ان اﻟﻜﻮد اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﺘﻌﻠﯿﻖ ھﻮ ﺧﺎطﺊ
) ( 134 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
final
ﻧﺴﺘﺨﺪم ھﺬه اﻟﻜﻠﻤﺔ ﻗﺒﻞ اﺳﻢ اﻟﻜﻠﺲ اذا ﻛﻨﺎ ﻻ ﻧﺮﯾﺪ ان ﻧﺴﻤﺢ ﻟﮭﺬا اﻟﻜﻼس ان ﯾﻮرث ﻣﻦ ﻗﺒﻞ ﻛﻼس
آﺧﺮ .
ﻣﺜﺎل/
{final class my
{) (public function test
;"echo "user
}
}
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ اﺳﺘﺨﺪام finalﻗﺒﻞ اﺳﻢ داﻟﺔ functionﻟﻨﻌﻠﻦ ان ھﺬه اﻟﺪاﻟﺔ ﻧﮭﺎﺋﯿﺔ .
interfaces
ﻧﺴﺘﺨﺪم ھﺬه اﻟﻜﻠﻤﺔ ﺑﺪﻻ ً ﻣﻦ اﺳﻢ ﻛﻠﻤﺔ ﻛﻼس اﺛﻨﺎء ﺗﻌﺮﯾﻒ اﻟﻔﺌﺔ وﻻ ﯾﻤﻜﻦ ان ﻧﺼﻞ اﻟﻰ ﻣﺤﺘﻮﯾﺎﺗﮫ
ﻓﻲ ﻣﺎ ﺑﻌﺪ إﻻ ﻣﻦ داﺧﻞ ﻛﻼس آﺧﺮ ﺣﯿﺚ ھﻨﺎ ﻓﻲ داﺧﻞ اﻟـ interfacesﻧﻀﻊ اﻟﺘﻌﻠﯿﻤﺎت او اﻟﺨﻄﺔ
اﻟﺘﻲ ﻧﺮﯾﺪھﺎ ان ﺗﻄﺒﻖ ﻓﻲ ﻣﺎ ﺑﻌﺪ ﻋﻠﻰ اﻟﻜﻼس اﻟﺬي ﺳﻨﺴﺘﺪﻋﯿﮭﺎ ﻓﯿﮫ
ﻣﺜﺎل/
{ interfaces MyName
;) (public function test
}
ﻛﻤﺎ ﺗﻼﺣﻆ وﺿﻌﻨﺎ ﺑﻌﺪ اﻟـ interfacesاﺳﻢ ﻧﺤﻦ ﻧﺨﺘﺎره وﻓﻲ داﺧﻠﮫ ﻧﻀﻊ اﻟﻜﻮد اﻟﻤﻄﻠﻮب ,
وﻻﺣﻆ اﻧﻨﺎ ﻋﺮﻓﻨﺎ اﻟﺪاﻟﺔ وﻟﻜﻦ ﻟﻢ ﻧﻀﻊ ﻟﮭﺎ ﻗﻮﺳﯿﻦ ﻣﻌﺮوﻓﯿﻦ وﻟﻢ ﻧﻀﻊ ﺑﺪاﺧﻠﮭﺎ ﻛﻮد وﺳﻮف ﻧﻀﻊ
ﻟﮭﺎ اﻟﻜﻮد ﻣﻦ داﺧﻞ اﻟﻜﻼس اﻟﺬي ﺳﻮف ﯾﺴﺘﺪﻋﻲ ھﺬا اﻟـ , interfacesوﯾﺘﻢ اﺳﺘﺪﻋﺎءه ﻣﻦ ﺧﻼل
اﻟﻜﻠﻤﺔ . implements
ﻣﺜﺎل /ﻷﺳﺘﺪﻋﺎء اﻟﻘﺎﻋﺪة ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ
{ class ahmed implements MyName
{ ) (public function test
} ;"echo "The Value
}
;) ($n = new ahmed
;) ($n -> test
ﻻﺣﻆ اﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ ﻧﻔﺲ اﺳﻢ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ testوھﺬا اﻻﻣﺮ اﺟﺒﺎرﺑﻲ أي اﻧﻨﺎ ﻣﺠﺒﺮون ﻋﻠﻰ
اﺳﺘﺨﺪام ﻧﻔﺲ اﻻﺷﯿﺎء اﻟﻤﻌﺮﻓﺔ ﻓﻲ داﺧﻞ اﻟﻘﺎﻋﺪة interfacesﻓﻲ داﺧﻞ اﻟﻜﻼس اﻟﺬي اﺳﺘﺪﻋﺎھﺎ ,
وﯾﻤﻜﻨﻨﺎ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ان ﻧﻌﺮف دوال آﺧﺮى ﺟﺪﯾﺪة ,ﻟﻜﻦ اذا ﻟﻢ ﻧﺴﺘﺨﺪم اﻟﺪوال اﻟﻤﻮﺟﻮدة ﻓﻲ
اﻟﻘﺎﻋﺪة interfacesﺳﻮف ﯾﺘﻮﻗﻒ اﻟﻜﻼس ﻋﻦ اﻟﻌﻤﻞ وﯾﻌﻄﻲ ﺧﻄﺄ .
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ ﻟﻠـ interfacesان ﯾﺮث interfacesآﺧﺮ .
( 135 ) ( OOP اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ
/ ﻣﺜﺎل
interface A {
public function test( );
}
interface B {
public function test2( );
}
interface C extends A {
public function test3( );
}
واﺣﺪ وﻧﻔﺼﻞ ﺑﯿﻨﮭﻢ ﺑﻔﺎﺻﻠﺔinterfaces ﯾﻤﻜﻦ ﻟﻠﻜﻼس ان ﯾﺴﺘﺪﻋﻲ أﻛﺜﺮ ﻣﻦ/ ﻣﻼﺣﻈﺔ
/ﻣﺜﺎل
<?php
interface A {
public function test( );
}
interface B {
public function test2( );
}
interface C extends A {
public function test3( );
}
class D implements B,C{
public function test( ){
echo "test";
}
public function test2(){
echo "test2";
}
public function test3(){
echo "test3";
}
}
$obj=new D( );
$obj->test( );
echo "<br>";
$obj->test2( );
echo "<br>";
$obj->test3( );
?>
) ( 136 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
اﻟﺴﻤﺎت trait
اﻟﺴﻤﺎت ھﻰ ﻋﺒﺎرة ﻋﻦ طﺮﯾﻘﺔ ﻟﻠﺘﺨﻠﺺ ﻣﻦ اﻟﻘﯿﻮد اﻟﺘﻰ ﻓﺮﺿﺎﺗﮭﺎ اﻟﻮراﺛﺔ اﻟﻔﺮدﯾﺔ وأﻋﻨﻰ ﺑﺎﻟﻮراﺛﺔ
اﻟﻔﺮدﯾﺔ ھﻰ أن ﻟﻐﺔ phpل ﺗﺪﻋﻢ اﻟﻮراﺛﺔ اﻟﻤﺘﻌﺪده ﻛﻤﺎ ﻓﻰ ﻟﻐﺔ c++ﻟﻦ اﻟﻮراﺛﺔ اﻟﻤﺘﻌﺪدة ﻋﻠﻰ
رﻏﻢ ﻗﻮﺗﮭﺎ ﻓﻰ ﺗﺴﺒﺐ ﻛﺜﯿﺮ ﻣﻦ اﻟﻤﺸﺎﻛﻞ واﻟﺘﻌﻘﯿﺪ وﻟﮭﺬا أﻧﺘﺠﺖ phpﻣﺎ ﯾﻌﺮف ﺑﺎﻟﺴﻤﺎت .
ﯾﺘﻢ ﺗﻌﺮﯾﻒ اﻟﺴﻤﺔ ﻣﻦ ﺧﻠﻞ اﻟﻜﻠﻤﺔ اﻟﻤﺤﺠﻮزة traitوﯾﺘﻢ اﺳﺘﺨﺪام اﻟﺴﻤﺎت ﻓﻲ اﻟﻔﺌﺔ ﻣﻦ ﺧﻼل اﻟﻜﻠﻤﺔ
اﻟﻤﺤﺠﻮزة . use
ﻣﺜﺎل/
<?php
{trait A
{ )(public function test
;"return "user1
} }
{trait B
{ )(public function test2
;"return "user2
} }
{class C
;use A,B
}
;)($obj = new C
;)(echo $obj->test
;">echo "<br
;)(echo $obj->test2
>?
ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﻛﺄﻧﻤﺎ ﻗﺎم اﻟﻜﻼس Cﺑﻮراﺛﺔ اﻟﺴﻤﺘﯿﻦ Aو , Bوھﺬه ﻣﺸﺎﺑﮭﮫ ﻟﻌﻤﻠﯿﺔ اﻟﻮراﺛﺔ
اﻟﻤﺘﻌﺪدة .
ﻻﺣﻆ ﺑﺄﻧﮫ ﺳﯿﻄﺒﻊ اﻟﻜﻠﻤﺔ Welcomeﺑﺪون ان ﻧﻄﻠﺐ ﻣﻨﮫ ﺗﻨﻔﯿﺬ اﻟﺪاﻟﺔ أي ﺑﻤﺠﺮد ﺗﻌﺮﯾﻒ اﻟﻜﻼس
ﺗﻢ ﺗﻨﻔﯿﺬ اﻟﺪاﻟﺔ اﻟﺘﻲ ﻗﺪ اﻋﻄﯿﻨﺎھﺎ اﻣﺮ اﻟﺘﻨﻔﯿﺬ اﻟﺘﻠﻘﺎﺋﻲ .
وﺗﺴﺘﺨﺪم اﻟﺪاﻟﺔ __destructﻷﻧﮭﺎء اﻟﺘﺸﻐﯿﻞ اﻟﺘﻠﻘﺎﺋﻲ .
ﻣﻠﺤﻮظﺔ :داﻟﺔ اﻟﺒﻨﺎء ) اﻟﺘﺸﻐﯿﻞ اﻟﺘﻠﻘﺎﺋﻲ ( ﯾﻤﻜﻦ أن ﺗﺄﺧﺬ ﻗﯿﻢ ) وﺳﯿﻂ ( وﯾﺘﻢ ﺗﻤﺮﯾﺮ ھﺬه اﻟﻘﯿﻢ إﻟﯿﮭﺎ
ﻋﻨﺪ إﻧﺸﺎء ﻛﺎﺋﻦ ﻣﻦ اﻟﻔﺌﺔ ) اﻟﻜﻼس ( ,وداﻟﺔ اﻟﮭﺪم ﻻ ﺗﺄﺧﺬ أي ﻗﯿﻢ ﻛﻮﺳﯿﻂ .
ﻣﺜﺎل/
{class A
;public $name
;private $name2
;protected $name3
{)public function __construct($n1,$n2,$n3,$n4
;$this->name = $n1
;$this->name2 = $n2
;$this->name3 = $n3
;echo $this->name
;">echo "<br
;echo $this->name2
;">echo "<br
;echo $this->name3
;">echo "<br
;)$this->test($n4
}
{)(public function __destruct
;">echo "<br
;"echo "yossef
}
{)public function test($n
;echo $n
}
}
;)"$obj = new A("user1","user2","user3","user4
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ ان ﻧﻌﺮف ﻣﺘﻐﯿﺮ وﻧﻀﻊ داﺧﻠﮫ ﺗﻌﺮﯾﻒ ﻛﻼس ﻣﻌﯿﻦ ﻛﻤﺎ ﻛﻨﺎ ﻧﻔﻌﻞ ﻓﻲ اﻟﺴﺎﺑﻖ ﻟﻜﻦ
ﻣﻦ داﺧﻞ ﻧﻔﺲ اﻟﻜﻼس .
ﻣﺜﺎل/
{class MY
;) (public $x = new MY
}
وﯾﻤﻜﻦ ان ﻧﻀﻊ ﻛﻠﻤﺔ selfﺑﺪﻻ ً ﻣﻦ اﺳﻢ اﻟﻜﻼس .
) ( 138 اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ( OOP
__call
ﻓﻲ ﺑﻌﺾ اﻷﺣﯿﺎن ﻋﻨﺪﻣﺎ ﻧﺴﺘﺪﻋﻲ ﻛﻼس ﻣﻌﯿﻦ وﻧﺮﯾﺪ ان ﻧﺠﻠﺐ ﻗﯿﻢ ﻣﻦ ﺑﻌﺾ اﻟﺪوال اﻟﻤﻮﺟﻮدة ﻓﯿﮫ
ﻗﺪ ﻧﺨﻄﺄ ﻣﺜﻼ ﻓﻲ اﺳﻢ اﻟﺪاﻟﺔ او ﻓﻲ اﻟﺒﺎراﻣﺘﺮات اﻟﻤﻤﺮرة اﻟﻰ اﻟﺪاﻟﺔ ﻓﺒﺎﻟﻨﺘﯿﺠﺔ ﺳﯿﻄﺒﻊ ﻟﻨﺎ اﻟﻤﺘﺼﻔﺢ
ﺧﻄﺄ ﻋﻨﺪ اﻟﺘﻨﻔﯿﺬ ﻟﻜﻨﮫ ﻟﻦ ﯾﺨﺒﺮﻧﺎ ﻣﺎ ھﻮ اﻻﺳﻢ اﻟﺬي أﺧﻄﺄﻧﺎ ﻓﯿﮫ وأﯾﻦ اﻟﺨﻄﺄ ﺑﺎﻟﻀﺒﻂ وھﻨﺎ ﺗﻈﮭﺮ
ﻓﺎﺋﺪة ھﺬه اﻟﺪاﻟﺔ اﻟﺴﺤﺮﯾﺔ __callوﻛﻞ ﻣﺎ ﻋﻠﯿﻨﺎ ھﻮ ﺗﻌﺮﯾﻒ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ داﺧﻞ اﻟﻜﻼس ,وﻻﺣﻆ
ان ھﺬه اﻟﺪاﻟﺔ ﺗﺄﺧﺬ ﺑﺎراﻣﺘﺮﯾﻦ اﻷول ھﻮ $fnameوھﻮ ﻣﺨﺼﺺ ﻻﺳﻢ اﻟﺪوال واﻟﺜﺎﻧﻲ ھﻮ
$farrayﻣﺨﺼﺺ ﻟﻠﺒﺎراﻣﺘﺮات وﻻﺣﻆ ﺑﺄﻧﮫ ﺳﺘﻌﻮد اﺳﻤﺎء اﻟﺒﺎراﻣﺘﺮات ﻋﻠﻰ ﺷﻜﻞ ﻣﺼﻔﻮﻓﺔ .
ﻣﻼﺣﻈﺔ /ﻓﻲ اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ ﺗﻌﺘﺒﺮ ﻛﻞ اﻟﺪوال اﻟﺘﻲ ﺗﺒﺪأ ﺑﺎﻟﻌﻼﻣﺘﯿﻦ ) __ ( دوال ﺳﺤﺮﯾﺔ ﻣﻊ اﻟﻌﻠﻢ
ﺑﺄﻧﮫ ﯾﻤﻜﻨﻨﺎ أن ﻧﻨﺸﺄ دوال ﺗﺒﺪأ ﺑﮭﺬه اﻟﻌﻼﻣﺘﯿﻦ .
ﻣﻼﺣﻈﺔ /ﯾﻤﻜﻦ ان ﻧﻈﮭﺮ اﺳﻢ اﻟﻜﻼس اﻟﺬي ﺣﺪث ﻓﯿﮫ اﻟﺨﻄﺄ ﻣﻦ ﺧﻼل ____CLASS
ﻣﺜﺎل/
{class MyClass
{)public function __call($fname , $farray
; __echo $fname . " -- " . __CLASS
;)echo print_r($farray
}
{)public function test($var
echo $var
}
}
;) ($ob = new MyClass
;)"$ob->tets("Ahmed
ﻻﺣﻆ ﺑﺄﻧﻨﺎ ھﻨﺎ أﺧﻄﺄﻧﺎ ﻓﻲ ﻛﺘﺎﺑﺔ اﺳﻢ اﻟﺪاﻟﺔ ﻟﻜﻦ ﺳﯿﻄﮭﺮ ﻟﻨﺎ اﻟﻤﺘﺼﻔﺢ اﺳﻢ اﻟﺪاﻟﺔ اﻟﺘﻲ أﺧﻄﺄﻧﺎ ﻓﯿﮭﺎ
وھﻲ tetsﻋﻨﺪ ﺗﻨﻔﯿﺬ اﻟﻜﻮد ,وﺑﻌﺪھﺎ ﺳﯿﻈﮭﺮ اﺳﻢ اﻟﻜﻼس اﻟﺨﻄﺄ واﻟﺬي ھﻮ ﻓﻲ ﻣﺜﺎﻟﻨﺎ , MyClass
وﻟﻮ ﻛﻨﺎ ﻗﺪ أﺧﻄﺄﻧﺎ ﻓﻲ اﻟﺒﺎراﻣﺘﺮات ﻓﺄﻧﮫ ﺳﯿﻈﮭﺮ ﻟﻨﺎ اﺳﻤﺎء اﻟﺒﺎراﻣﺘﺮات اﻟﺘﻲ اﺧﻄﺄﻧﺎ ﻓﯿﮭﺎ .
) ( 139 ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ
ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ
أوﻻ ً -:اﻟﺘﻌﻠﯿﻘﺎت -:ﯾﺤﺘﺎج اﻟﻤﺒﺮﻣﺞ إﻟﻰ اﻟﺘﻌﻠﯿﻘﺎت ﻟﻜﻲ ﯾﻮﺿﺢ اﻟﺒﺮﻧﺎﻣﺞ وﯾﻜﻮن ﻣﻔﮭﻮم ﻋﻨﺪ ﻗﺮاءة
اﻟﻜﻮد ,ﻟﻜﻦ ھﺬه اﻟﺘﻌﻠﯿﻘﺎت ﻟﻦ ﺗﻈﮭﺮ وﻟﻦ ﺗﺆﺛﺮ ﻋﻠﻰ اﻟﺒﺮﻧﺎﻣﺞ ,وﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ ھﺬه اﻟﺘﻌﻠﯿﻘﺎت ﺑﻄﺮﯾﻘﺘﯿﻦ
أ -إذا ﻛﺎن اﻟﺘﻌﻠﯿﻖ ﻓﻲ ﺳﻄﺮ واﺣﺪ ﯾﻤﻜﻦ وﺿﻊ ) ( //او اﻟﻌﻼﻣﺔ ) ( #ﻗﺒﻞ اﻟﺘﻌﻠﯿﻖ .
ب -أﻣﺎ إذا ﻛﺎن اﻟﺘﻌﻠﯿﻖ ﯾﺘﻜﻮن ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺳﻄﺮ ) ﻋﺪة أﺳﻄﺮ ( ﻓﻨﻀﻊ ﻗﺒﻞ ﺑﺪاﯾﺔ اﻟﺘﻌﻠﯿﻖ ) *( /
وﻓﻲ ﻧﮭﺎﯾﺔ اﻟﺘﻌﻠﯿﻖ ) . ( */
<?php
;echo 88
ﺗﻌﻠﯿﻖ ﺑﺴﻄﺮ واﺣﺪ //
;" echo " Hi 77
*/
ﺗﻌﻠﯿﻖ ﺑﻌﺪة ﺳﻄﻮر
*/
>?
ﺛﺎﻧﯿﺎ ً -:ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ اﻟﺪوال ﺑﺎﻟﺤﺮوف اﻟﻜﺒﯿﺮة أو اﻟﺼﻐﯿﺮة ﻓﻠﯿﺲ ھﻨﺎك ﻣﺸﻜﻠﺔ ﺣﯿﺚ ﻻ ﻓﺮق ﺑﯿﻦ
echoو , ECHOﻟﻜﻦ اﻧﺘﺒﮫ ﻓﺒﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﻤﺘﻐﯿﺮات ﻓﺎﻷﺣﺮف اﻟﻜﺒﯿﺮة ﻟﯿﺴﺖ ﻛﺎﻟﺼﻐﯿﺮة .
ﺛﺎﻟﺜﺎ ً -:ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﺪاﻟﺔ echoﻓﯿﻤﻜﻦ أن ﻧﻀﯿﻒ ﺟﺰء إﻟﻰ ﺟﺰء آﺧﺮ أي ﻧﺺ إﻟﻰ ﻣﺘﻐﯿﺮ أو إﻟﻰ
وﺳﻢ ﻓﻲ اﻟﺪاﻟﺔ ﻋﻦ طﺮﯾﻖ إﺿﺎﻓﺔ ﻧﻘﻄﺔ ) ( .وھﻲ ﺗﺸﺒﮫ ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ ,ﻻﺣﻆ ھﺬا اﻟﻤﺜﺎل -:
;"echo "Hi"."welcome"." ".Ahmed
, Hi welcomeﻻﺣﻆ أن طﺒﺎﻋﺔ اﻟﻌﻼﻣﺘﯿﻦ ) " " ( ﻓﺎرﻏﺘﯿﻦ ﻟﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ھﻜﺬا Ahmed
ﯾﺆدي إﻟﻰ طﺒﺎﻋﺔ ﻓﺮاغ ) ﻓﺎﺻﻠﺔ ( .
;"$x = "Ali
;"$y = "Ahmed
; $z = $x . $y
) ( 140 ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ
; echo $x . $y
ﻟﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ھﻜﺬا Ali Ahmed
أو ﯾﻤﻜﻦ إﺿﺎﻓﺘﮭﺎ ﺑﮭﺬا اﻟﺸﻜﻞ -:
; "$b = "My
"$b. = "program
; echo $b
راﺑﻌﺎ ً -:ﯾﻤﻜﻦ اﺳﺘﺨﺪام وﺳﻮم ﻟﻐﺔ htmlﻣﻊ ﻟﻐﺔ phpﺑﻮﺿﻌﮭﺎ داﺧﻞ اﻟﺪاﻟﺔ echoوﺑﯿﻦ ﻋﻼﻣﺘﻲ
ﺗﻨﺼﯿﺺ ) " " (
ﻣﺜﺎل -:
;" echo "<h1> welcome </h1> <br> Hi
;">echo "<p
ﺧﺎﻣﺴﺎ ً -:ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ ﻧﺺ ) ﻗﯿﻤﮫ ﻧﺼﯿﺔ ( وﻧﻀﻌﮭﺎ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ﻣﻔﺮدة ) ' ' ( أو
ﻣﺰدوﺟﺔ وﻟﻜﻦ إذا ﻛﺎﻧﺖ ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ ﻣﻔﺮدة ﻓﻲ اﻟﺒﺪاﯾﺔ ﻓﻼ ﯾﺠﻮز أن ﺗﻨﺘﮭﻲ ﺑﻌﻼﻣﺔ ﺗﻨﺼﯿﺺ
ﻣﺰدوﺟﺔ وﻻ ﯾﺠﻮز اﻟﻌﻜﺲأﯾﻀﺎ ً .
ﻻ ﯾﺠﻮز وﺿﻊ ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﻨﺺ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع ,ﻻﺣﻆ ھﺬه اﻷﻣﺜﻠﺔ -:
وأﯾﻀﺎ ً ﯾﻤﻜﻦ إظﮭﺎر ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ ﻓﻲ اﻟﻨﺺ ﻣﻦ ﺧﻼل إﺿﺎﻓﺔ اﻟﻌﻼﻣﺔ ) \ ( ﻗﺒﻞ ﻋﻼﻣﺔ
اﻟﺘﻨﺼﯿﺺ ,وإن أردﻧﺎ إظﮭﺎر ﺷﻜﻞ ھﺬا اﻟﺮﻣﺰ ﯾﻤﻜﻦ ﻛﺘﺎﺑﯿﮫ ﻣﺮﺗﯿﻦ ) \\ ( ,ﻣﺜﺎل -:
; " $x = " Hi \" welcome
) ( 141 ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ
ﺳﺎدﺳﺎ ً -:ھﻨﺎك ﺑﻌﺾ اﻷﺣﺮف ﻻ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺘﺼﻔﺢ إﺿﺎﻓﺘﮭﺎ إﻟﻰ ﻋﻨﻮان اﻟﺼﻔﺤﺔ ﺑﺼﯿﻐﺘﮭﺎ
اﻟﺤﻘﯿﻘﯿﺔ ﺑﻞ ﯾﺴﺘﺨﺪم ﻟﻐﺔ اﻟﺘﺸﻔﯿﺮ ) ( URL Encodingﻓﻲ اﻟﺘﻌﺮﯾﻒ ﻋﻨﮭﺎ وھﺬا ﺟﺪول ﺑﺎﻟﺮﻣﻮز اﻟﺘﻲ
ﯾﺴﺘﺨﺪﻣﮭﺎ اﻟﻤﺘﺼﻔﺢﺑﺪﻻ ً ﻣﻦ ﻋﺮﺿﮭﺎ ﺑﺼﻮرﺗﮭﺎ اﻟﺤﻘﯿﻘﯿﺔ -:
ﺳﺎﺑﻌﺎ ً -:ﻟﻠﺮﺑﻂ ﺑﯿﻦ ﻟﻐﺔ htmlوﻟﻐﺔ ) phpأو إرﺳﺎل اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺻﻔﺤﺔ htmlاﻟﺘﻲ ﻓﯿﮭﺎ
اﻟﻨﻤﺎذج وﺻﻔﺤﺔ phpاﻟﺘﻲ ﺗﺴﺘﻘﺒﻞ اﻟﺒﯿﺎﻧﺎت ( ﺳﻨﻮﺿﺢ ذﻟﻚ ﻓﻲ ھﺬا اﻟﻤﺜﺎل اﻟﺘﻄﺒﯿﻘﻲ -:
>?
اﻵن ﺳﻮف ﻧﺤﻔﻆ اﻟﺼﻔﺤﺔ ﻓﻲ اﻟﺴﯿﺮﻓﺮ اﻟﻤﺤﻠﻲ ﺑﺎﺳﻢ ) ( textbox.phpوﺑﻌﺪ ذﻟﻚ ﻧﺬھﺐ إﻟﻰ
اﻟﻤﺴﺘﻌﺮض وﻧﻜﺘﺐ ﻋﻨﻮان ﺻﻔﺤﺔ htmlھﻜﺬا http//localhost/textbox.html -:ﺑﻌﺪ
ذﻟﻚ ﻧﻜﺘﺐ وﺟﺒﺘﻨﺎ اﻟﻤﻔﻀﻠﺔ وإرﺳﺎﻟﮭﺎ ,ﺳﻮف ﺗﻼﺣﻆ ظﮭﻮر اﻟﻨﺘﯿﺠﺔ ﻓﻲ اﻟﻌﻨﻮان وذﻟﻚ ﻷﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ
اﻟﺨﺎﺻﯿﺔ ) ( getوﻟﻜﻦ ﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ﻓﻲ اﻟﻌﻨﻮان ﻣﺸﻔﺮة ﻷﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ اﻟﺤﺮوف اﻟﻌﺮﺑﯿﺔ .
ﻣﻼﺣظﺔ /ﯾﻣﻛن ان ﻧرﺳل اﻟﺑﯾﺎﻧﺎت ﻣن ﻧﻣوذج اﻷدﺧﺎل اﻟﻰ ﺻﻔﺣﺔ اﻟـ phpﻋﻠﻰ ﺷﻛل ﻣﺻﻔوﻓﺔ
وذﻟك ﻓﻘط ﺑﻛﺗﺎﺑﺔ ﻗوﺳﻲ اﻟﻣﺻﻔوﻓﺔ ] [ ﺑﻌد اﻻﺳم
>”] [<input type=”text” name=”my_name
>”] [<input type=”text” name=”my_name
وﻻﺣظ اﻧﻧﺎ اﻋطﯾﻧﺎ ﻟﻛﻼھﻣﺎ ﻧﻔس اﻻﺳم ﻷﻧﮭم ﺳﯾﻛوﻧون ﻓﻲ ﻧﻔس اﻟﻣﺻﻔوﻓﺔ ﺟﯾث ﺳﯾﻛون اﻷول
ﯾﺣﻣل اﻟﻣرﺗﺑﺔ 0واﻟﺛﺎﻧﻲ ﯾﺣﻣل اﻟﻣرﺗﺑﺔ 1وھﻛذا اذا ﻛﺎن ﻟدﯾﻧﺎ ﻋﻧﺎﺻر اﻛﺛر ,ﺳوف ﻧﺳﺗﻘﺑل
اﻟﺑﯾﺎﻧﺎت ﻓﻲ ﺻﻔﺣﺔ اﻟـ phpﺑﮭذا اﻟﺷﻛل
;]$_POST[my_name][0
;]$_POST[my_name][1
ﺛﺎﻣﻨﺎ ً -:ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻋﻤﻠﯿﺔ اﻟﻤﺴﺎواة ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ ﺑﻮﺿﻊ ﻋﻼﻣﺔ ) == ( ﺣﯿﺚ إﻧﮭﺎ ﺗﻜﻮن ﺻﺤﯿﺤﺔ
إذا ﻛﺎﻧﺖ اﻟﻘﯿﻢ ﻣﺘﺴﺎوﯾﺔ وﻻ ﺗﮭﺘﻢ أن ﺗﻜﻮن اﻟﻤﺘﻐﯿﺮات ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع أو ﻻ ,ﻻﺣﻆ ھﺬه اﻟﻤﺜﺎل -:
; " $x = " 10
; $y = 10
ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ ﺳﻮف ﺗﻜﻮن ﻣﺘﺴﺎوﯾﺔ وﺗﺤﻘﻖ اﻟﺸﺮط ﻋﻠﻰ اﻟﺮﻏﻢ ﻣﻦ أن اﻟﻤﺘﻐﯿﺮ xﯾﺤﻤﻞ ﻗﯿﻤﺔ ﻧﺼﯿﺔ
واﻟﻤﺘﻐﯿﺮ yﯾﺤﻤﻞ ﻗﯿﻤﺔ ﻋﺪدﯾﺔ ,وإن أردﻧﺎ أن ﺗﻜﻮن اﻟﻤﺴﺎواة ﺑﯿﻦ ﻗﯿﻢ اﻟﻤﺘﻐﯿﺮات وﻛﺬﻟﻚ ﺑﯿﻦ ﻧﻮع
اﻟﻤﺘﻐﯿﺮات ﺳﻮف ﻧﺤﺘﺎج أن ﻧﻜﺘﺐ اﻟﻤﺴﺎواة اﻟﻤﻀﺎﻋﻔﺔ ) === (ﺑﺪﻻ ً ﻣﻦ اﻟﻤﺴﺎواة اﻟﻤﺰدوﺟﺔ ) == (
ﺗﺎﺳﻌﺎ ً -:ﻻﺣﻆ أن ) ( breakﺗﻌﻤﻞ ﻋﻠﻰ اﻟﺨﺮوج ﻣﻦ اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ اﻟﻤﻮﺟﻮدة ﻓﯿﮭﺎ ,أﻣﺎ )
( exitﻓﺘﻌﻤﻞ ﻋﻠﻰ اﻟﺨﺮوج ﻣﻦ ﻛﺎﻣﻞ اﻟﻜﻮد ﻻﺣﻆ ھﺬﯾﻦ اﻟﻤﺜﺎﻟﯿﻦ اﻟﺘﻮﺿﯿﺤﯿﯿﻦ -:
; $x = 10
; " if ( $x = 10 ) { echo " 10
} ; exit
} ; " else if ( $x < 11 ) { echo " small
} ; " else { echo " big
ﻣﺜﺎل -: 2
; $x = 10
; " if ( $x = 10 ) { echo " 10
} ; break
} ; " else if ( $x < 11 ) { echo " small
} ; " else { echo " big
ﻟﻨﻔﺘﺮض أﻧﻨﺎ ﻧﻮد اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻒ " "file.txtﻓﯿﻜﻮن ﻟﺪﯾﻨﺎ أﺣﺪ اﻟﺤﺎﻻت اﻟﺘﺎﻟﯿﺔ
-1أن ﯾﻜﻮن ﻓﻲ ﻧﻔﺲ اﻟﻤﺠﻠﺪ اﻟﺬي ﻧﻨﻔﺬ ﻓﯿﮫ ﺑﺮﻧﺎﻣﺠﻨﺎ وھﻨﺎ ﻧﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺔ اﺳﻢ اﻟﻤﻠﻒ ﻓﻘﻂ دون
اﻟﺤﺎﺟﺔ ﻷي إﺿﺎﻓﺎت ,ﻣﺜﺎل /
""file.txt
) ( 144 ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ
-2أن ﯾﻜﻮن اﻟﻤﻠﻒ ﻓﻲ ﻣﺠﻠﺪ ﻧﻔﺮض أن اﺳﻤﮫ dataداﺧﻞ اﻟﻤﺠﻠﺪ اﻟﻤﻮﺟﻮد ﻓﯿﮫ ﺑﺮﻧﺎﻣﺠﻨﺎ ,ﻓﻔﻲ
ھﺬه اﻟﺤﺎﻟﺔ ﻧﻜﺘﺐ ﻣﺴﺎر اﻟﻤﻠﻒ ﻛﻤﺎ ﯾﻠﻲ
"" ./data/file.txt
-3أن ﯾﻜﻮن اﻟﻤﻠﻒ ﻓﻲ اﻟﻤﺠﻠﺪ اﻷب اﻟﻤﻮﺟﻮد ﻓﯿﮫ ﺑﺮﻧﺎﻣﺠﻨﺎ ,وھﻨﺎ ﯾﻜﻮن اﻟﻤﺴﺎر ﻛﺎﻟﺘﺎﻟﻲ
"" ../file.txt
اﺳم اﻟﺟدول إﺿﺎﻓﺔ اﻟﺑﯾﺎﻧﺎت اﻟﻣوﺟودة ﻓﻲ ھذا اﻟﻣﺗﻐﯾر إﻟﻰ اﻟﺣﻘل bt1
إﺛﻧﻰ ﻋﺷر -:إذا أﻧﺷﺄﻧﺎ ﻧﻣوذج إدﺧﺎل ﻓﻲ اﻟـ htmlﻓﯾﺟب أن ﻧﺣدد اﻟﺻﻔﺣﺔ اﻟﺗﻲ ﻧرﯾد أن
ﻧﻌﺎﻟﺞ اﻟﺑﯾﺎﻧﺎت اﻟﺗﻲ ﯾدﺧﻠﮭﺎ اﻟﻣﺳﺗﺧدم وذﻟك ﻣن ﺧﻼل اﻟﺧﺎﺻﯾﺔ actionواﻟﺗﻲ ھﻲ إﺣدا
ﺧﺻﺎﺋص اﻟوﺳم formﻟﻛن إذا أردﻧﺎ أن ﻧﻌﺎﻟﺞ اﻟﺑﯾﺎﻧﺎت ﻓﻲ ﻧﻔس اﻟﺻﻔﺣﺔ اﻟﺗﻲ ﻓﯾﮭﺎ ﻧﻣوذج
اﻷدﺧﺎل ﻓﯾﻣﻛن أن ﻻ ﻧﺿﻊ اﻟﺧﺎﺻﯾﺔ actionو ﻟﻛن ﯾﻔﺿل وﺿﻊ ھذه اﻟﺧﺎﺻﯾﺔ واﺿﺎﻓﺔ ﻧﻔس
اﺳم اﻟﺻﻔﺣﺔ اﻟﺗﻲ ﻓﯾﮭﺎ اﻟﻧﻣوذج ) وھﻲ ﻧﻔﺳﮭﺎ اﻟﺻﻔﺣﺔ اﻟﺗﻲ ﺳﻧﻌﺎﻟﺞ اﻟﺑﯾﺎﻧﺎت ﻓﯾﮭﺎ ( ﻟﻛن ﻟو ﻓرﺿﺎ ً
ﺗم ﺗﻐﯾﯾر اﺳم اﻟﺻﻔﺣﺔ ﻓﯾﻣﺎ ﺑﻌد ﻓﺳﯾﺣدث ﺧطﺄ ﺑﻛل ﺗﺄﻛﯾد وﻟﺗﻼﻓﻲ ھذه اﻟﻣﺷﻛﻠﺔ ﺳﻧﺟﻌل ﻗﯾﻣﺔ
اﻟﺧﺎﺻﯾﺔ actionﺗﺳﺎوي ]’ $_SERVER[‘ PHP_SELFوھذه اﻟﺗﻌﻠﯾﻣﺔ ﺗﻌﻧﻲ أن ﯾﺗم
اﻟﻣﻌﺎﻟﺟﺔ ﻓﻲ ﻧﻔس اﻟﺻﻔﺣﺔ .
ﻣﺛﺎل/
>” >? ]’ <form action=” <?php $_SERVER[‘ PHP_SELF