You are on page 1of 144

‫اﻟﻔﮭﺮس‬

‫اﻟﻤﻘﺪﻣﺔ ‪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‬وﻣﻦ اﻟﻤﺤﺘﻤﻞ أن أﺿﯿﻒ‬
‫ﻋﻠﻰ ھﺬا اﻟﻤﺮﺟﻊ اﻟﺼﻐﯿﺮ ﺑﻌﺾ اﻹﺿﺎﻓﺎت وأﺟﺮي ﻋﻠﯿﮫ ﺑﻌﺾ اﻟﺘﻌﺪﯾﻼت وأﻧﺸﺮه ﻛﻄﺒﻌﮫ ﺛﺎﻧﯿﺔ )‬
‫ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ ( ‪.‬‬

‫ارﺣﺐ ﺑﻜﻞ أﺳﺌﻠﺘﻜﻢ واﺳﺘﻔﺴﺎراﺗﻜﻢ وأﯾﻀﺎ ً ﻛﻞ أﻗﺘﺮاﺣﺎﺗﻜﻢ ﻷﻧﮫ ﻛﻤﺎ ﻗﻠﺖ ﺳﺎﺑﻘﺎ ً إﻧﻲ ﻻزﻟﺖ ﻓﻲ ﺑﺪاﯾﺔ‬
‫طﺮﯾﻘﻲ ﻓﻲ اﻟﺒﺮﻣﺠﺔ وﻻ زﻟﺖ اﺗﻌﻠﻢ ﺷﻲء ﺟﺪﯾﺪ ﻛﻞ ﯾﻮم ‪.‬‬

‫‪ahmedcia17@gmail.com‬‬ ‫ﯾﻤﻜﻨﻜﻢ اﻟﺘﻮاﺻﻞ ﻣﻌﻲ ﻋﻠﻰ اﻟﻌﻨﻮان اﻟﺘﺎﻟﻲ ‪-:‬‬


‫)‪(4‬‬ ‫اﻟﻣﻘدﻣﺔ‬

‫ﻧﻈﺮة ﻋﺎﻣﺔ ﻋﻦ اﻟﻠﻐﺔ‬

‫‪ 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‬‬

‫وھﻨﺎك ﻋﺪة دوال ﺗﺴﺘﺨﺪم ﻣﻊ ﻟﻐﺔ ‪ php‬وﻣﻦ ھﺬه اﻟﺪوال ‪-:‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪echo‬‬
‫وظﯿﻔﺔ ھﺬه اﻟﺪاﻟﺔ )‪ (echo‬طﺒﺎﻋﺔ )ﻋﺮض( ﻣﺎ ﯾﻜﺘﺐ داﺧﻠﮭﺎ‬

‫ﻣﺜﺎل ‪-:‬‬
‫‪<?php‬‬

‫;"‪echo "welcome‬‬

‫>?‬

‫ﻛﻤﺎ ﻻﺣﻈﺖ ﻓﺄن اﻟﻨﺺ اﻟﻤﺪﺧﻞ ﯾﻜﺘﺐ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ) " " ( ‪ ,‬ﺣﯿﺚ إﻧﻨﺎ ﻧﻜﺘﺐ ھﺬﯾﻦ‬
‫اﻟﻌﻼﻣﺘﯿﻦ ﻓﻲ أي ﻣﻜﺎن ﻧﺮﯾﺪ أن ﻧﻀﻊﻧﺼﺎ ً وذﻟﻚ ﻟﻜﻲ ﻧﺨﺒﺮ اﻟﻤﺤﻠﻞ إن ھﺬه ﻗﯿﻤﺔ ﻧﺼﯿﺔ ‪ ,‬وﻟﻜﻦ إن‬
‫أردﻧﺎ إن ﻧﻜﺘﺐ ﻗﯿﻤﺔ ﻋﺪدﯾﺔ ﻓﻼ ﻧﺤﺘﺎج أن ﻧﻜﺘﺐ ﻋﻼﻣﺘﻲ اﻟﺘﻨﺼﯿﺺ ‪ ,‬وﻓﻲ ﻧﮭﺎﯾﺔ اﻟﺴﻄﺮ ﻧﻀﻊ ﻓﺎرزة‬
‫ﻣﻨﻘﻮطﺔ ) ; ( ﺣﯿﺚ إن ھﺬه اﻟﻔﺎرزة اﻟﻤﻨﻘﻮطﺔ ﺗﻮﺿﻊ ﻓﻲ ﻧﮭﺎﯾﺔ ﻛﻞ ﺳﻄﺮ ﻓﻲ ھﺬه اﻟﻠﻐﺔ وذﻟﻚ ﻟﻜﻲ‬
‫ﻧﺨﺒﺮ اﻟﻤﺤﻠﻞ ﻋﻦ اﻧﺘﮭﺎء ﺳﻄﺮ وﺑﺪأ ﺳﻄﺮ ﺟﺪﯾﺪ ‪ ,‬وإن ﻧﺴﯿﺖ وﺿﻊ ھﺬه اﻟﻔﺎرزة اﻟﻤﻨﻘﻮطﺔ ﻓﻲ ﻧﮭﺎﯾﺔ‬
‫أي ﺳﻄﺮ ﻓﺴﻮف ﯾﺤﺪث ﺧﻄﺄ ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬اﻟﻔﻮاﺻﻞ ﺑﯿﻦ اﻟﺪاﻟﺔ واﻟﻘﯿﻤﺔ ﻓﻲ ﻟﻐﺔ ‪ ) php‬ﻓﻲ ﻛﻞ دوال اﻟﻠﻐﺔ ( ﻻ ﺗﺆﺛﺮ ﻋﻠﻰ اﻟﺒﺮﻧﺎﻣﺞ ‪,‬‬
‫ﻻﺣﻆ ھﺬﯾﻦ اﻟﻤﺜﺎﻟﯿﻦ ﺣﯿﺚ ﻻ ﯾﻮﺟﺪ ﻓﺮق ﺑﯿﻨﮭﻤﺎ ‪-:‬‬
‫;"‪echo "welcome‬‬

‫‪echo‬‬ ‫" ‪" welcome‬‬ ‫;‬


‫)‪(6‬‬ ‫اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ‪( Variables‬‬

‫اﻟﻔﺼﻞ اﻷول‬
‫) اﻟﻤﺘﻐﯿﺮات ‪( Variables‬‬

‫إن اﻟﻤﺘﻐﯿﺮ ﯾﻤﻜﻦ أن ﯾﻌﻄﻰ أي اﺳﻢ وأﯾﻀﺎ ﯾﻤﻜﻦ إﻋﻄﺎﺋﮫ أي ﻗﯿﻤﺔ وﻟﻜﻲ ﯾﺘﻌﺮف اﻟﻤﺤﻠﻞ ﻋﻠﻰ إن ھﺬا‬
‫ﻣﺘﻐﯿﺮ ﯾﺠﺐ وﺿﻊ ﻋﻼﻣﺔ دوﻻر ) ‪ ( $‬ﻗﺒﻞ اﺳﻢ اﻟﻤﺘﻐﯿﺮ ‪ ,‬وﻻﺣﻆ أن اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﺣﺴﺎس ﻟﺤﺎﻟﺔ‬
‫اﻷﺣﺮف اﻟﻜﺒﯿﺮة واﻟﺼﻐﯿﺮة ﺣﯿﺚ إن ‪ M‬ﻟﯿﺴﺖ ھﻲ ﻧﻔﺴﮭﺎ ‪ , m‬ﯾﻤﻜﻦ أن ﯾﺘﻜﻮن اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻣﻦ‬
‫اﻟﺤﺮوف اﻻﻧﺠﻠﯿﺰﯾﺔ اﻟﻜﺒﯿﺮة واﻟﺼﻐﯿﺮة وﻣﻦ أرﻗﺎم ) ‪ ( 0 - 9‬وﻟﻜﻦ ﻻ ﯾﻤﻜﻦ أن ﯾﻜﻮن اﺳﻢ اﻟﻤﺘﻐﯿﺮ‬
‫ﻓﻘﻂ أرﻗﺎم وﯾﻤﻜﻦ أن ﺗﺪﺧﻞ رﻣﺰ واﺣﺪ ﻓﻘﻂ ﻓﻲ اﺳﻢ اﻟﻤﺘﻐﯿﺮ وھﺬا اﻟﺮﻣﺰ ھﻮ ) _ ( ﻣﺜﻞ ‪, $man_5‬‬
‫ﻻﺣﻆ أن اﻟﺮﻣﺰ ) _ ( ﯾﺨﺘﻠﻒ ﻋﻦ اﻟﺮﻣﺰ ) ‪. ( -‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; ‪$Ahmed = 50‬‬
‫;" ‪$Ali = " welcome‬‬

‫; ‪echo $Ahmed‬‬

‫; ‪echo $Ali‬‬

‫ﻛﺬﻟﻚ ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ ﻧﺺ وﻣﺘﻐﯿﺮ ﻓﻲ داﺧﻞ اﻟﺪال ‪ , echo‬ﻣﺜﺎل ‪-:‬‬


‫; "‪$value = "welcome‬‬

‫; "‪echo " my text is $value‬‬

‫ﻟﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ) ‪( my text is welcome‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﯾﻤﻜﻦ إﻧﺸﺎء ﻣﺘﻐﯿﺮ اﺳﻤﮫ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ ﻏﯿﺮة وذﻟﻚ ﺑﺈﺿﺎﻓﺔ اﻟﻌﻼﻣﺔ ) ‪ ( $‬ﻗﺒﻞ اﺳﻢ اﻟﻤﺘﻐﯿﺮ ‪,‬‬
‫وﯾﺴﺘﻔﺎد ﻣﻦ ھﺬه اﻟﻄﺮﯾﻘﺔ إذا أرﯾﺪ رﺑﻂ ﻣﺘﻐﯿﺮ ﻣﻌﯿﻦ ﺑﻤﺘﻐﯿﺮ آﺧﺮ ﻣﺜﻞ اﻻﺳﻢ وﻛﻠﻤﺔ اﻟﺴﺮ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; "‪$a = "sager‬‬

‫; "‪$$a = "My program‬‬

‫ﻻﺣﻆ ھﻨﺎ إﻧﻨﺎ أﻧﺸﺄﻧﺎ ﻣﺘﻐﯿﺮ ﺟﺪﯾﺪ اﺳﻤﮫ ‪ sager‬وﻗﯿﻤﺘﮫ ‪. My program‬وﻟﻄﺒﺎﻋﺔ ھﺬا اﻟﻤﺘﻐﯿﺮ‬
‫اﻟﺠﺪﯾﺪ ﯾﻤﻜﻦ أن ﻧﻜﺘﺐ أي ﺻﯿﻐﺔ ﻣﻦ ھﺬه اﻟﺼﯿﻎ اﻟﺜﻼﺛﺔ ‪-:‬‬
‫)‪(7‬‬ ‫اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ‪( Variables‬‬

‫; ‪echo $$a‬‬

‫; }" ‪echo ${" sager‬‬

‫; }"‪echo ${"$a‬‬

‫* ﯾﻤﻜﻦ إﻧﺸﺎء ﻣﺘﻐﯿﺮ ﻓﺎرغ وذﻟﻚ ﺑﻌﺪم إﺳﻨﺎد أي ﻗﯿﻤﺔ ﻟﮫ‬

‫; ‪$X‬‬

‫او ﯾﻤﻜﻦ أن ﻧﻌﻄﯿﮫ ﻗﯿﻤﺔ ﻓﺎرﻏﺔ وذﻟﻚ ﺑﺈﺳﻨﺎد اﻟﻘﯿﻤﺔ ‪ null‬واﻟﺘﻲ ھﻲ ﺗﻌﺒﺮ ﻋﻦ اﻟﻼﺷﻲء ) اﻟﻘﯾﻣﺔ‬
‫اﻟﻔﺎرﻏﺔ (‬

‫; ‪$x=null‬‬

‫اﻟﻤﺘﻐﯿﺮات اﻟﺜﺎﺑﺘﺔ‬

‫وھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺘﻐﯿﺮات ﯾﺘﻢ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ ﻛﻤﺘﻐﯿﺮات ﻋﺎﻣﺔ ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺼﻔﺤﺔ ﻛﺎﻣﻠﺔ ‪,‬‬
‫واﻟﻔﺮق ﺑﯿﻨﮫ وﺑﯿﻦ اﻟﻤﺘﻐﯿﺮ اﻟﻌﺎدي إﻧﮫ ﻻ ﯾﺴﺒﻖ ﺑﻌﻼﻣﺔ دوﻻر ) ‪ ( $‬ﻋﻨﺪ ﻛﺘﺎﺑﺔ اﻻﺳﻢ وﯾﻨﻄﺒﻖ ﻋﻠﻰ‬
‫اﻻﺳﻢ ﻣﺎ ﯾﻨﻄﺒﻖ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ اﻟﻌﺎدي ﻣﻦ ﺣﺮوف وأرﻗﺎم وﻋﻼﻣﺔ ) _ ( وﯾﺴﺘﺨﺪم ھﺬا اﻟﻨﻮع ﻣﻦ‬
‫اﻟﻤﺘﻐﯿﺮات ﻓﻲ ﺣﻔﻆ اﻟﻤﺘﻐﯿﺮات اﻟﮭﺎﻣﺔ ﻋﻠﻰ ﻣﺴﺘﻮى ﺻﻔﺤﺔ أو ﺑﺮﻧﺎﻣﺞ ﻛﺎﻣﻞ وﯾﺘﻢ ﻓﺘﺢ ھﺬا اﻟﻤﺘﻐﯿﺮ‬
‫ﻋﻦ طﺮﯾﻖ اﻟﺪاﻟﺔ ) ‪ ( define‬واﻟﻘﺎﻋﺪة اﻟﻌﺎﻣﺔ ﻟﮭﺎ ‪-:‬‬
‫;) ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ‪ ,‬اﺳﻢ اﻟﻤﺘﻐﯿﺮ ( ‪define‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫;)"‪define ( man ,"Ahmed‬‬

‫; ‪echo man‬‬
‫)‪(8‬‬ ‫اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ‪( Variables‬‬

‫أﻧﻮاع اﻟﻤﺘﻐﯿﺮات‬

‫أوﻻ ً ‪ -:‬اﻟﻤﺘﻐﯿﺮات اﻟﺮﻗﻤﯿﺔ أو اﻟﻌﺪدﯾﺔ ) ‪( Integers‬‬

‫ﯾﺘﻢ ﺗﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮات اﻟﺮﻗﻤﯿﺔ ﺑﻤﺠﺮد إﻋﻄﺎء اﻟﻤﺘﻐﯿﺮ ﻗﯿﻤﺔ رﻗﻤﯿﺔ وﺑﺪون ﻋﻼﻣﺎت اﻗﺘﺒﺎس ) " " ( ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪$x = 5‬‬

‫وﯾﻤﻜﻦ إﺟﺮاء ﻋﻤﻠﯿﺎت اﻟﺠﺒﺮ اﻟﺮﯾﺎﺿﯿﺔ ﻋﻠﯿﮫ ‪ ,‬ﻣﺜﺎل ‪-:‬‬


‫; ‪$x = 5‬‬
‫; ‪$y =6‬‬
‫; ‪$z = $x + $y‬‬
‫; ‪echo $z‬‬
‫;‪Echo 2+2‬‬ ‫‪+‬‬ ‫ﺟﻤﻊ‬
‫;‪Echo 4-2‬‬ ‫‪-‬‬ ‫طﺮح‬
‫;‪Echo 4/2‬‬ ‫‪/‬‬ ‫ﻗﺴﻤﺔ‬
‫‪Echo 7%2‬‬ ‫‪%‬‬ ‫ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ‬
‫;‪Echo 2*2‬‬ ‫*‬ ‫ﺿﺮب‬
‫‪$x++‬‬ ‫‪++‬‬ ‫إﺿﺎﻓﺔ رﻗﻢ واﺣﺪ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ‬
‫‪$x--‬‬ ‫‪--‬‬ ‫طﺮح رﻗﻢ واﺣﺪ ﻣﻦ اﻟﻤﺘﻐﯿﺮ‬

‫ﻻﺣﻆ أﺳﺒﻘﯿﺔ اﻟﻌﻤﻠﯿﺎت اﻟﺮﯾﺎﺿﯿﺔ ‪-:‬‬

‫أوﻻ ً ‪ -:‬اﻷﻗﻮاس ‪.‬‬

‫ﺛﺎﻧﯿﺎ ً ‪ -:‬اﻟﻀﺮب ﺛﻢ اﻟﻘﺴﻤﺔ ‪.‬‬

‫ﺛﺎﻟﺜﺎ ً ‪ -:‬اﻟﻄﺮح ﺛﻢ اﻟﺠﻤﻊ ‪.‬‬

‫اﻟﻌﻤﻠﯿﺎت اﻟﺮﯾﺎﺿﯿﺔ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮات‬


‫; ‪$x= 3E10‬‬ ‫‪ -1‬ﻣﺘﻐﯿﺮ أﺳﻲ ﺣﯿﺚ أن ‪ E‬ﯾﻤﺜﻞ رﻣﺰ اﻷس‬
‫‪ -2‬إﺟﺮاء ﻋﻤﻠﯿﺔ ﺟﺒﺮ رﯾﺎﺿﯿﺔ ﻋﻠﻰ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﻘﺪﯾﻤﺔ وإﺿﺎﻓﺔ اﻟﻌﻤﻠﯿﺔ اﻟﺠﺪﯾﺪة ﻋﻠﯿﮫ‬
‫)‪(9‬‬ ‫اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ‪( Variables‬‬

‫ﻣﺜﺎل‪/‬‬

‫;‪$x=5‬‬
‫; ‪$x * = 4‬‬
‫; ‪echo $x‬‬
‫ھﻨﺎ ﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ‪20‬‬

‫ﺛﺎﻧﯿﺎ ً ‪ -:‬اﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ ) ‪( string‬‬

‫ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﻤﺘﻐﯿﺮات ﯾﻘﺒﻞ ﺗﺨﺰﯾﻦ ﻧﺼﻮص وأرﻗﺎم وﻟﻜﻦ ﺑﻮﺿﻌﮭﺎ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ )" "(‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫;"‪$y = " welcome‬‬

‫ﺛﺎﻟﺜﺎ ‪ -:‬اﻟﻤﺘﻐﯿﺮات اﻟﻤﻨﻄﻘﯿﺔ ) ‪( Boolean‬‬

‫وھﺬا اﻟﻤﺘﻐﯿﺮ ﺗﻜﻮن ﻟﮫ ﻗﯿﻤﺘﺎن أﻣﺎ ‪ true‬أو ‪ false‬وﻧﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺔ ھﺬا اﻟﻤﺘﻐﯿﺮ ﻓﻘﻂ ﺑﺈﺿﺎﻓﺔ إﺣﺪى‬
‫اﻟﻘﯿﻤﺘﯿﻦ إﻟﻰ اﻟﻤﺘﻐﯿﺮ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪$y = true‬‬

‫; ‪$x = false‬‬
‫) ‪( 10‬‬ ‫اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ‪( Variables‬‬

‫دوال اﻟﻤﺘﻐﯿﺮات‬

‫‪ ‬اﻟﺪاﻟﺔ ‪intval‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ ﺗﺤﻮﯾﻞ اﻟﻤﺘﻐﯿﺮ ﺑﺠﻤﯿﻊ أﺣﻮاﻟﮫ إﻟﻰ ﻣﺘﻐﯿﺮ ﺻﺤﯿﺢ ‪ ,‬ﻓﺈذا ﻛﺎنﻧﺼﺎ ً وﯾﻮﺟﺪ ﺑﮫ رﻗﻢ‬
‫ﯾﺘﻢ اﺳﺘﺨﺮاج اﻟﺮﻗﻢ ﻣﻨﮫ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫;)"‪echo intval ("504Man‬‬ ‫‪//504‬‬

‫;)‪echo intval (50.6‬‬ ‫‪//50‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪floatval‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ أو اﺳﺘﺨﺮاج اﻷرﻗﺎم اﻟﻌﺸﺮﯾﺔ ﻣﻦ اﻟﻤﺘﻐﯿﺮات ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫;)"‪echo floatval ("60.7Man‬‬ ‫‪//60.7‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪doubleval‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﺤﻮل اﻟﻤﺘﻐﯿﺮ إﻟﻰ ﻧﻮع اﻟﺮﻗﻤﻲ اﻟﻤﻀﺎف ﻣﻦ أي ﻧﻮع آﺧﺮ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; "‪$x="arab 50.9 program‬‬

‫; ) ‪$y=doubleval( $x‬‬

‫; ‪print $y‬‬

‫ﺗﻜﻮن اﻟﻨﺘﯿﺠﺔ ‪50.9‬‬


‫) ‪( 11‬‬ ‫اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ‪( Variables‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪gettype‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ إﺧﺮاج ﻗﯿﻤﺔ ھﻲ ﻋﺒﺎرة ﻋﻦ ﻧﻮع اﻟﻤﺘﻐﯿﺮ أﻣﺎ ﻧﺼﻲ ‪ string‬أو رﻗﻤﻲ )ﻋﺪدي(‬
‫‪ integer‬أو ﻣﻨﻄﻘﻲ ‪ , Boolean‬وذﻟﻚ ﺑﻮاﺳﻄﺔ ﺗﻤﺮﯾﺮ اﻟﻤﺘﻐﯿﺮ ﻋﻠﻰ اﻟﺪاﻟﺔ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪$y =10‬‬

‫;)‪echo gettype ($y‬‬

‫ﺣﯿﺚ ﺳﯿﺘﻢ اﻟﺤﺼﻮل ﻋﻠﻰ ﻧﻮع اﻟﻤﺘﻐﯿﺮ وھﻮ ‪ integer‬وطﺒﺎﻋﺘﮫ‬

‫‪ ‬اﻟﺪاﻟﺔ ‪var_dump‬‬

‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺘﺤﺪﯾﺪ ﻧﻮع اﻟﻤﺘﻐﯿﺮ واﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﯿﮫ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ) ‪var_dump( $x‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪settype‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻰ ﺗﺤﻮﯾﻞ ﻧﻮع اﻟﻤﺘﻐﯿﺮ اﻟﻤﻤﺮر إﻟﯿﮭﺎ إﻟﻰ أي ﻧﻮع آﺧﺮ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪$Bol = false‬‬

‫; ) "‪echo settype ( $Bol , "string‬‬

‫ﺣﯿﺚ ﯾﻤﻜﻦ وﺿﻊ ‪ integer‬ﻟﯿﻜﻮن رﻗﻢ‬


‫) ‪( 12‬‬ ‫اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ‪( Variables‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪unset‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻰ إزاﻟﺔ وﺟﻮد اﻟﻤﺘﻐﯿﺮ ﻣﻦ اﻟﺼﻔﺤﺔ ‪ ,‬ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻓﻲ اﻟﺤﻤﺎﯾﺔ أﺣﯿﺎﻧﺎ‬
‫وأﺣﯿﺎﻧﺎ ً أﺧﺮى ﻓﻲ ﺗﺴﺮﯾﻊ ﻋﻤﻞ اﻟﺼﻔﺤﺎت ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; "‪$y = "value‬‬
‫; ‪echo $y‬‬
‫; ) ‪unset ( $y‬‬
‫; ‪echo $y‬‬
‫اﻟﻨﺘﯿﺠﺔ إﻧﮫ ﺳﺘﻈﮭﺮ اﻟﻘﯿﻤﺔ ‪ value‬ﻣﺮة واﺣﺪة ﻓﻘﻂ ﻷﻧﮫ أزﯾﻞ ﺑﻌﺪ اﻟﻌﺮض اﻷول ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪isset‬‬

‫ﺗﺴﺘﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ إذا ﻛﺎن ھﺬا اﻟﻤﺘﻐﯿﺮ ﺗﻢ إﻧﺸﺎﺋﮫﻣﺴﺒﻘﺎ ً أم ﻟﻢ ﯾﺘﻢ إﻧﺸﺎؤه ‪ ,‬وھﻲ ﻻ ﺗﺘﻄﻠﺐ‬
‫ﺳﻮى اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﺗﺮﯾﺪ ﻓﺤﺺ وﺟﻮده وﺳﻮف ﺗﺮﺟﻊ اﻟﻘﯿﻤﺔ ) ‪ ( 1‬إذا ﺗﻢ إﻧﺸﺎؤه وﻻ ﺗﺮﺟﻊ‬
‫ﺷﻲء إذا ﻟﻢ ﯾﻜﻦ اﻟﻤﺘﻐﯿﺮ ﻣﻮﺟﻮد ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; "‪$n = "Man‬‬

‫; ) ‪echo isset ( $n‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪is_bool‬‬

‫ﺗﺒﯿﻦ ھﺬه اﻟﺪاﻟﺔ ھﻞ اﻟﻤﺘﻐﯿﺮ ﻣﻦ ﻧﻮع ‪ Boolean‬إذا ﻛﺎن ﻛﺬﻟﻚ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ ‪. true‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ‪$x=false‬‬

‫} ; "‪if( is_bool( $x ) ) { print "Boolean‬‬


‫) ‪( 13‬‬ ‫اﻟﻔﺻل اﻷول ) اﻟﻣﺗﻐﯾرات ‪( Variables‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪is_double‬‬

‫ﺗﺒﯿﻦ ھﺬه اﻟﺪاﻟﺔ ھﻞ اﻟﻤﺘﻐﯿﺮ ﻣﻦ اﻟﻨﻮع ‪ double‬إذا ﻛﺎن ﻛﺬﻟﻚ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ ‪. true‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪is_int‬‬

‫ﺗﺒﯿﻦ ھﺬه اﻟﺪاﻟﺔ ھﻞ اﻟﻤﺘﻐﯿﺮ ﻣﻦ اﻟﻨﻮع ‪ integer‬إذا ﻛﺎن ﻛﺬﻟﻚ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ ‪. true‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪is_numeric‬‬

‫ﺗﺑﯾن ھذه اﻟداﻟﺔ ھل اﻟﻣﺗﻐﯾر ﻣن ﻧوع رﻗﻣﻲ إذا ﻛﺎن ﻛذﻟك ﺗﻌﯾد اﻟﻘﯾﻣﺔ ‪. true‬‬
‫) ‪( 14‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (‬

‫اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ‬
‫) ﻋﺒﺎرات اﻟﺸﺮط واﻟﺘﻜﺮار (‬

‫أوﻻ ً ‪ -:‬اﻟﻌﺒﺎرات اﻟﺸﺮطﯿﺔ‬

‫‪ -1‬اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ ) ‪( if‬‬

‫اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬


‫} اﻷﻣﺮ اﻟﺬي ﺳﯿﻨﻔﺬ ﻋﻨﺪ ﺗﺤﻘﻖ اﻟﺸﺮط { ) ﺣﺎﻟﺔ اﻟﺸﺮط ( ‪if‬‬

‫ھﺬه اﻟﻌﺒﺎرة ﺗﻌﻨﻲ إذا ﺗﺤﻘﻖ اﻟﺸﺮط ﻧﻔﺬ ھﺬا اﻷﻣﺮ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ‪$x =10‬‬
‫} ; " ﺗﺴﺎوي " ‪if ( $x == 10 ) { echo‬‬
‫* ﻻﺣﻆ اﻟﻔﺎرزة اﻟﻤﻨﻘﻮطﺔ ﻻ ﺗﻮﺿﻊ ﻓﻲ ﺣﺎﻟﺔ اﻟﺸﺮط ‪.‬‬

‫إﻟﯿﻚ ھﺬا اﻟﺠﺪول ﯾﻮﺿﺢ ﻋﻼﻣﺎت اﻟﻤﻘﺎرﻧﺔ ‪-:‬‬

‫اﻟﻮﺻﻒ‬ ‫اﻷداة‬
‫ﻟﻤﺴﺎواة اﻟﻘﯿﻢ ﻓﻘﻂ‬ ‫==‬
‫ﻟﻤﺴﺎواة اﻟﻘﯿﻢ وﻧﻮع اﻟﻤﺘﻐﯿﺮ‬ ‫===‬
‫أﺻﻐﺮ ﻣﻦ‬ ‫<‬
‫أﻛﺒﺮ ﻣﻦ‬ ‫>‬
‫أﺻﻐﺮ ﻣﻦ أو ﯾﺴﺎوي‬ ‫=<‬
‫أﻛﺒﺮ ﻣﻦ أو ﯾﺴﺎوي‬ ‫=>‬
‫ﻻ ﯾﺴﺎوي‬ ‫><‬
‫ﻋﺪم اﻟﻤﺴﺎواة ﻓﻲ اﻟﻘﯿﻤﺔ ﻓﻘﻂ‬ ‫=!‬
‫ﻋﺪم اﻟﻤﺴﺎواة ﻓﻲ اﻟﻘﯿﻤﺔ واﻟﻨﻮع‬ ‫= =!‬
‫) ‪( 15‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (‬

‫‪ -2‬اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ ) ‪( if else‬‬

‫وھﻲ ﺗﺸﺒﮫ ﻋﺒﺎرة ‪ if‬ﻟﻜﻦ ھﻨﺎ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط ﺳﯿﻨﻔﺬ أﻣﺮ آﺧﺮ ﺑﻌﺪ ‪. else‬‬

‫اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬


‫} أﻣﺮ ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط { ‪ } else‬أﻣﺮ ﺗﺤﻘﻖ اﻟﺸﺮط { ) ﺣﺎﻟﺔ اﻟﺸﺮط ( ‪if‬‬

‫ﻣﺜﺎل ‪/‬‬
‫; ‪$x = 5‬‬

‫} ; " أﻛﺒﺮ" ‪if ($x > 20 ) { eho‬‬

‫} ; " أﺻﻐﺮ " ‪else { echo‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ ) ‪ ( if‬ﻓﻲ داﺧﻞ ﻋﺒﺎرة ﺷﺮطﯿﺔ ﺛﺎﻧﯿﺔ ﻻﺣﻆ ھﺬا اﻟﻤﺜﺎل ‪-:‬‬
‫; ‪$x = 10‬‬
‫} ; " ‪if ( $x > 10 ) { echo " Big‬‬
‫} ; " ‪else if ( $x < 10 ) { echo " small‬‬
‫} ; " ‪else { echo " welcome‬‬

‫وﯾﻤﻜﻦ أن ﻧﻀﯿﻒ ﻋﺒﺎرات ﻛﻤﺎ ﻧﺸﺎء ‪ ,‬ﻛﺬﻟﻚ ﯾﻤﻜﻦ ﺗﻌﺸﯿﺶ اﻟﻌﺒﺎرات اﻟﺸﺮطﯿﺔ ‪.‬‬

‫ﻣﺜﺎل ‪/‬‬

‫; " ‪$x = " Ahmed‬‬


‫; ‪$y = 50‬‬
‫} ; " اﻻﺳﻢ واﻟﺮﻗﻢ ﺻﺤﯿﺤﺎن " ‪if ( $x == " Ahmed " ) { if ( $y = 50 ) { echo‬‬
‫} } ; " ﻓﻘﻂ اﻟﺮﻗﻢ ﻏﯿﺮ ﺻﺤﯿﺢ " ‪else { echo‬‬
‫} ; " اﺳﻢ ﺗﺴﺠﯿﻞ اﻟﺪﺧﻮل ﺧﺎطﺊ " ‪else { echo‬‬

‫‪ -3‬ﻋﺑﺎرة اﻟﺷرط ‪ if‬اﻟﻣﺧﺗﺻرة ) ? (‬

‫ﻋﺑﺎرة اﻟﺷرط ھذه ھﻲﺗﻣﺎﻣﺎ ً ﻧﻔس اﻟﻌﺑﺎرة اﻟﺳﺎﺑﻘﺔ ‪ if‬ﻟﻛﻧﮭﺎ ﻓﻲ اﻟﻌﺎدة ﺗﺳﺗﺧدم ﻟﻠﺷروط اﻟﻘﺻﯾرة‬
‫اﻟﻣﻛوﻧﺔ ﻣن ﺳطر واﺣد وﯾﻣﻛن أن ﻧﺿﻊ ﺑﻌدھﺎ ﻧﻘطﺗﯾن ﻟﺗﻛون ﺑﻣﺛﺎﺑﺔ ‪ , else‬وﺗﻛون اﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ‬
‫ﻟﮭﺎ ﺑﮭذا اﻟﺷﻛل‬
‫; ﻛود ﻋدم ﺗﺣﻘق اﻟﺷرط ‪ :‬ﻛود ﺗﺣﻘق اﻟﺷرط ? اﻟﺷرط‬
‫) ‪( 16‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (‬

‫‪ -4‬اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ ) ‪( switch‬‬

‫وﺗﺴﺘﺨﺪم ھﺬه اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﻋﺪة ﺷﺮوط وﺗﻨﻔﯿﺬ أﻣﺮ ﺧﺎص ﺑﻜﻞ ﺷﺮط وإن أردﻧﺎ‬
‫اﺳﺘﺨﺪام اﻟﻌﺒﺎرة ‪ if‬ﻓﺈﻧﻨﺎ ﻧﺤﺘﺎج إﻟﻰ ﺗﻜﺮار ھﺬه اﻟﻌﺒﺎرة ﻋﺪة ﻣﺮات وﻟﺘﻼﻓﻲ ھﺬا اﻟﺘﻜﺮار ﻧﺴﺘﺨﺪم‬
‫اﻟﻌﺒﺎرة ) ‪.( switch‬‬

‫اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬


‫{ ) اﻟﻘﯾﻣﺔ ( ‪switch‬‬
‫; ﻗﯾﻣﺔ ‪case‬‬ ‫اﻟﺗﺣﻘق ﻣن اﻟﻘﯾﻣﺔ‬
‫; ﺗﻧﻔﯾذ أﻣر‬ ‫ﯾﻧﻔذ إذا ﻛﺎن اﻟﺷرط ﻣﺗﺣﻘق‬
‫; ‪break‬‬ ‫إﻏﻼق ‪case‬‬
‫; ﻗﯾﻣﺔ ‪case‬‬
‫; ﺗﻧﻔﯾذ أﻣر‬ ‫وھﻧﺎ ﺗﻌﺎد اﻟﻌﻣﻠﯾﺔ وﯾﻣﻛن‬
‫; ‪break‬‬ ‫اﻹﻋﺎدة أﻛﺛر ﻣن ﻣرة‬

‫‪default:‬‬ ‫إذا ﻟﻢ ﺗﺘﺤﻘﻖ أي ﻗﯿﻤﺔ ﻣﻦ‬


‫; ﺗﻨﻔﯿﺬ أﻣﺮ‬ ‫اﻟﻘﯿﻢ اﻟﺴﺎﺑﻘﺔ‬
‫;‪break‬‬
‫}‬

‫ﻣﺜﺎل ‪-:‬‬

‫; ‪$x =2‬‬
‫;‪switch ( $x ) { case 1‬‬
‫; " واﺣﺪ " = ‪$y‬‬
‫; ‪break‬‬
‫;‪case 2‬‬
‫; " اﺛﻨﺎن " = ‪$y‬‬
‫; ‪break‬‬
‫;‪case 3‬‬
‫; " ﺛﻼﺛﺔ " = ‪$y‬‬
‫} ; ‪break‬‬
‫) ‪( 17‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (‬

‫ﺛﺎﻧﯿﺎ ً ‪ -:‬ﻋﺒﺎرات اﻟﺘﻜﺮار‬

‫‪ -1‬ﻋﺒﺎرة اﻟﺘﻜﺮار ) ‪( for‬‬

‫وھﻲ ﺗﺴﺘﻌﻤﻞ ﻟﺘﻜﺮار ﻋﻤﻠﯿﺔ ﻣﻌﯿﻨﺔ ﻋﺪة ﻣﺮات ‪.‬‬

‫اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬


‫} ﺗﻨﻔﯿﺬ أﻣﺮ أو ﻣﺠﻤﻮﻋﺔ أواﻣﺮ { ) ﺣﺎﻟﺔ ﺗﺤﻘﻖ اﻟﺸﺮط ; اﻟﺸﺮط ; ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ( ‪for‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫} ;">‪for ($x = 1; $x < 5 ; $x++) { echo $x . "<br‬‬

‫ﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ھﻜﺬا ‪-:‬‬


‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫‪ -2‬ﻋﺒﺎرة اﻟﺘﻜﺮار ) ‪( while‬‬


‫اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬
‫} ﺗﻨﻔﯿﺬ أﻣﺮ أو ﻣﺠﻤﻮﻋﺔ أواﻣﺮ { ) اﻟﺸﺮط ( ‪while‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪$x = 1‬‬

‫} ;">‪while ( $x < 5) { $x++ ; echo $x . "<br‬‬

‫ﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ھﻜﺬا ‪-:‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫* ﻻﺣﻆ اﻟﻔﺮق ﺑﯿﻦ اﻟﻌﺒﺎرة ‪ for‬واﻟﻌﺒﺎرة ‪. while‬‬
‫) ‪( 18‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ) ﻋﺑﺎرات اﻟﺷرط واﻟﺗﻛرار (‬

‫‪ -3‬ﻋﺒﺎرة اﻟﺘﻜﺮار ) ‪( do while‬‬

‫ﺣﯿﺚ ﻓﻲ ھﺬه اﻟﺤﻠﻘﺔ ﺳﻮف ﯾﺘﻢأوﻻ ً ﺗﻨﻔﯿﺬ اﻟﻜﻮد وﺑﻌﺪھﺎ ﯾﺘﻢ اﻟﺘﺤﻘﻖ ﻣﻦ اﻟﺸﺮط ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ‬
‫ھﻲ ‪-:‬‬
‫; ) اﻟﺸﺮط ( ‪ } while‬ﻛﻮد { ‪do‬‬
‫) ‪( 19‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻟث ) اﻟﻌﻼﻣﺎت اﻟﻣﻧطﻘﯾﺔ (‬

‫اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ‬
‫اﻟﻌﻼﻣﺎت اﻟﻤﻨﻄﻘﯿﺔ ) ! ‪( and , or , xor ,‬‬

‫إن ھﺬه اﻟﻌﻼﻣﺎت اﻟﻤﻨﻄﻘﯿﺔ ﺗﺘﯿﺢ ﻟﻚ ﺗﻨﻔﯿﺬ اﻟﻜﻮد ﺑﻌﺪ اﻟﺘﺤﻘﻖ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﺷﺮوطوأﯾﻀﺎ ً ﺗﻨﻔﯿﺬ اﻟﻜﻮد‬
‫إذا ﺗﺤﻘﻘﺖ ﻛﻞ اﻟﺷروط ) ‪ ( and‬أو ﺗﺤﻘﻖ ﺷﺮط واﺣﺪ أو ﻛﻠﮭﺎ ) ‪ ( or‬وﯾﻣﻛن اﻟﺗﺣﻘق ﻣن ﺻﺣﺔ‬
‫ﺷرط واﺣد ﻓﻘط وﻻ ﯾﺻﺢ ﺗﺣﻘق أﻛﺛر ﻣن ﺷرط ) ‪ ( xor‬وﯾﻤﻜﻦأﯾﻀﺎ ً اﻟﺘﺤﻘﻖ ﻣﻦ ﻋﺪم ﺻﺤﺔ‬
‫ﺷﻲء ﻟﻜﻲ ﺗﻌﻤﻞ ﻋﻠﻰ ﺗﻨﻔﯿﺬ ﺷﻲء آﺧﺮ ) ! (‬

‫‪ -1‬اﻟﻤﻌﺎﻣﻞ ) ‪ ( and‬وﻧﻈﯿﺮه ) && (‬

‫ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل ) ‪ ( and‬أو ) && ( ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ ﻋﺪة ﺷﺮوط ﻓﻲ وﻗﺖ واﺣﺪ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪$x = 10‬‬

‫; ‪$y = 5‬‬

‫}; " ‪if ( $x == 10 && $y == 6 ) { echo " Hi‬‬

‫ﻧﻼﺣﻆ ﺑﺄﻧﮫ ﻟﻦ ﯾﻈﮭﺮ ﺷﻲء ‪.‬‬

‫‪ -2‬اﻟﻤﻌﺎﻣﻞ ) ‪ ( or‬وﻧﻈﯿﺮه ) || (‬

‫ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل ) ‪ ( or‬أو ) || ( ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ ﺷﺮط واﺣﺪ أو ﻛﻞ اﻟﺸﺮوط اﻟﻤﻮﺟﻮدة ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪$x = 10‬‬

‫; ‪$y = 5‬‬

‫} ; " ‪if ( $x == 10 or $ == 6 ) { echo " Hi‬‬

‫ﺗﻼﺣﻆ ﺑﺄﻧﮫ ﺳﯿﻨﻔﺬ اﻟﺸﺮط ‪.‬‬


‫) ‪( 20‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻟث ) اﻟﻌﻼﻣﺎت اﻟﻣﻧطﻘﯾﺔ (‬

‫‪ -3‬اﻟﻣﻌﺎﻣل ) ‪ ( xor‬وﻧظﯾره ) ^ (‬

‫ﯾﻣﻛن اﺳﺗﻌﻣﺎل ‪ xor‬او ^ ﻟﻠﺗﺣﻘق ﻣن ﺻﺣﺔ ﺷرط واﺣد ﻣن ﺑﯾن ﻋدة ﺷروط وﻻ ﯾﺻﺢ أن ﯾﺗﺣﻘق‬
‫أﻛﺛر ﻣن ﺷرط‬
‫; ‪$x = 10‬‬

‫; ‪$y = 5‬‬

‫} ; " ‪if ( $x == 10 xor $y == 6 ) { echo " Hi‬‬

‫‪ -4‬اﻟﻤﻌﺎﻣﻞ ) ! (‬

‫ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ) ‪( Not‬أﺑﺪا ً ﻷﻧﮭﺎ ﻏﯿﺮ ﻣﻮﺟﻮدة ﻓﻲ ﻟﻐﺔ ‪ php‬ﻟﻜﻦ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻧﻈﯿﺮھﺎ ) ! (‬
‫وﻟﮫ ﻧﻔﺲ وظﯿﻔﺔ ) ‪ ( Not‬ﺣﯿﺚ ﯾﺘﺄﻛﺪ ﻣﻦ أن ھﻨﺎك ﻗﯿﻤﺔ ﻏﯿﺮ ﺻﺤﯿﺤﺔ ) ‪ ( false‬ﻟﻜﻲ ﯾﺘﻢ ﺗﻨﻔﯿﺬ ﺷﻲء‬
‫ﻣﻌﯿﻦ‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪$f = 5‬‬

‫} ; " ‪if ! ($f == 6 ) { echo " Hi‬‬

‫ﺗﻼﺣﻆ ﺑﺄﻧﮫ ﺳﯿﻄﺒﻊ ‪ Hi‬ﻷن اﻟﺸﺮط ﻣﻨﻔﻲ ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﯾﻤﻜﻦ اﻟﺠﻤﻊ ﺑﯿﻦ اﻟﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﯿﺔ ) ! ‪( and , or , xor ,‬‬


‫) ‪( 21‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫اﻟﻔﺼﻞ اﻟﺮاﺑﻊ‬
‫) اﻟﻤﺼﻔﻮﻓﺎت ‪( Arrays‬‬

‫ﯾﺘﻢ إﻧﺸﺎء اﻟﻤﺼﻔﻮﻓﺔ ﺑﺸﻜﻞ ﻣﺸﺎﺑﮫ ﻹﻧﺸﺎء اﻟﻤﺘﻐﯿﺮ ﺣﯿﺚ ﯾﺘﻢ وﺿﻊ اﻟﻌﻼﻣﺔ دوﻻر )‪ ($‬وﺑﻌﺪھﺎ اﺳﻢ‬
‫اﻟﻤﺼﻔﻮﻓﺔ ﻣﺜﻞ ﺷﺮوط اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻣﻦ ﺣﺮوف وأرﻗﺎم أو أﺣﺪھﻤﺎ وﺑﻌﺪھﺎ ﻧﻀﻊ اﻟﻤﺴﺎواة وﺑﻌﺪھﺎ‬
‫ﻧﻀﻊ ﻛﻠﻤﺔ ‪ array‬وھﺬه اﻟﻜﻠﻤﺔ ﺗﻮﺿﻊ ﻟﺘﻌﺮﯾﻒ اﻟﻤﺤﻠﻞ ﻋﻠﻰ إﻧﮭﺎ ﻣﺼﻔﻮﻓﺔ وﺑﻌﺪھﺎ ﻧﻀﻊ اﻟﻘﯿﻢ ﺑﯿﻦ‬
‫ﻗﻮﺳﯿﻦ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; )"‪$x = array ("ahmed","ali","salem‬‬

‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺗﻢ ﻓﺘﺢ اﻟﻤﺼﻔﻮﻓﺔ ‪ $x‬وﺗﻢ إﻋﻄﺎﺋﮭﺎ اﻟﻘﯿﻢ ) ‪ ( ahmed ali salem‬أي إﻧﮭﺎ ﺗﺤﺘﻮي‬
‫ﻋﻠﻰ ﺛﻼﺛﺔ ﻗﯿﻢ وﯾﻜﻮن ﺷﻜﻞ اﻟﻤﺼﻔﻮﻓﺔ اﻟﻮھﻤﻲ ﻛﻤﺎ ﺑﺎﻟﺠﺪول ﺣﯿﺚ إن ﻛﻞ ﻗﯿﻤﺔ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺄﺧﺬ‬
‫رﻗﻤﺎﻣﻌﯿﻨﺎ ً ﯾﺒﺪأ ﺑﺎﻟﺼﻔﺮ وإﻟﻰ ﻣﺎﻻ ﻧﮭﺎﯾﺔ ‪.‬‬

‫اﻟﻘﯿﻤﺔ اﻟﻤﻌﻄﺎة‬ ‫اﻟﺘﺴﻠﺴﻞ ﻓﻲ‬


‫‪value‬‬ ‫اﻟﻤﺼﻔﻮﻓﺔ ‪index‬‬
‫‪ahmed‬‬ ‫‪0‬‬
‫‪ali‬‬ ‫‪1‬‬
‫‪salem‬‬ ‫‪2‬‬

‫ﻻﺣﻆ أﻧﻨﺎ ﯾﻤﻜﻦ أن ﻧﻌﻄﻲ ﻟﻜﻞ ﻗﯿﻤﺔرﻗﻤﺎ ً ﺗﺴﻠﺴﻠﻲ ﻣﻌﯿﻦ ﻣﻦ اﺧﺘﯿﺎرﻧﺎ ﻛﻤﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ‪-:‬‬
‫; )"‪$x = array ( 4=> "ahmed" , 9=> "ali" , 2=> "salem‬‬

‫وﯾﻤﻜﻦ ﺗﻐﯿﺮ ﻗﯿﻤﺔ أي ﻋﻨﺼﺮﻣﺜﻼ ً ﺳﻨﻐﯿﺮ اﺳﻢ ‪ ahmed‬ﺑﺎﺳﻢ ) ﻟﻤﯿﺎء (‬


‫; " ﻟﻤﯿﺎء " = ] ‪$x [ 4‬‬

‫وﯾﻤﻜﻦ إﺿﺎﻓﺔ ﻋﻨﺼﺮ ﺟﺪﯾﺪ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ‬


‫; " ‪$x [ ] = " kaled‬‬

‫ﻓﺄﻧﮫ ﺳﯿﻀﯿﻒ ھﺬا اﻟﻌﻨﺼﺮ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ ‪ x‬وﺑﻤﺎ أﻧﻨﺎ ﻟﻢ ﻧﻌﻄﮫ رﻗﻢ ﺗﺴﻠﺴﻠﻲ ﻓﺈﻧﮫ ﺳﯿﺄﺧﺬ رﻗﻢ ﺗﺴﻠﺴﻠﻲ‬
‫اﻓﺘﺮاﺿﻲ ﯾﻜﻮن أﻛﺒﺮ ﻣﻦ رﻗﻢ أﻛﺒﺮ ﺗﺴﻠﺴﻞ ﻣﻮﺟﻮد ‪,‬وﻣﺜﻼ ً ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﻮف ﯾﺄﺧﺬ اﻟﺮﻗﻢ ) ‪. ( 10‬‬
‫) ‪( 22‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫وﯾﻤﻜﻦ أن ﻧﻜﺘﺐ ﺑﺸﻜﻞ ﻋﻤﻮدي ھﻜﺬا ‪-:‬‬


‫;) ( ‪$x = array‬‬

‫; "‪$x[ ] = " ahmed‬‬

‫;" ‪$x [6] = " ali‬‬

‫; "‪$x [2] = " salem‬‬

‫ﺣﯿﺚأوﻻ ً ﻋﺮﻓﻨﺎ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ‪ $x‬ﺛﻢ ﺟﻌﻠﻨﺎھﺎ ﻓﺎرﻏﺔ ) ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ رﻗﻢ ( وﺑﻌﺪ ذﻟﻚ ﻧﻀﻊ اﻟﻘﯿﻢ‬
‫اﻟﺘﻲ ﻧﺸﺎء وﺑﺎﻟﺘﺴﻠﺴﻞ اﻟﺬي ﻧﺸﺎء واﻟﺘﻲ ﻟﻢ ﻧﻀﻊ ﻟﮭﺎ رﻗﻢ ﺗﺴﻠﺴﻠﻲ ﺗﺄﺧﺬرﻗﻤﺎ ً اﻓﺘﺮاﺿﯿﺎ ً ‪ ,‬وﯾﻤﻜﻦ‬
‫اﻟﺘﻌﺎﻣﻞ ﺑﺴﮭﻮﻟﺔ ﻣﻊ ھﺬه اﻟﻤﺼﻔﻮﻓﺔ وطﺒﺎﻋﺔ أي ﺻﻒ أو أي ﻋﻨﺼﺮ ﻧﺮﯾﺪ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ">‪echo "$x[6] <br> $x[2] <br‬‬

‫ﻣﻼﺣﻈﺔ ‪ /‬ﯾﻤﻜﻦ وﺿﻊ ﻗﯿﻤﺔ ﻧﺼﯿﺔ ﻓﻲ ﻣﻜﺎن اﻟﺘﺴﻠﺴﻞ ‪ ,‬ﻣﺜﻞ ‪-:‬‬


‫; "‪$x [ "man" ] = "ahmed‬‬

‫* إذا أردﻧﺎ طﺒﺎﻋﺔ ﻋﻨﺎﺻﺮ ﻣﺼﻔﻮﻓﺔ ﺗﺘﻜﻮن ﻣﻦ ﻋﺪد ﻛﺒﯿﺮ ﻣﻦ اﻟﻌﻨﺎﺻﺮ ﻓﻼ ﯾﻤﻜﻦ أن ﻧﺴﺘﺨﺪم ‪echo‬‬
‫ﻟﻄﺒﺎﻋﺔ ﻛﻞ ﻋﻨﺼﺮ ﻋﻠﻰ ﺣﺪه ﻓﻠﺬﻟﻚ ﻧﺤﺘﺎج إﻟﻰ ﻋﺒﺎرة ﺗﻜﺮار ‪ ,‬ﻣﺜﻼ ً ﻟﻮ ﻛﺎﻧﺖ ﻟﺪﯾﻨﺎ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي‬
‫ﻋﻠﻰ ) ‪ ( 100‬ﻋﻨﺼﺮ وﻟﻢ ﻧﻘﻢ ﺑﺘﺤﺪﯾﺪ ﺗﺮﺗﯿﺐ اﻟﻌﻨﺎﺻﺮ إذن ﻓﻨﺤﻦ ﻧﻌﻠﻢ ﺑﺄن اﻟﺘﺮﺗﯿﺐ ﯾﺒﺪأ ﻣﻦ اﻟﺮﻗﻢ‬
‫ﺻﻔﺮ إﻟﻰ اﻟﺮﻗﻢ ) ‪ ( 99‬اﻟﺬي ﯾﻤﺜﻞ ﻗﯿﻤﺔ اﻟﻌﻨﺼﺮ ) ‪ ( 100‬ﻓﺒﮭﺬه اﻟﺤﺎﻟﺔ ﻧﺴﺘﻄﯿﻊ طﺒﺎﻋﺔ اﻟﻌﻨﺎﺻﺮ‬
‫ﺑﺎﺳﺘﺨﺪام ﻋﺒﺎرة اﻟﺘﻜﺮار ) ‪. ( for‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ) "‪ "Lee‬إﻟﻰ أن ﻧﺼﻞ إﻟﻰ اﻟﻌﻨﺼﺮ ‪$people = array ("ahmed" , "ali" , .... 100‬‬

‫{ ) ‪for ( $x =0 ; $x < 100 ; $x++‬‬

‫} ; " >‪echo "$people [ $x ] <br‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﻓﻲ ﻟﻐﺔ ‪ html‬إن وﺿﻌﻨﺎ اﻟﺨﺎﺻﯿﺔ ‪ name‬وھﻲ ﺧﺎﺻﯿﺔ ﺗﺴﺘﺨﺪم ﻓﻲ اﻟﻨﻤﺎذج وھﺬا اﻻﺳﻢ‬
‫اﻟﻤﻌﻄﻰ ﯾﺘﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫ ﻋﻠﻰ إﻧﮫ ﻣﺘﻐﯿﺮ ﻓﻲ ﺣﺎل أردﻧﺎ أن ﻧﺮﺑﻄﮫ ﺑﻠﻐﺔ ‪ , php‬وﻟﻜﻦ إذا أﻋﻄﯿﻨﺎه اﺳﻢ‬
‫وﺑﻌﺪھﺎ وﺿﻌﻨﺎ ﻗﻮﺳﯿﻦ ] [ ﻓﺎرﻏﯿﻦ ﺳﯿﺘﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ھﺬه اﻟﻤﺪﺧﻼت ﻋﻠﻰ أﻧﮭﺎ ﻣﺼﻔﻮﻓﺔ وﺗﻀﺎف‬
‫ﺗﻠﻘﺎﺋﯿﺎ ً ‪.‬‬
‫) ‪( 23‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫> ‪<select name = " x[ ] " multiple‬‬


‫>‪<option> Ahmed </option‬‬ ‫ﺻﻔﺤﺔ ‪html‬‬
‫>‪<option> Ali </option‬‬
‫>‪</select‬‬
‫} ;" >‪for ($a = 0 ; $a < 2 ; $a++ ) { echo "$x [ $a ] <br‬‬ ‫ﺻﻔﺤﺔ ‪php‬‬

‫دوال اﻟﻤﺼﻔﻮﻓﺎت‬

‫‪ ‬اﻟﺪاﻟﺔ ‪print_r‬‬

‫اﺳﻢ ھﺬه اﻟﺪاﻟﺔ ﻣﺄﺧﻮذ ﻣﻦ ‪ Print Array‬أي أطﺒﻊ اﻟﻤﺼﻔﻮﻓﺔ ﺣﯿﺚ إن ﻓﻲ ھﺬه اﻟﺪاﻟﺔ ﯾﺘﻢ طﺒﺎﻋﺔ‬
‫اﻟﻤﺼﻔﻮﻓﺔ ﺑﺸﻜﻞ ھﺮﻣﻲ أو ﻣﺘﺸﻌﺐ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫;)"‪$x =array ("ahmed","ali‬‬


‫;)">‪echo ("<pre‬‬
‫;)‪print_r ($x‬‬
‫;)">‪echo("</pre‬‬

‫وﺿﻌﻨﺎ اﻟﻮﺳﻤﯿﻦ >‪ <pre‬و >‪ </pre‬وﺑﯿﻨﮭﻢ اﻟﺪاﻟﺔ ‪ print_r‬وذﻟﻚ ﻟﻜﻲ ﯾﻜﻮن اﻟﻨﺎﺗﺞ ﺑﺸﻜﻞ ھﺮﻣﻲ‬
‫وﯾﻤﻜﻦ أن ﻧﻠﻐﻲ ھﺬﯾﻦ اﻟﻮﺳﻤﯿﻦ وﻧﻜﺘﺐ ﻓﻘﻂ اﻟﺪاﻟﺔ ﻟﺘﻜﻮن اﻟﻄﺒﺎﻋﺔ ﺑﺸﻜﻞ أﻓﻘﻲ ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪array_merge‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﻣﺴﺌﻮﻟﺔ ﻋﻦ دﻣﺞ ﻣﺼﻔﻮﻓﺘﯿﻦ ﻓﻲ ﻣﺼﻔﻮﻓﺔ واﺣﺪة ﺟﺪﯾﺪة ‪.‬‬


‫) ‪( 24‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; )"‪$x = array ("a","b","c‬‬


‫; )"‪$y = array ("d","e","f‬‬
‫;)‪$z =array_merge ($x ,$y‬‬
‫;)">‪print ("<pre‬‬
‫;)‪print_r ($z‬‬
‫;)">‪print ("</pre‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪array_reverse‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ ﻋﻜﺲ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; )"‪$x = array ("a","b","c‬‬
‫; )‪$y = array_reverse ($x‬‬
‫;)">‪echo ("<pre‬‬
‫; )‪print_r($y‬‬
‫; )">‪echo ("</pre‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪array_pop‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ ﺣﺬف آﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬


‫; )"‪$x = array ("a","b","c‬‬

‫; )‪array_pop ($x‬‬

‫; )‪print_r ($x‬‬

‫ھﻨﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﯿﺘﻢ ﺣﺬف اﻟﻌﻨﺼﺮ ‪ c‬ﻷﻧﮫ آﺧﺮ ﻋﻨﺼﺮ ‪,‬ﻣﺜﻼ ً ﻟﻮ أﻋﻄﯿﻨﺎ اﻟﻌﻨﺼﺮ ‪ c‬رﻗﻢ ﺗﺴﻠﺴﻠﻲ‬
‫‪ 10‬واﻟﻌﻨﺼﺮ ‪ b‬رﻗﻢ ﺗﺴﻠﺴﻠﻲ ‪ 15‬ﻓﺎﻧﮫأﯾﻀﺎ ً ﺳﻮف ﯾﺤﺬف اﻟﻌﻨﺼﺮ ‪ c‬ﺑﻐﺾ اﻟﻨﻈﺮ ﻋﻦ اﻟﺘﺴﻠﺴﻞ‬
‫ﻓﺄﻧﮫ ﯾﺤﺬف آﺧﺮ ﻋﻨﺼﺮ ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪array_shift‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ ﺣﺬف أول ﻋﻨﺼﺮ ﺑﺎﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬


‫) ‪( 25‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫ﻣﺛﺎل‪/‬‬
‫; )"‪$x = array ("a","b","c‬‬

‫; )‪array_shift ($x‬‬

‫; )‪print_r ($x‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪array_push‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ إﺿﺎﻓﺔ ﻋﻨﺎﺻﺮ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ ﺑﺸﻜﻞ ﺳﮭﻞ وﺳﺮﯾﻊ ‪,‬ﺧﺼﻮﺻﺎ ً إن ﻛﻨﺎ ﻧﺮﯾﺪ‬
‫إﺿﺎﻓﺔ ﻋﺪد ﻛﺒﯿﺮ ﻣﻦ اﻟﻌﻨﺎﺻﺮ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; " ‪$a [ ] = "ali‬‬

‫; "‪$a [ ] = "salem‬‬

‫; ) ‪array_push ( $a, ahmed , kalid‬‬

‫ﻻﺣﻆ ھﻨﺎ أﺿﻔﻨﺎ ﻋﻨﺼﺮﯾﻦ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ ‪ ,‬وﯾﻤﻜﻦ إﺿﺎﻓﺔ ﻋﻨﺼﺮ واﺣﺪ أو أﻛﺜﺮ ﻛﻤﺎ ﻧﺸﺎء ‪ ,‬ﻟﻜﻦ‬
‫أوﻻ ً ﺗﻜﺘﺐ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ﺛﻢ ﺗﻮﺿﻊ اﻟﻌﻨﺎﺻﺮ ‪ ,‬وﯾﻤﻜﻦ أن ﻧﻀﻊ ﻗﯿﻢ اﻟﻌﻨﺎﺻﺮ ﺑﯿﻦ ﻋﻼﻣﺎت ﺗﻨﺼﯿﺺ‬

‫‪ ‬اﻟﺪاﻟﺘﯿﻦ ‪ implode‬و ‪explode‬‬

‫اﻟﺪاﻟﺔ ‪ implode‬ﺗﻌﻤﻞ ﻋﻠﻰ إﺿﺎﻓﺔ ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ﻓﻲ ﻣﺎ ﺑﯿﻦ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ ‪ ,‬وﺗﺤﻮل ھﺬه اﻟﻤﺼﻔﻮﻓﺔ‬
‫إﻟﻰ ﻣﺘﻐﯿﺮ ) ﻗﯿﻤﺔ ﻧﺼﯿﺔ ( ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ) ”‪$array = (“a” , “b” , “c‬‬

‫; ) ‪$x = implode( “ - “ , $array‬‬

‫; ‪echo $x‬‬

‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺗﺤﻮﻟﺖ اﻟﻤﺼﻔﻮﻓﺔ إﻟﻰ ﻣﺘﻐﯿﺮ وﯾﻤﻜﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ وﻓﻖ ھﺬا اﻷﺳﺎس وﻓﻲ ھﺬا اﻟﻤﺜﺎل‬
‫ﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ) ‪ ( a - b - c‬وﻛﻤﺎ ﺗﻼﺣﻆ ﻓﻘﺪ ﺗﻢ اﻟﻔﺼﻞ ﺑﯿﻦ اﻟﻘﯿﻢ ﺑﻌﻼﻣﺔ – وھﻲ اﻟﺘﻲ أدﺧﻠﻨﺎھﺎ ﻓﻲ‬
‫اﻟﺒﺎراﻣﯿﺘﺮ اﻷول ﻟﻠﺪاﻟﺔ وﯾﻤﻜﻦ إدﺧﺎل أي ﻋﻼﻣﺔ أو ﻛﻠﻤﺔ ‪.‬‬
‫) ‪( 26‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫أﻣﺎ اﻟﺪاﻟﺔ ‪ explode‬ﺗﻌﻤﻞ ﻋﻛس اﻟداﻟﺔ ‪ implode‬ﺣﯾث أﻧﮭﺎ ﺳﺗﺣول اﻟﻣﺗﻐﯾر إﻟﻰ ﻣﺻﻔوﻓﺔ‬
‫ﺑﺣﺳب ﻣﺣرف ﻣﻌﯾن ﯾﺟب أن ﯾﻛون ﻣﺿﺎف ﻓﻲ ﻣﺎ ﺑﯾن ﻋﻧﺎﺻر اﻟﻣﺗﻐﯾر ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; "‪$t = "a - b - c‬‬


‫; ) ‪$r = explode ( " - " , $t‬‬
‫; ]‪echo $r[1‬‬
‫ﺣﯿﺚ ھﻨﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺗﻢ ﺗﺤﻮﯾﻞ اﻟﻤﺘﻐﯿﺮ ‪ $t‬إﻟﻰ ﻣﺼﻔﻮﻓﺔ وﻣﺎ ﺑﯿﻦ ﻛﻞ ﻋﻼﻣﺔ ) ‪ ( -‬ﺗﻜﻮن ﻗﯿﻤﺔ‬
‫ﻣﻦ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ وﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﯿﻄﺒﻊ اﻟﻘﯿﻤﺔ ‪B‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪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‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; ) " ‪$a = array ( " ali " , " salem‬‬


‫; ) ‪$t = key ( $a‬‬
‫; ‪echo $t‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪array_keys‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ أرﻗﺎم اﻟﻌﻨﺎﺻﺮ وأﺳﻤﺎء اﻟﻌﻨﺎﺻﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ) ‪$x=array_keys( $myarray‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪current‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ إﯾﺠﺎد ﻗﯿﻤﺔ أول ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ‪ ,‬أي ﻗﯿﻤﺔ أول ﻋﻨﺼﺮ ) اﻟﻌﻨﺼﺮ اﻟﻨﺸﻂ‬
‫(‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ) " ‪$a = array ( " ali " , " salem‬‬

‫; ) ‪$t = current ( $a‬‬

‫; ‪echo $t‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﯾﻤﻜﻦ ﺗﻨﺸﯿﻂ أي ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وذﻟﻚ ﻋﻦ طﺮﯾﻖ اﻟﺪاﻟﺘﯿﻦ ) ‪ ( next‬و ) ‪( prev‬‬
‫اﻟﻠﺘﺎن ﺗﻌﻤﻼن ﻋﻠﻰ اﻟﺘﺠﻮل ﺑﯿﻦ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ‪ ,‬ﻻﺣﻆ إن اﻟﻌﻨﺼﺮ اﻟﻨﺸﻂاﻓﺘﺮاﺿﯿﺎ ً ھﻮ اﻟﻌﻨﺼﺮ‬
‫اﻷول وإن أردﻧﺎ أن ﻧﻨﺸﻂ اﻟﻌﻨﺼﺮ اﻟﺜﺎﻧﻲ ﻧﻀﻊ اﻟﺪاﻟﺔ ) ‪ ( next‬ﻣﺮة واﺣﺪة ‪ ,‬وإن أردﻧﺎ أن ﻧﻨﺸﻂ‬
‫اﻟﻌﻨﺼﺮ اﻟﺜﺎﻟﺚ ﻧﻀﻊ اﻟﺪاﻟﺔ ) ‪ ( next‬ﻣﺮﺗﯿﻦ وھﻜﺬا ﻧﺴﺘﻤﺮ ﻋﻨﺼﺮ ﺑﻌﺪ ﻋﻨﺼﺮ ‪ ,‬وإن أردﻧﺎ أن‬
‫ﻧﺮﺟﻊ ﺧﻄﻮة ﻟﻠﺨﻠﻒ ﻧﻀﻊ اﻟﺪاﻟﺔ ) ‪ ( prev‬ﻣﺮة واﺣﺪة وإن أردﻧﺎ أن ﻧﺮﺟﻊ ﺧﻄﻮﺗﯿﻦ ﻧﻀﻊ اﻟﺪاﻟﺔ )‬
‫‪ ( prev‬ﻣﺮﺗﯿﻦ وھﻜﺬا ﻧﺮﺟﻊ ﺧﻄﻮة ﺑﻌﺪ ﺧﻄﻮة ‪,‬أذا ً ﯾﻤﻜﻨﻨﺎ أن ﻧﺘﻘﺪم ﺧﻄﻮة ﺧﻄﻮة ﺑﻘﺪر ﻣﺎ ﻧﺸﺎء أو‬
‫ﻧﺮﺟﻊ ﺧﻄﻮة ﺧﻄﻮة ﺑﻘﺪر ﻣﺎ ﻧﺸﺎء ‪.‬‬
‫) ‪( 28‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; ) "‪$a = array ( "A", "B" , "C‬‬


‫; )‪next ($a‬‬
‫; )‪next ($a‬‬
‫; )‪prev ($a‬‬
‫; ">‪echo key ($a) . "<br‬‬
‫; ">‪echo current ($a) . "<br‬‬
‫وھﻜﺬا ﻓﻨﺤﻦ ﻧﺸﻄﻨﺎ اﻟﻌﻨﺼﺮ اﻟﺜﺎﻧﻲ ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ) ‪ list‬و ‪( each‬‬

‫ﺗﺴﺘﻄﯿﻊ ﺑﺎﺳﺘﺨﺪام ھﺬه اﻟﺪاﻟﺘﯿﻦ وﻋﻦ طﺮﯾﻖ اﻟﺘﻜﺮار ) ‪ ( 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‬‬

‫‪ ‬أداة ﺗﻜﺮار اﻟﻤﺼﻔﻮﻓﺎت ) ‪( foreach‬‬

‫ھﺬا اﻟﺘﻜﺮار ﻣﻦ اﻷﺷﯿﺎء اﻟﺠﯿﺪة ﻓﻲ ‪ php‬وھﻮ ﯾﺴﺎﻋﺪك ﻋﻠﻰ ﻣﻌﺮﻓﺔ ﻋﻨﺎﺻﺮ ﻣﺼﻔﻮﻓﺔ ﻣﻌﯿﻨﺔ أو‬
‫طﺒﺎﻋﺔ ﻣﺤﺘﻮﯾﺎﺗﮭﺎ ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬
‫} ‪ ) { code‬اﺳﻢ ﻣﺘﻐﯿﺮ‪ => 2‬اﺳﻢ ﻣﺘﻐﯿﺮ‪ As 1‬اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ( ‪foreach‬‬

‫ﺣﯿﺚ إن ) اﺳﻢ ﻣﺘﻐﯿﺮ ‪ ( 1‬ﯾﻤﺜﻞ اﻟﺘﺴﻠﺴﻞ ﻟﻠﻤﺼﻔﻮﻓﺔ و ) اﺳﻢ ﻣﺘﻐﯿﺮ ‪ ( 2‬ﯾﻤﺜﻞ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; )"‪$t = array (a=> "ahmed" , b=> "basim" , c=> "car‬‬


‫} ; ) ‪foreach ( $t As $x => $y ) { echo ( $x . "-----" . $y‬‬

‫‪ ‬اﻟﺪاﻟﺔ ;) (‪: is_array‬‬

‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻟﺘﺤﻘﻖ ﻣﻦ اﻟﻮﺳﯿﻂ اﻟﻤﻤﺮر ﻟﮭﺎ ھﻞ ھﻮ ﻣﺼﻔﻮﻓﺔ او ﻻ وذﻟﻚ ﺑﺈﻋﺎدة اﻟﻘﯿﻤﺔ ‪true‬‬
‫او ‪ false‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ‬
‫;)‪is_array($array‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪in_array‬‬

‫ﺗﻌﻮد ﺑﺎﻟﻘﯿﻤﺔ ‪ true‬إذا ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ ﻣﻮﺟﻮدة ﻓﻲ داﺧﻞ اﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ) "‪$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‬‬

‫وﻓﻲ ھذا اﻟﻣﺛﺎل ﺳﯾطﺑﻊ ﻟﻧﺎ اﻟﻘﯾﻣﺔ ‪value1‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪var_dump‬‬

‫وھﻲ ﺗﺴﺘﺨﺪم ﻟﻄﺒﺎﻋﺔ اﻟﻤﺼﻔﻮﻓﺔ وﻟﻜﻦ ﺑﺸﻜﻞ ﻣﺮﺗﺐ ‪ ,‬ﻣﺜﺎل‪/‬‬


‫; )‪var_dump($x‬‬
‫) ‪( 31‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪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‬‬

‫ﺗﻌﻮد ھﺬه اﻟﺪاﻟﺔ ﺑﺠﻤﯿﻊ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﺟﺪﯾﺪة ‪.‬‬


‫) ‪( 32‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫دوال اﻟﺤﺮﻛﺔ ﻟﻤﺆﺷﺮ ﻗﺮاءة اﻟﻤﺼﻔﻮﻓﺔ‬


‫ﻋﻤﻠﮭﺎ‬ ‫اﻟﺪاﻟﺔ‬
‫ﺗﺼﻐﯿﺮ اﻟﻤﺆﺷﺮ ووﺿﻌﮫ ﻓﻲ ﺑﺪاﯾﺔ اﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬ ‫‪Reset‬‬
‫اﻟﺘﻮﺟﮫ ﻟﻠﻌﻨﺼﺮ اﻟﺘﺎﻟﻲ ‪.‬‬ ‫‪next‬‬
‫اﻟﺘﻮﺟﮫ ﻟﻠﻌﻨﺼﺮ اﻟﺴﺎﺑﻖ ‪.‬‬ ‫‪Rrev‬‬
‫‪ current‬ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺤﺎﻟﻲ ‪.‬‬
‫وﺿﻊ اﻟﻤﺆﺷﺮ ﻋﻨﺪ آﺧﺮ ﻋﻨﺼﺮ ‪.‬‬ ‫‪End‬‬

‫ﻓﺮز اﻟﻤﺼﻔﻮﻓﺎت‬

‫‪ ‬اﻟﺪاﻟﺔ ;) ( ‪sort‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﺄﺧﺬ ﻣﺤﺘﻮﯾﺎت اﻟﻤﺼﻔﻮﻓﺔ وﻣﻦ ﺛﻢ ﺗﻔﺮز ﻋﻨﺎﺻﺮھﺎھﺠﺎﺋﯿﺎ ً اﻋﺘﻤﺎدا ً ﻋﻠﻰ اﻷﺣﺮف اﻟﻜﺒﯿﺮ أوﻻ ً ﺛﻢ‬
‫اﻟﺼﻐﯿﺮة ‪ ,‬ﺗﺘﻄﻠﺐ ھﺬه اﻟﺪاﻟﺔ ﻓﻘﻂ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ‪ ,‬ﻻﺣﻆ ھﺬا اﻟﻤﺜﺎل ‪-:‬‬

‫; )"‪$n = array ("Ahmed" , "ali" , " Basem" , "kalid‬‬


‫; )‪sort ($n‬‬
‫{ ) )‪while ( list ($x , $y) = each ( $n‬‬
‫} ; " ‪echo "<br> $x <br> $y‬‬

‫‪ ‬اﻟﺪاﻟﺔ ;) ( ‪asort‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻧﻔﺲ ﻋﻤﻞ اﻟﺪاﻟﺔ ‪ sort‬وﻟﻜﻦ اﻟﻔﺮق ﺑﯿﻨﮭﻤﺎ ھﻮ إن اﻟﺪاﻟﺔ ‪ sort‬ﺗﺴﺘﺒﺪل اﻟﺤﺮوف ﺑﺄرﻗﻢ ﻓﻲ‬
‫اﻟﻔﮭﺮﺳﺔ أﻣﺎ اﻟﺪاﻟﺔ ‪ asort‬ﺗﻀﻊ اﻟﺤﺮوف ﻛﻤﺎ ھﻲ وﺗﻔﺮزھﺎ ﻛﻤﺎ ﺗﻔﻌﻞ اﻟﺪاﻟﺔ ‪ , sort‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ‬
‫‪-:‬‬

‫; ) اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ( ‪asort‬‬


‫) ‪( 33‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ) اﻟﻣﺻﻔوﻓﺎت ‪( Arrays‬‬

‫‪ ‬اﻟﺪاﻟﺘﯿﻦ ‪ rsort‬و ‪arsort‬‬

‫ﺗﻌﻤﻞ اﻟﺪاﻟﺔ ‪ rsort‬ﻧﻔﺲ ﻋﻤﻞ اﻟﺪاﻟﺔ ‪ sort‬وﻟﻜﻦ ﺑﺸﻜﻞ ﻋﻜﺴﻲ ‪ ,‬وﺗﻌﻤﻞ اﻟﺪاﻟﺔ ‪ arsort‬ﻧﻔﺲ ﻋﻤﻞ اﻟﺪاﻟﺔ‬
‫‪ asort‬وﻟﻜﻦ ﺑﺸﻜﻞ ﻋﻜﺴﻲ ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺬه اﻟﺪاﻟﺘﯿﻦ ھﻲ ‪-:‬‬

‫; ) اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ( ‪rsort‬‬

‫; ) اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ( ‪arsort‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل دوال اﻟﻔﺮز ﻣﻊ اﻟﺤﺮوف اﻟﻌﺮﺑﯿﺔ ) إذا ﻛﺎن اﻟﺴﯿﺮﻓﺮ ﯾﺪﻋﻢ اﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ ( ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪ksort‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔأﯾﻀﺎ ً ﻋﻠﻰ ﻓﺮز اﻟﻤﺼﻔﻮﻓﺎت ﻟﻜﻦ ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ رﻗﻢ ﺗﺴﻠﺴﻞ اﻟﻌﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وﻟﯿﺲ‬
‫ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ ﻗﯿﻤﺔ اﻟﻌﻨﺼﺮ ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬

‫; ) اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ( ‪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‬‬

‫وھﻲ اﻟﺼﯿﻐﺔ اﻟﻤﺸﻔﺮة ﻟﻠﻮﻗﺖ وﯾﺘﻢ اﺳﺘﺨﺮاﺟﮭﺎ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ ‪. time‬‬

‫; ) ( ‪echo time‬‬ ‫ﻣﺜﺎل ‪-:‬‬

‫* ﻋﺮض اﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ‬

‫ﯾﺘﻢ ذﻟﻚ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ ‪ date‬وﻟﻜﻦ ﯾﺠﺐ أن ﻧﺨﺒﺮه ﻋﻦ طﺮﯾﻘﺔ اﻟﻌﺮض ‪.‬‬

‫ﻣﺜﺎل ‪echo date (" j/n/y ") ; -:‬‬

‫‪25/2/2012‬‬ ‫ﻟﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ھﻜﺬا ‪-:‬‬

‫* اﻟﺘﺤﻮل ﻣﻦ ‪ time stamp‬إﻟﻰ اﻟﺘﺎرﯾﺦ اﻟﻌﺎدي‬

‫ﯾﻤﻜﻦ ذﻟﻚ ﺑﻄﺮﯾﻘﺘﯿﻦ ‪-:‬‬

‫‪ -1‬اﻟﺪاﻟﺔ ) ‪( date‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ) ‪echo date ( "j/n/y" , 1122350269‬‬

‫ھﺬا اﻟﺮﻗﻢ ﯾﻤﺜﻞ اﻟﻮﻗﺖ اﻟﻤﺸﻔﺮ ‪time stamp‬‬

‫‪ -2‬اﻟﺪاﻟﺔ ) ‪( getdate‬‬

‫ﯾﺘﻢ ﻓﻲ ھﺬه اﻟﺪاﻟﺔ ﺗﺤﻮﯾﻞ اﻟﺘﺎرﯾﺦ واﻟﻮﻗﺖ ﻣﻦ اﻟﺼﯿﻐﺔ اﻟﻌﺸﻮاﺋﯿﺔ ‪ time stamp‬إﻟﻰ اﻟﺼﯿﻐﺔ اﻟﻌﺎدﯾﺔ‬
‫ﻟﻠﻮﻗﺖ ‪ ,‬وﺗﻜﻮن اﻟﻤﺨﺮﺟﺎت ﺑﺸﻜﻞ ﻣﺼﻔﻮﻓﺔ ‪.‬‬
‫) ‪( 35‬‬ ‫اﻟﻔﺻل اﻟﺧﺎﻣس ) اﻟوﻗت واﻟﺗﺎرﯾﺦ (‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ) ‪$x = getdate ( 1122350269‬‬

‫; )">‪print ("<pre‬‬

‫; )‪print_r ($x‬‬

‫; )">‪print ("</pre‬‬

‫* اﻟﺘﺤﻮل ﻣﻦ ﺗﺎرﯾﺦ ﻋﺎدي إﻟﻰ ‪time stamp‬‬

‫ﯾﺘﻢ اﻟﺘﺤﻮﯾﻞ ھﻨﺎ ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ ‪ Mktime‬وھﻲ ﺗﺤﺘﺎج ﺑﻌﺾ اﻟﻤﺪﺧﻼت ﻻﺣﻆ ‪-:‬‬
‫;) ﺳﻨﺔ ‪ ,‬ﺷﮭﺮ ‪ ,‬ﯾﻮم ‪ ,‬ﺳﺎﻋﺔ ‪ ,‬دﻗﯿﻘﺔ ‪ ,‬ﺛﺎﻧﯿﺔ ( ‪Mktime‬‬

‫* اﻟﺪاﻟﺔ ‪gmdate‬‬

‫وھﻲ ﺗﺴﺘﺨﺪم ﻟﻌﺮض اﻟﺘﺎرﯾﺦ‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ) ‪echo gmdate ( m‬‬

‫; ) ‪echo gmdate ( M‬‬

‫ﺳﻮف ﺗﻼﺣﻆ إن اﻟﻨﺘﺎﺋﺞ ﺳﻮف ﺗﻜﻮن ﻣﺨﺘﻠﻔﺔ ﻋﻠﻰ اﻟﺮﻏﻢ ﻣﻦ اﺳﺘﺨﺪام ﻧﻔﺲ اﻟﺪاﻟﺔ ‪ ,‬ﻟﻜﻦ ﺗﺨﺘﻠﻒ‬
‫اﻟﻘﯿﻤﺔ اﻟﻤﻌﻄﺎة ) ‪ ( M ) ( m‬وﻟﻐﺔ ‪ php‬ﺗﺤﺘﺠﺰ اﻟﻜﺜﯿﺮ ﻣﻦ اﻟﻜﻠﻤﺎت واﻟﺤﺮوف اﻟﺘﻲ ﺗﻘﻮم ﺑﻌﻤﻠﯿﺎت‬
‫ﻣﺨﺘﻠﻔﺔ ‪.‬‬

‫وﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل ﺣﺮوف أﺧﺮى ﻣﻊ اﻟﺪاﻟﺔ ‪ gmdate‬ﻻﺣﻆ ھﺬا اﻟﻤﺜﺎل ‪-:‬‬


‫; )" ‪echo gmdate (" D , d M Y H : i : S‬‬

‫; )"‪echo gmdate (" M D‬‬


‫) ‪( 36‬‬ ‫اﻟﻔﺻل اﻟﺧﺎﻣس ) اﻟوﻗت واﻟﺗﺎرﯾﺦ (‬

‫‪ ‬اﻟداﻟﺔ ; ) (‪microtime‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻹﺧﺮاج اﻟﻮﻗﺖ ﻟﻜﻦ ﺑﺎﻟﻤﻠﻲ ﺛﺎﻧﯿﺔ وھﻲ ﻻ ﺗﺄﺧﺬ أي وﺳﯿﻂ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ ‪.‬‬

‫* ﻻﺣﻆ ھﺬا اﻟﺠﺪول اﻟﺨﺎص ﺑﺎﻟﺮﻣﻮز ‪-:‬‬

‫اﻟﺮﻣﺰ‬ ‫اﻟﻮﺻﻒ‬ ‫ﻣﺜﺎل ﻋﻠﻰ اﻟﻤﺨﺮﺟﺎت‬


‫‪a‬‬ ‫اﻟﻮﻗﺖﺻﺒﺎﺣﺎ ً أو ﻣﺴﺎءا ‪small‬‬ ‫‪am , pm‬‬
‫‪A‬‬ ‫اﻟﻮﻗﺖ ﺻﺒﺎﺣﺎ أو ﻣﺴﺎءا ‪capital‬‬ ‫‪AM , PM‬‬
‫‪d‬‬ ‫رﻗﻢ اﻟﯿﻮم ﻓﻲ اﻟﺸﮭﺮ ﯾﺒﺪأ ﺑﺼﻔﺮ‬ ‫ﻣﻦ ‪ 01‬إﻟﻰ ‪31‬‬
‫‪D‬‬ ‫اﺳﻢ اﻟﯿﻮم ﺑﺸﻜﻞ ﻣﺨﺘﺼﺮ‬ ‫‪Sun , Mon‬‬
‫‪F‬‬ ‫اﺳﻢ اﻟﺸﮭﺮ ﺑﺪون اﺧﺘﺼﺎر‬ ‫‪August‬‬
‫‪g‬‬ ‫رﻗﻢ اﻟﺴﺎﻋﺔ اﻵن ﺑﺼﯿﻐﺔ ‪ 12‬ﺳﺎﻋﺔ ﻻ ﯾﺒﺪأ ﺑﺼﻔﺮ‬ ‫‪1 - 12‬‬
‫‪G‬‬ ‫رﻗﻢ اﻟﺴﺎﻋﺔ اﻵن ﺑﺼﯿﻐﺔ ‪ 24‬ﺳﺎﻋﺔ ﻻ ﯾﺒﺪأ ﺑﺼﻔﺮ‬ ‫‪0 - 23‬‬
‫‪h‬‬ ‫رﻗﻢ اﻟﺴﺎﻋﺔ اﻵن ﺑﺼﯿﻐﺔ ‪ 12‬ﺳﺎﻋﺔ ﯾﺒﺪأ ﺑﺼﻔﺮ‬ ‫‪01 - 12‬‬
‫‪H‬‬ ‫رﻗﻢ اﻟﺴﺎﻋﺔ اﻵن ﺑﺼﯿﻐﺔ ‪ 24‬ﺳﺎﻋﺔ ﯾﺒﺪأ ﺑﺼﻔﺮ‬ ‫‪00 - 23‬‬
‫‪i‬‬ ‫ﻋﺪد اﻟﺪﻗﺎﺋﻖ ﻓﻲ اﻟﺴﺎﻋﺔ‬ ‫‪00 - 59‬‬
‫‪I‬‬ ‫ﺗﺤﺪﯾﺪ اﻟﺼﺒﺎح واﻟﻤﺴﺎء ﻋﻠﻰ ﺷﻜﻞ رﻗﻤﯿﻦ ‪ 0‬أو ‪1‬‬ ‫‪ 1‬ﺻﺒﺎح و‪ 2‬ﻣﺴﺎء‬
‫‪j‬‬ ‫رﻗﻢ اﻟﯿﻮم ﻓﻲ اﻟﺸﮭﺮ وﻻ ﯾﺒﺪأ ﺑﺼﻔﺮ‬ ‫‪1 - 31‬‬
‫‪l‬‬ ‫اﺳﻢ اﻟﯿﻮمﻛﺎﻣﻼ ً ﺑﺪون اﺧﺘﺼﺎر‬ ‫‪Friday‬‬
‫‪L‬‬ ‫ﺣﺎﻟﺔ اﻟﺴﻨﺔ ﻛﺒﯿﺴﺔ أو ﻻ‬ ‫‪ 1‬ﻛﺒﯿﺴﺔ و‪ 2‬ﻏﯿﺮ ﻛﺒﯿﺴﺔ‬
‫‪m‬‬ ‫رﻗﻢ اﻟﺸﮭﺮ ﻓﻲ اﻟﺴﻨﺔ وﯾﺒﺪأ ﺑﺼﻔﺮ‬ ‫‪01 - 12‬‬
‫‪M‬‬ ‫اﺳﻢ اﻟﺸﮭﺮ ﻓﻲ اﻟﺴﻨﺔ ﻣﺨﺘﺼﺮ‬ ‫‪Jan‬‬
‫‪n‬‬ ‫اﻟﺸﮭﺮ ﻓﻲ اﻟﺴﻨﺔ ﻋﻠﻰ ﺷﻜﻞ رﻗﻢ وﻻ ﯾﺒﺪأ ﺑﺼﻔﺮ‬ ‫‪1 - 12‬‬
‫‪s‬‬ ‫اﻟﺜﻮاﻧﻲ ﻓﻲ اﻟﺪﻗﯿﻘﺔ ﻋﻠﻰ ﺷﻜﻞ رﻗﻤﯿﻦ‬ ‫‪00 - 59‬‬
‫‪S‬‬ ‫اﺳﻢ اﻟﯿﻮم ﻣﺨﺘﺼﺮ‬ ‫‪TH , ST , ND‬‬
‫‪t‬‬ ‫ﻋﺪد اﻷﯾﺎم ﻓﻲ اﻟﺸﮭﺮ‬ ‫‪28 - 31‬‬
‫‪U‬‬ ‫‪Time stamp‬‬ ‫‪1222352049‬‬
‫‪w‬‬ ‫اﻟﯿﻮم ﻣﻦ اﻷﺳﺒﻮع ﻋﻠﻰ ﺷﻜﻞ رﻗﻢ‬ ‫‪0-7‬‬
‫‪y‬‬ ‫اﻟﺴﻨﺔ ﻋﻠﻰ ﺷﻜﻞ رﻗﻢ ﻣﻜﻮن ﻣﻦ رﻗﻤﯿﻦ‬ ‫‪88,89,90‬‬
‫‪Y‬‬ ‫اﻟﺴﻨﺔ ﻋﻠﻰ ﺷﻜﻞ رﻗﻢ ﻣﻜﻮن ﻣﻦ أرﺑﻊ أرﻗﺎم‬ ‫‪2012,2013‬‬
‫‪z‬‬ ‫اﻟﯿﻮم ﻓﻲ اﻟﺴﻨﺔ ﻋﻠﻰ ﺷﻜﻞ أرﻗﺎم‬ ‫‪0 - 365‬‬
‫) ‪( 37‬‬ ‫اﻟﻔﺻل اﻟﺳﺎدس ) اﻟدوال اﻟرﯾﺎﺿﯾﺔ واﻟﺗﻌﺎﻣل ﻣﻊ اﻷرﻗﺎم (‬

‫اﻟﻔﺻل اﻟﺳﺎدس‬
‫) اﻟدوال اﻟرﯾﺎﺿﯾﺔ واﻟﺗﻌﺎﻣل ﻣﻊ اﻷرﻗﺎم (‬

‫ﻣﺛﺎل ﻋﻠﯾﮭﺎ‬ ‫ﺷرﺣﮭﺎ‬ ‫اﻟداﻟﺔ‬


‫; ) ‪bcadd( "1.5","9.87", 2‬‬ ‫ﺗﺘﯿﺢ ھﺬه اﻟﺪاﻟﺔ ﺟﻤﻊ رﻗﻤﯿﻦ ﻣﮭﻤﺎ ﻛﺎن ﻧﻮﻋﮭﻤﺎ ﻛﻤﺎ ﺗﺘﯿﺢ‬ ‫‪bcadd‬‬
‫ﻟﻚ ﺗﺤﺪﯾﺪ ﻋﺪد اﻷرﻗﺎم ﺑﻌﺪ اﻟﻔﺎﺻﻠﺔ اﻟﻌﺸﺮﯾﺔ اﻟﺘﻲ ﺗﺪﺧﻞ‬
‫ﺿﻤﻦ ھﺬه اﻟﻌﻤﻠﯿﺔ ‪ ,‬ﺣﯿﺚ أن اﻟﺮﻗﻢ اﻷول ﯾﻤﺜﻞ اﻟﻌﺪد‬
‫اﻷول اﻟﺬي ﺳﯿﺘﻢ ﺟﻤﻌﮫ واﻟﺮﻗﻢ اﻟﺜﺎﻧﻲ ﯾﻣﺛل اﻟﻌﺪد اﻟﺜﺎﻧﻲ‬
‫اﻟﺬي ﺳﯿﺘﻢ ﺟﻤﻌﮫ ﻣﻊ اﻷول واﻟﺮﻗﻢ اﻟﺜﺎﻟﺚ ﯾﻤﺜﻞ ﻋﺪد‬
‫اﻷرﻗﺎم اﻟﺘﻲ ﺳﺘﺤﺴﺐ ﺑﻌﺪ اﻟﻔﺎرزة ‪.‬‬
‫;)‪bccomp("1","1.122", 2‬‬ ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ رﻗﻤﯿﻦ ﻟﺘﻌﻮد ﻟﻚ ﺑﻨﺘﯿﺠﺔ‬ ‫‪bccomp‬‬
‫اﻟﻤﻘﺎرﻧﺔ ﻓﺈذا ﻛﺎن اﻟﺮﻗﻤﺎن ﻣﺘﺴﺎوﯾﺎن ﺗﻌﻮد ﺑﺎﻟﻘﯿﻤﺔ ﺻﻔﺮ‬
‫أﻣﺎ إذا ﻛﺎن اﻟﺮﻗﻢ اﻟﻤﻮﺟﻮد ﻋﻠﻰ اﻟﯿﺴﺎر أﻛﺒﺮ ﺗﻌﻮد ﺑﺎﻟﻘﯿﻤﺔ‬
‫‪ 1‬وإذا ﻛﺎن اﻟﺮﻗﻢ اﻟﻤﻮﺟﻮد ﻋﻠﻰ اﻟﯿﻤﯿﻦ أﻛﺒﺮ ﺗﻌﻮد ﺑﺎﻟﻘﯿﻤﺔ‬
‫‪ -1‬ﻣﻊ ﻣﻼﺣﻈﺔ أن ھﺬه اﻟﺪاﻟﺔ ﻻ ﺗﺄﺧﺬ ﺑﻌﯿﻦ اﻻﻋﺘﺒﺎر‬
‫اﻟﺮﻗﻢ ﺑﻌﺪ اﻟﻔﺎرزة إﻻ إذا أﻋﻄﯿﻨﺎھﺎ رﻗﻢ ﺛﺎﻟﺚ ﯾﺸﯿﺮ إﻟﻰ‬
‫اﻷرﻗﺎم ‪.‬‬
‫; ) ‪bcsqrt( "17" , 3‬‬ ‫ﺗﻘﻮ ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻋﺎدة اﻟﺠﺬر اﻟﺘﺮﺑﯿﻌﻲ ﻟﻠﺮﻗﻢ اﻟﺬي ﺳﻮف‬ ‫‪bcsqrt‬‬
‫ﻧﺮﺳﻠﮫ ﻟﮭﺎوأﯾﻀﺎ ً ﻧﺴﺘﻄﯿﻊ أن ﻧﺤﺪد اﻷرﻗﺎم ﺑﻌﺪ اﻟﻔﺎﺻﻠﺔ‬
‫اﻟﻌﺸﺮﯾﺔ اﻟﺘﻲ ﺳﻨﻌﺮﺿﮭﺎ ‪.‬‬
‫; ) ‪sqrt( 9.9‬‬ ‫ﺗﻌﻮد ﺑﺎﻟﺠﺬر اﻟﺘﺮﺑﯿﻌﻲ ﻟﻠﺮﻗﻢ اﻟﻤﺮﺳﻞ ﻟﮭﺎ ‪.‬‬ ‫‪sqrt‬‬
‫; ) ‪abs( -13‬‬ ‫ﺗﻌﻮد ﺑﺎﻟﻘﯿﻤﺔ اﻟﺤﻘﯿﻘﯿﺔ ﻟﻠﺮﻗﻢ‬ ‫‪abs‬‬
‫; ) ‪max( "arab" , 15 , 33‬‬ ‫ﺗﻌﻮد ﺑﺄﻛﺒﺮ ﻗﯿﻤﺔ ﻣﻦ ﺑﯿﻦ اﻟﻘﯿﻢ اﻟﻤﺮﺳﻠﺔ إﻟﯿﮭﺎ ﺳﻮاء ﻛﺎﻧﺖ‬ ‫‪max‬‬
‫أرﻗﺎم او ﻧﺼﻮص ‪.‬‬
‫; ) ‪min( "arab" , 15 , 33‬‬ ‫ﻧﻔﺲ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ﻟﻜﻨﮭﺎ ﺗﻌﻮد ﺑﺄﺻﻐﺮ ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﯿﻢ‬ ‫‪min‬‬
‫اﻟﻤﺮﺳﻠﺔ إﻟﯿﮭﺎ ‪.‬‬
‫; ) ‪ceil( 13.01‬‬ ‫ﺗﻘﺮب اﻟﺮﻗﻢ إﻟﻰ أﻛﺒﺮ رﻗﻢ ﺻﺤﯿﺢ ﻻﺣﻖ ‪.‬‬ ‫‪ceil‬‬
‫; ) ‪floor( 13.02‬‬ ‫‪floor‬‬
‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﻘﺮﯾﺐ اﻟﺮﻗﻢ إﻟﻰ أﻗﺮب ﻗﯿﻤﺔ دﻧﯿﺎ‬
‫; ) ‪log( 20.13‬‬ ‫‪ log‬ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻟﻮﻏﺎرﯾﺘﻢ اﻟﻌﺪد ‪.‬‬
‫) ‪( 38‬‬ ‫اﻟﻔﺻل اﻟﺳﺎﺑﻊ ) ﺗﻌرﯾف واﺳﺗدﻋﺎء اﻟدوال (‬

‫اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ‬
‫) ﺗﻌﺮﯾﻒ واﺳﺘﺪﻋﺎء اﻟﺪوال (‬

‫ﯾﻤﻜﻦ ﺗﺮﺗﯿﺐ داﻟﺔ ﺑﺎﻟﺸﻜﻞ اﻟﺬي ﻧﺮﯾﺪ وﺑﻌﺪ ذﻟﻚ ﻧﺴﺘﺨﺪﻣﮭﺎ )ﻧﺴﺘﺪﻋﯿﮭﺎ( ﻓﻲ أي ﻣﻜﺎن وذﻟﻚ ﻣﻦ ﺧﻼل‬
‫) ‪ , ( 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‬‬ ‫اﻟﻔﺻل اﻟﺳﺎﺑﻊ ) ﺗﻌرﯾف واﺳﺗدﻋﺎء اﻟدوال (‬

‫ﻧﻼﺣﻆ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﻋﺪة ﻣﻼﺣﻈﺎت ‪-:‬‬


‫‪ -1‬اﺳﺘﺨﺪﻣﻨﺎ اﺳﻢ اﻟﻤﺘﻐﯿﺮ ) ‪ ( $a‬ﺧﺎرج ﻧﻄﺎق ﺗﻌﺮﯾﻒ اﻟﺪاﻟﺔ وﻛﺄﻧﮫ ﻣﺘﻐﯿﺮ ﺟﺪﯾﺪ ﻷن ‪ php‬ﻻ‬
‫ﺗﺴﺘﻄﯿﻊ اﻟﺘﻌﺮف ﻋﻠﻰ ھﺬا اﻻﺳﻢ ﻓﻨﺴﺘﻄﯿﻊ اﺳﺘﺨﺪاﻣﮫ ﻛﺄي اﺳﻢ ‪.‬‬

‫‪ -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‬‬

‫ﺗﺪاﺧﻞ اﻟﺪوال‬

‫ﯾﻤﻜﻦ أن ﻧﻀﻊ ﺗﻌﺮﯾﻒ داﻟﺔ داﺧﻞ ﺗﻌﺮﯾﻒ داﻟﺔ أﺧﺮى ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; ‪function bob($x) { $x = $x - 1‬‬


‫; ‪function gbg($y) { $y = $y + 4y‬‬
‫} ;‪return $y‬‬
‫; )‪$x = gbg($x‬‬
‫} ; ‪return $x‬‬
‫; )‪echo bob(15‬‬
‫) ‪( 41‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻣن ) اﺳﺗﺧدام ‪ JSON‬ﻟﺗﺧزﯾن وﺟﻠب اﻟﺑﯾﺎﻧﺎت (‬

‫اﻟﻔﺻل اﻟﺛﺎﻣن‬
‫) اﺳﺗﺧدام ‪ 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‬‬

‫وﻻﺣظ ھذا اﻟﻣﺛﺎلأﯾﺿﺎ ً ‪-:‬‬


‫]"‪[10,20,{"var1":"value1","var2":900},"value2‬‬
( 42 ) ( ‫ ﻟﺗﺧزﯾن وﺟﻠب اﻟﺑﯾﺎﻧﺎت‬JSON ‫اﻟﻔﺻل اﻟﺛﺎﻣن ) اﺳﺗﺧدام‬

json_encode ‫ اﻟداﻟﺔ‬

JSON ‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺤﻮﯾﻞ اﻟﺒﯿﺎﻧﺎت إﻟﻰ ﺻﯿﻐﺔ‬

/‫ﻣﺜﺎل‬
<?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 ‫ اﻟﺪاﻟﺔ‬

‫ إﻟﻰ ﻛﺎﺋﻨﺎت وﻣﺼﻔﻮﻓﺎت‬JSON ‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺤﻮﯾﻞ ﺻﯿﻐﺔ‬

/‫ﻣﺜﺎل‬
<?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‬ﻟﺗﺧزﯾن وﺟﻠب اﻟﺑﯾﺎﻧﺎت (‬

‫ﺳﺗﻛون اﻟﻧﺗﯾﺟﺔ ﺑﮭذا اﻟﺷﻛل ‪-:‬‬


‫‪value‬‬
‫‪value‬‬
‫) ‪( 44‬‬ ‫اﻟﻔﺻل اﻟﺗﺎﺳﻊ ) رﻓﻊ اﻟﻣﻠﻔﺎت اﻟﻰ اﻟﺧﺎدم (‬

‫اﻟﻔﺻل اﻟﺗﺎﺳﻊ‬
‫) رﻓﻊ اﻟﻣﻠﻔﺎت إﻟﻰ اﻟﺧﺎدم (‬

‫ﻟرﻓﻊ ﻣﻠف ﻣن اﻟﻣوﻗﻊ إﻟﻰ اﻟﺧﺎدم ﯾﺟبأوﻻ ً وﻋﻧد إﻧﺷﺎء ﺣﻘل اﻟﻧﻣوذج ﻓﻲ اﻠ ‪ HTML‬أن ﻧﺣدد‬
‫اﻟطرﯾﻘﺔ ‪ post‬ﻹرﺳﺎل اﻟﺑﯾﺎﻧﺎت ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ وﺿﻊ ﺗرﻣﯾز اﻟﻧﻣوذج "‪"multipart/form-data‬‬
‫ﺑﺪﻻ ً ﻣﻦ اﻟﺘﺮﻣﯿﺰ اﻻﻓﺘﺮاﺿﻲ "‪. "application/x-www-form-urlencoded‬‬

‫ﻣﺜﺎل‪ /‬ﻹﻧﺸﺎء ﻧﻤﻮذج ﺑﺴﯿﻂ ﻟﺮﻓﻊ اﻟﺒﯿﺎﻧﺎت‬

‫>"‪<form action="file_upload.php" method="post" enctype="multipart/form-data‬‬


‫>"‪<input type="file" name="file1‬‬
‫>"‪<input type="submit‬‬
‫>‪</form‬‬

‫‪ ‬اﻟﻣﺻﻔوﻓﺔ ‪$_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‬ﺗﻌﯿﺪ ﺛﺎﺑﺖ او‬
‫رﻗﻢ ﯾﺪل ﻋﻠﻰ اﻟﺨﻄﺄ اﻟﺬي ﺣﺪث أﺛﻨﺎء اﻟﺮﻓﻊ ‪ ,‬واﻟﺠﺪول اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ أﺑﺮز ھﺬه اﻟﻘﯿﻢ‬

‫اﻟﺷرح‬ ‫اﻟﻘﯾﻣﺔ او اﻟرﻗم‬


‫ﯾﻌﯾد اﻟﻣﺗﻐﯾر ]'‪ $_FILES['file1']['error‬ھﺬه اﻟﻘﯿﻤﺔ ﻋﻨﺪﻣﺎ ﺗﺘﻢ‬ ‫‪UPLOAD_ERR_OK , 0‬‬
‫ﻋﻤﻠﯿﺔ رﻓﻊ اﻟﻤﻠﻔﺎت ﺑﻨﺠﺎح دون أي أﺧﻄﺎء‬
‫ﯾﻌﯾد اﻟﻣﺗﻐﯾر ]'‪ $_FILES['file1']['error‬ھﺬه اﻟﻘﯿﻤﺔ ﻋﻨﺪﻣﺎ ﯾﺘﻢ‬ ‫‪UPLOAD_ERR_INI_SIZE, 1‬‬
‫رﻓﻊ ﻣﻠﻒ ﺣﺠﻤﮫ ﯾﺘﺠﺎوز اﻟﺤﺠﻢ اﻟﻤﺴﻤﻮح ﺑﮫ اﻟﻤﺤﺪد ﺑﺎﻟﺮاﯾﺔ‬
‫‪ upload_max_filesize‬اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﻠﻒ ‪. php.ini‬‬
( 46 ) ( ‫اﻟﻔﺻل اﻟﺗﺎﺳﻊ ) رﻓﻊ اﻟﻣﻠﻔﺎت اﻟﻰ اﻟﺧﺎدم‬

‫ﯾﺗم إﻋﺎدة ھذه اﻟﻘﯾﻣﺔ ﻋﻧد رﻓﻊ ﺟزء ﻣن اﻟﻣﻠف وﻋدم اﻟﺗﻣﻛن ﻣن‬ UPLOAD_ERR_PARTIAL , 3
. ‫رﻓﻌﮫ ﻛﺎﻣﻼ ً ﻛﺣدوث ﻣﺷﻛﻠﺔ ﻓﻲ اﻟﺷﺑﻛﺔ‬
‫ﯾﺗم إﻋﺎدة ھذه اﻟﻘﯾﻣﺔ ﻋﻧدﻣﺎ ﯾﻘوم اﻟﻣﺳﺗﺧدم ﻣن إرﺳﺎل ﻧﻣوذج‬ UPLOAD_ERR_NO_FILE , 4
. ‫ دون ﺗﺤﺪﯾﺪ ﻣﻠﻒ ﻟﻜﻲ ﯾﺘﻢ رﻓﻌﮫ‬HTML

. ‫وﺑﺎﻟﻄﺒﻊ ﯾﻤﻜﻦ اﻟﺘﺤﻘﻖ ﻣﻦ رﺳﺎﻟﺔ اﻟﺨﻄﺄ أﻣﺎ ﺑﺎﺳﺘﺨﺪام اﻷرﻗﺎم أو ﺑﻤﺴﺎواﺗﮭﻢ ﺑﺎﻟﺜﻮاﺑﺖ اﻟﺴﺎﺑﻘﺔ‬

‫ ﯾﻘﻮم ﺑﻄﺒﺎﻋﺔ ﺣﺎﻟﺔ رﻓﻊ ﻣﻠﻒ‬/‫ﻣﺜﺎل‬


<?php
switch ($_FILES['file1']['error'])
{
case UPLOAD_ERR_OK:
echo "File uploaded succesfuly";
break;
case UPLOAD_ERR_INI_SIZE:
echo "Uploaded File is too big";
break;
case UPLOAD_ERR_PARTIAL :
echo "File is not completely uploaded";
break;
case UPLOAD_ERR_NO_FILE :
echo "No File was Selected";
break;
default:
echo "UnKnown Error";
break;
}
?>
‫) ‪( 47‬‬ ‫اﻟﻔﺻل اﻟﺗﺎﺳﻊ ) رﻓﻊ اﻟﻣﻠﻔﺎت اﻟﻰ اﻟﺧﺎدم (‬

‫دوال رﻓﻊ اﻟﻣﻠﻔﺎت‬

‫‪ ‬اﻟداﻟﺔ ‪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‬‬ ‫اﻟﻔﺻل اﻟﺗﺎﺳﻊ ) رﻓﻊ اﻟﻣﻠﻔﺎت اﻟﻰ اﻟﺧﺎدم (‬

‫رﻓﻊ ﻋدة ﻣﻠﻔﺎت‬


‫ﯾﻣﻛن رﻓﻊ ﻋدة ﻣﻠﻔﺎتﺳوﯾﺎ ً وﺑﮭذه اﻟﺣﺎﻟﺔ ﺳﺗﻛون اﻟﻣﺻﻔوﻓﺔ ‪ $_FILES‬ﺛﻼﺛﯿﺔ اﻷﺑﻌﺎد ﺣﯿﺚ ﺳﯿﻜﻮن‬
‫اﻟﺒﻌﺪ اﻟﺜﺎﻟﺚ ھﻮ رﻗﻢ ﺣﻘﻞ اﻟﻤﻠﻒ وﯾﺒﺪأ اﻟﻌﺪ ‪ -‬ﻛﺎﻟﻌﺎدة ‪ -‬ﻣﻦ اﻟﻘﯿﻤﺔ ﺻﻔﺮ ﺣﯿﺚ ﯾﻜﻮن اﺳﻢ اﻟﻤﻠﻒ‬
‫‪ $_FILES['file']['name'][0]:‬وﻟﻠﻤﻠﻒ اﻟﺜﺎﻧﻲ‬ ‫اﻷﺻﻠﻲ ﻷول ﺣﻘﻞ ﻣﻠﻒ ھﻮ‬
‫‪ ... $_FILES['file']['name'][1]:‬اﻟﺦ ‪ ,‬وﯾﻜﻮن ﻧﻤﻮذج ‪ HTML‬ﻛﺎﻟﺘﺎﻟﻲ ‪:‬‬

‫"‪<form action="file_upload.php" method="post‬‬


‫>"‪enctype="multipart/form-data‬‬
‫>‪<input type="file" name="file[ ]"> <br‬‬
‫>‪<input type="file" name="file[ ]"> <br‬‬
‫>‪<input type="file" name="file[ ]"> <br‬‬
‫>"‪<input type="submit‬‬
‫>‪</form‬‬
‫) ‪( 49‬‬ ‫اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (‬

‫اﻟﻔﺼﻞ اﻟﻌﺎﺷﺮ‬
‫) دوال ﻣﻨﻮﻋﺔ (‬

‫‪ ‬اﻟﺪاﻟﺔ ‪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‬‬

‫;)‪$y = wordwrap( $x , 3 , ‘ ‘, true‬‬

‫ﺣﯾث ھﻧﺎ ﻓﻲ ھذا اﻟﻣﺛﺎل أﺿﻔﻧﺎ ﻓﺎﺻﻠﺔ ﺑﻌد ﻛل ﺛﻼﺛﺔ أﺣرف ‪.‬‬

‫‪mail ‬‬

‫ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻹرﺳﺎل رﺳﺎﻟﺔ إﻟﻰ ﺑرﯾد اﻟﯾﻛﺗروﻧﻲ ﻣﻌﯾن ‪ ,‬ﻻﺣظ أن ھذه اﻟداﻟﺔ ﻻ ﺗﻌﻣل إذا ﻛﻧﺎ‬
‫ﻧﺳﺗﺧدن اﻟﺳﯾرﻓر اﻟﺷﺧﺻﻲ ‪ ,‬واﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ ﻟﻠداﻟﺔ ھﻲ ‪-:‬‬
‫; ) ’ﻧص اﻟرﺳﺎﻟﺔ’ ‪’ ,‬اﻷﺳﺗﻔﺳﺎر’ ‪ ,‬ﻋﻧوان اﻟﺑرﯾد اﻟذي ﺳﺗرﺳل إﻟﯾﮫ (‪mail‬‬
‫) ‪( 51‬‬ ‫اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (‬

‫‪ ‬اﻟداﻟﺔ ‪header‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﺴﺘﺨﺪم ﻹرﺳﺎل ﺑﯿﺎﻧﺎت ﻣﻦ اﻟﺴﯿﺮﻓﺮ اﻟﻰ ﻣﺘﺼﻔﺢ اﻟﺰاﺋﺮ وﯾﻤﻜﻦ ان ﺗﻜﻮن ھﺬه اﻟﺒﯿﺎﻧﺎت‬
‫ھﻲ ﻋﺒﺎرة ﻋﻦ ﺻﻔﺤﺔ ﺟﺪﯾﺪة وﺑﮭﺬا ﺳﯿﻨﻘﻞ اﻟﺰاﺋﺮ ﻣﺒﺎﺷﺮﺗﺎ ً اﻟﻰ ھﺬا اﻟﺼﻔﺤﺔ او ﯾﻤﻜﻦ ان ﺗﻜﻮن‬
‫اﺑﯿﺎﻧﺎت اﻟﻤﺮﺳﻠﮫ ھﻲ ﻋﺒﺎرة ﻋﻦ ﺻﻮر او ﻧﺼﻮص او اﺷﯿﺎء أﺧﺮى وﺑﮭﺬه اﻟﺤﺎﻟﺔ ﺳﯿﻌﺮﺿﮭﺎ ﻋﻠﻰ‬
‫ﻣﺘﺼﻔﺢ اﻟﺰاﺋﺮ ‪,‬وﯾﺠﺐ ان ﺗﻨﺘﺒﮫ اﻟﻰ أﻣﺮ ﻣﮭﻢ ﺟﺪا ً وھﻮ اﻧﮫ ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام أي ﻣﺨﺮﺟﺎت ﻗﺒﻞ ھﺬه‬
‫اﻟﺪاﻟﺔ أي ﯾﺠﺐ أن ﺗﻜﻮن ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺼﻔﺤﺔ واﻟﻤﻘﺼﻮد ﺑﺎﻟﻤﺨﺮﺟﺎت ھﻲ ﻣﺜﻼ ً وﺳﻮم‬
‫‪ html‬او اﻟﺪاﻟﺔ ‪ echo‬او اﻟﺪاﻟﺔ ‪ , print‬اﻟﺪاﻟﺔ ‪ header‬ﺗﺘﻜﻮن ﻣﻦ ﺟﺰﺋﯿﻦ اﻷول ھﻮ اﻟﻌﻤﻠﯿﺔ‬
‫واﻟﺜﺎﻧﻲ ھﻮ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺗﺄﺧﺬھﺎ ھﺬه اﻟﻌﻤﻠﯿﺔ ‪.‬‬

‫اﻟﻌﻤﻠﯿﺎت ھﻲ ‪-:‬‬

‫‪ Location -1‬وھﻲ ﻣﺴﺌﻮﻟﮫ ﻋﻤﺎ اذا ﻛﻨﺎ ﻧﺮﯾﺪ ان ﻧﺮﺳﻞ ) ﻧﺤﻮل ( اﻟﺰاﺋﺮ اﻟﻰ ﺻﻔﺤﺔ ﺟﺪﯾﺪة‬
‫‪,‬وﺗﺤﺪث ھﺬه اﻟﻌﻤﻠﯿﺔ ﺑﺸﻜﻞ ﺳﺮﯾﻊ ﺟﺪا ً ‪.‬‬
‫‪ Content-Type -2‬وھﺬه اﻟﻌﻤﻠﯿﺔ ﻣﺴﺌﻮﻟﺔ ﻋﻤﺎ اذا ﻛﻨﺎ ﻧﺮﯾﺪ ان ﻧﺮﺳﻞ اﻟﻰ اﻟﺰاﺋﺮ ﻣﻠﻔﺎت ﻗﺪ‬
‫ﺗﻜﻮن ﺻﻮر او ﻧﺼﻮص او ‪ ...‬إﻟﺦ ‪.‬‬

‫أﻣﺎ اﻟﻘﯿﻢ ﻓﮭﻲ ‪-:‬‬

‫‪ -1‬اذا ﻛﺎﻧﺖ اﻟﻌﻤﻠﯿﮫ ھﻲ ‪ Location‬ﻓﯿﺠﺐ أن ﺗﻜﻮن اﻟﻘﯿﻤﺔ ھﻲ ﻋﻨﻮان اﻟﺼﻔﺤﺔ او راﺑﻂ‬


‫اﻟﺼﻔﺤﺔ ‪.‬‬
‫‪ -2‬اذا ﻛﺎﻧﺖ اﻟﻌﻤﻠﯿﺔ ‪ Content-Type‬ﻓﯿﺠﺐ أوﻻ ً أن ﻧﺤﺪد ﻧﻮع اﻟﻤﻠﻒ اﻟﺬي ﻧﻮد ارﺳﺎﻟﮫ ﻓﺈذا‬
‫ﻛﺎن ﺻﻮرة ﻧﻜﺘﺐ ‪ images‬ﺛﻢ ﺳﻼش ‪ /‬ﺛﻢ اﻣﺘﺪاد اﻟﺼﻮرة ﻣﺜﻼ ً ) ‪... , gif , jpg‬إﻟﺦ ( ‪,‬‬
‫اﻣﺎ اذا ﻛﺎن اﻟﻤﻠﻒ ﻧﺺ ﻧﻜﺘﺐ ‪ text‬ﺛﻢ ﺳﻼش ‪ /‬ﺛﻢ ﻧﺤﺪد ﻧﻮع اﻟﻨﺺ ﻣﺜﻼ ً ) ‪html ,‬‬
‫‪ ... , javascript , css‬إﻟﺦ ( ‪ ,‬اﻣﺎ اذا ﻛﺎن ﻧﻮع اﻟﻤﻠﻒ ﺗﻄﺒﯿﻖ ) ﻣﺴﺘﻨﺪ ( ﻧﻜﺘﺐ‬
‫‪ application‬ﺛﻢ ﺳﻼش ‪ /‬ﺛﻢ ﻧﻜﺘﺐ اﻷﻣﺘﺪاد ﻣﺜﻼ ً ) ‪ ... , pdf , doc , zip‬إﻟﺦ ( ‪,‬‬
‫وﺗﺴﻤﻰ ھﺬه اﻟﻘﯿﻢ ﺑﺎﻟـ ‪. MIME type‬‬

‫ﻻﺣﻆ ﺑﺄﻧﮫ ﻧﻔﺼﻞ ﺑﯿﻦ اﻟﻌﻤﻠﯿﺔ واﻟﻘﯿﻤﺔ ﺑﺎﻟﻌﻼﻣﺔ ) ‪ ( :‬ﻟﻜﻦ ﯾﺠﺐ أن ﺗﻜﻮن ھﺬه اﻟﻌﻼﻣﺔ ﻣﻼﺻﻘﺔ‬
‫ﻟﻠﻌﻤﻠﯿﺔ أي أن ﻻ ﯾﻜﻮن ھﻨﺎك ﻓﺮاغ ) ﻣﺴﺎﻓﺔ ( ﺑﯿﻨﮭﺎ وﺑﯿﻦ اﻟﻌﻤﻠﯿﺔ ﺛﻢ ﻧﻀﻊ ﻓﺎﺻﻠﺔ ﺛﻢ اﻟﻘﯿﻤﺔ ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻟﻧﻘل اﻟزاﺋر ﻣﺑﺎﺷرﺗﺎ ً اﻟﻰ ﺻﻔﺣﺔ أﺧرى واﻟﺗﻲ اﺳﻣﮭﺎ ‪page2‬‬
‫;) "‪header( "Location: page2.html‬‬

‫ﻣﺛﺎل‪ /‬ﻟﻌرض ﻣﺳﺗﻧد ‪pdf‬‬


‫;) "‪header( "Content-Type: application/pdf‬‬
‫) ‪( 52‬‬ ‫اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (‬

‫دوال اﻟﺗﻌﺎﻣل ﻣﻊ ﻣﺧرﺟﺎت اﻟﺑﯾﺎﻧﺎت‬

‫ﻻﺣظ ﺑﺄن ھذه اﻟدوال ﺗﺳﺗﺧدم ﻋﻧدﻣﺎ ﯾﻛون ھﻧﺎك ﻣﺷﻛﻠﺔ ﻓﻲ اﻟﻣﺧرﺟﺎت ﺧﺻوﺻﺎ ً ﻋﻧد اﺳﺗﺧدام‬
‫اﻟداﻟﺔ ‪ header‬او ﻋﻧد اﺳﺗﺧدام اﻟﻛﻌﻛﺎت ‪ cookie‬او ﻋﻧد اﺳﺗﺧدام اﻟﺟﻠﺳﺎت ‪ , session‬وﻛل ﻣﺎ‬
‫ﺳﻧﻘوﻟﮫ ﻓﻲ ھذه اﻟدوال ﻋن اﻟداﻟﺔ ‪ header‬ﻓﮭو ﯾﻧطﺑق ﻋﻠﻰ اﻟﻛﻌﻛﺎت وﻋﻠﻰ اﻟﺟﻠﺳﺎت أﯾﺿﺎ ً )‬
‫واﻟﺗﻲ ﺳﻧﺄﺧذھﺎ ﻓﻲ ﻓﺻول ﻗﺎدﻣﺔ ( ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ) (‪ob_start‬‬

‫ﻛﻣﺎ ﻗﻠﻧﺎ ﺳﺎﺑﻘﺎ ً اذا اﺳﺗﺧدﻣﻧﺎ ﻋﻣﻠﯾﺎت اﺧراج ﻟﻠﺑﯾﺎﻧﺎت ﻗﺑل اﻟداﻟﺔ ‪ header‬ﻓﺄن اﻟﻣﺗﺻﻔﺢ ﺳﯾﻌرض‬
‫ﻟﻧﺎ ﺧطﺄ ﻷﻧﻲ ﻻ ﯾدري ﻣﺎذا ﺳﯾﻌرض ھل ﯾﻌرض اﻟﻣﺧرﺟﺎت اﻟﺗﻲ ﺗﺳﺑق اﻟداﻟﺔ ‪ header‬ام‬
‫ﯾﻌرض ﻣﺧرﺟﺎت اﻟداﻟﺔ ﻧﻔﺳﮭﺎ ‪ ,‬ﻟﻛن ﺑﺎﺳﺗﺧدام اﻟداﻟﺔ ) (‪ ob_start‬ﻓﺄﻧﮫ ﻟن ﯾظﮭر ﻟﻧﺎ أي ﺧطﺄ‬
‫وﺳﯾﻌرض ﻣﺧرﺟﺎت اﻟداﻟﺔ ‪ , header‬ﻟﻛن ﻻﺣظ ﺑﺄﻧﮫ ﯾﺟب أن ﺗﻛون اﻟﻣﺧرﺟﺎت اﻟﺗﻲ ﺗﺳﺑق‬
‫اﻟداﻟﺔ ‪ heared‬واﻟداﻟﺔ ﻧﻔﺳﮭﺎ ﺗﻛﺗب ﺑﻌد ان ﻧﻛﺗب ) (‪. ob_start‬‬

‫‪ ‬اﻟﺪاﻟﺔ ) (‪ ob_end_flush‬واﻟﺪاﻟﺔ ) (‪ob_flush‬‬

‫ﻧﺳﺗﺧدم أﺣد ھذه اﻟدوال ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﻛود واﻟﻔرق ﺑﯾﻧﮭم ھو ان اﻟداﻟﺔ ) (‪ 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‬‬

‫وھﻲ داﻟﺔ إﺧﺮاج ﺗﺴﺘﺨﺪم ﻟﺪﻣﺞ اﻟﻨﺼﻮص ﻣﻦ اﻟﻤﺘﻐﯿﺮات اﻟﺪﯾﻨﺎﻣﯿﻜﯿﺔ‬

‫ﻣﺜﺎل‪/‬‬

‫; )‪printf ("hello" , 5‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪sprint‬‬

‫وھﻲ داﻟﺔ إﺧﺮاج وﻟﻜﻦ ﯾﺠﺐ إﺳﻨﺎدھﺎ إﻟﻰ ﻣﺘﻐﯿﺮأوﻻ ً‬

‫ﻣﺜﺎل‪/‬‬
‫) ‪$x=sprint ("hello" , 5‬‬

‫‪ ‬اﻟﺪاﻟﺔ ] [‪$_POST‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻻﺳﺘﺨﺮاج اﻟﻘﯿﻢ ﻣﻦ اﻟﻨﻤﺎذج ﺑﺘﻤﺮﯾﺮ اﺳﻢ ﺣﻘﻞ اﻹدﺧﺎل ﻣﻦ اﻟﻨﻤﻮذج ﻋﻠﯿﮭﺎ ‪,‬‬
‫وﺗﺟﻠب اﻟﻘﯾم ﻋﻠﻰ ﺷﻛل ﻣﺻﻔوﻓﺔ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ] '‪$_POST[ 'user‬‬

‫‪ ‬اﻟﺪاﻟﺔ ] [‪$_GET‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻻﺳﺘﺨﺮاج اﻟﻘﯿﻢ ﻣﻦ رواﺑﻂ اﻟﺼﻔﺤﺔ ﺑﺘﻤﺮﯾﺮ اﺳﻢ اﻟﻣﺗﻐﯾر ﻓﻲ اﻟراﺑط إﻟﻰ اﻟﺪاﻟﺔ ‪,‬‬
‫وﺗﺟﻠب اﻟﻘﯾم ﻋﻠﻰ ﺷﻛل ﻣﺻﻔوﻓﺔ ‪.‬‬

‫ﻣﺜﺎل‪ /‬ﻋﻠﻰ ﻓرض أن راﺑط اﻟﺻﻔﺣﺔ ھو اﻟﺗﺎﻟﻲ ‪www.google.com/index.php?id=12230‬‬

‫; ] '‪$_GET[ 'id‬‬
‫) ‪( 54‬‬ ‫اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (‬

‫‪ ‬اﻟﺪاﻟﺔ ] [‪$_REQUEST‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻤﻞ اﻟﺪاﻟﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ ‪ $_POST , $_GET‬ﺣﯿﺚ اذا اﻧﮭﺎ ﺳﺘﺴﺘﻘﺒﻞ اﻟﺒﯿﺎﻧﺎت‬
‫ﺳﻮاء ﻛﺎﻧﺖ ﻣﺮﺳﻠﺔ ﺑﺎﻟﻄﺮﯾﻘﺔ ‪ post‬او ﺑﺎﻟﻄﺮﯾﻘﺔ ‪ , get‬ﻣﺜﺎل ‪/‬‬
‫; ] '‪$_ REQUEST[ 'id‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪empty‬‬

‫وھﻲ ﺗﺘﺤﻘﻖ ﻣﻦ أن ﻧﻤﻮذج اﻹدﺧﺎل ﻏﯿﺮ ﻓﺎرغ وﻻﺣﻆ أﻧﮭﺎ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ ‪ true‬إذا ﻛﺎن ﻣﺮﺑﻊ اﻹدﺧﺎل‬
‫ﻓﺎرغ‬
‫{ ) ) ] '‪if (empty ($_POST[ 'username‬‬

‫} " ‪echo "please enter a username‬‬

‫‪ ‬اﻟﺪاﻟﺔ ; ) (‪strlen‬‬

‫ﺗﻔﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﻣﻌﺮﻓﺔ ﻋﺪد اﻷﺣﺮف اﻟﺘﻲ ﯾﺪﺧﻠﮭﺎ اﻟﻤﺴﺘﺨﺪم ‪.‬‬

‫ﻣﺜﺎل‪ /‬ﻟﻤﻨﻊ اﻟﻤﺴﺘﺨﺪم ﻣﻦ إدﺧﺎل ﻧﺼﻮص أﻛﺜﺮ ﻣﻦ ‪ 30‬ﺣﺮف‬

‫; ] '‪$user=$_POST[ 'user‬‬
‫{ ) ‪if (strlen ( $user ) > 30‬‬
‫; "‪echo "that is too much‬‬
‫} ; ) " ‪die ( "Erorr‬‬
‫* وﯾﻣﻛن اﺳﺗﺧدام ھذه اﻟداﻟﺔ ﻟﺟﻠب ﻋدد أﺣرف اﻟﻧﺻوص اﻟﺗﻲ ﯾدﺧﻠﮭﺎ اﻟﻣﺳﺗﺧدم‬

‫ﻣﺛﺎل ‪/‬‬
‫;'‪$x = 'This is a string‬‬
‫;)‪echo strlen($x‬‬

‫‪strcmp ‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ ﺗﻄﺎﺑﻖ ﻗﯿﻤﺘﯿﻦ ﻧﺼﯿﺘﯿﻦ‬


‫) ‪( 55‬‬ ‫اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (‬

‫ﻣﺜﺎل‪/‬‬
‫;”‪$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‬‬

‫ﻣﻼﺣظﺔ‪ /‬اﻟﺣروف اﻟﺗﻲ ﺑﺎﻟﻐﺔ اﻟﻌرﺑﯾﺔ ﻻ ﺗﺗﺄﺛر ﺑﮭذه اﻟداﻟﺔ ‪.‬‬


‫) ‪( 56‬‬ ‫اﻟﻔﺻل اﻟﻌﺎﺷر ) دوال ﻣﻧوﻋﺔ (‬

‫‪ ‬اﻟﺪاﻟﺔ ‪strtoupper‬‬

‫ھﻲ ﺗﻤﺎم ً ﻧﻔﺲ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ﻟﻜﻦ اﻟﻔﺮق اﻟﻮﺣﯿﺪ ھﻮ أن ھﺬه اﻟﺪاﻟﺔ ﺗﺤﻮل ﺟﻤﯿﻊ اﻷﺣﺮف إﻟﻰ أﺣﺮف‬
‫ﻛﺒﯿﺮة ) ﻋﻜﺲ ﻋﻤﻞ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ( ‪.‬‬

‫ﻣﻼﺣظﺔ‪ /‬اﻟﺣروف اﻟﺗﻲ ﺑﺎﻟﻐﺔ اﻟﻌرﺑﯾﺔ ﻻ ﺗﺗﺄﺛر ﺑﮭذه اﻟداﻟﺔ ‪.‬‬

‫‪ ‬اﻟداﻟﺔ ‪str_replace‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻻﺳﺘﺒﺪال ﻧﺺ ﻣﻌﯿﻦ ﺑﻨﺺ آﺧﺮ ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ‬
‫) ﻣﻛﺎن اﻟﻧص ‪ ,‬اﻟﻧص اﻟﺟدﯾد ‪ ,‬اﻟﻧص اﻟﻘدﯾم ( ‪str_replace‬‬

‫ﻣﺛﺎل‪/‬‬

‫;'!! ‪$x = 'this is a long string‬‬


‫;)‪$new_x = str_replace('long', 'short', $string‬‬
‫; ‪echo $new_x‬‬

‫‪ ‬اﻟداﻟﺔ ‪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‬‬

‫وﯾﻣﻛن ﻛﺗﺎﺑﺗﮭﺎ ﻣرﺗﯾن او اﻛﺛر ﻟزﯾﺎدة ﻗوة اﻟﺗﺷﻔﯾر ‪ ,‬ﻻﺣظ ‪-:‬‬


‫;) ) ]’‪$pass = md5( 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‬‬

‫; ) ‪$user = HtmlSpecialChars ( $user‬‬

‫; ‪echo $user‬‬

‫‪ ‬اﻟداﻟﺔ ; ) (‪htmlentities‬‬

‫ھﻲﺗﻘﺮﯾﺒﺎ ً ﻧﻔﺲ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ إﻻ أن اﻟﻔﺮق ﺑﯿﻨﮭﻤﺎ ھﻮ أن ھﺬه اﻟﺪاﻟﺔ ﺗﻐﯿﺮ ﺟﻤﯿﻊ رﻣﻮز ﻟﻐﺔ ‪html‬‬
‫ﺑﺨﻼف اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ اﻟﺘﻲ ﺗﻤﻨﻊ ﺑﻌﺾ ﻣﻦ اﻟﺮﻣﻮز وﻟﯿﺲ ﻛﻠﮭﺎ ‪ ,‬ﻟﻛن ﺑﺷﻛل ﻋﺎم ﯾﻔﺿل اﺳﺗﺧدام‬
‫اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ ‪.‬‬

‫ﻣﻼﺣظﺔ‪ //‬ھذه اﻟداﻟﺔ ﻻ ﯾﻣﻛن اﺳﺗﺧداﻣﮭﺎ ﻣﻊ اﻟﻠﻐﺔ اﻟﻌرﺑﯾﺔ ﻷﻧﮭﺎ ﺳﺗﺷﻔر اﻟﻧص وﻻ ﯾﻣﻛن اﺳﺗﻌﺎدة‬
‫اﻟﻧص اﻷﺻﻠﻲ ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪strip_tags‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻰ اﻧﺘﺰاع أي ﺗﺮوﯾﺴﺎت او وﺳﻮم ﺧﺎﺻﺔ ﺑﻠﻐﺎت أﺧﺮى وﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ‬
‫ﻟﻸﻣﺎن ﻣﻦ اﻟﮭﻜﺮز ‪ ,‬وﯾﻤﻜﻦ دﻣﺠﮭﺎ ﻣﻊ اﻟﺪاﻟﺔ ; ) (‪ trim‬ﻟﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ھﻜﺬا ‪-:‬‬
‫; ] '‪$user=$_POST[ 'user‬‬

‫; ) ) ‪strip_tags( trim( $user‬‬


‫) ‪( 60‬‬ ‫اﻟﻔﺻل اﻟﺣﺎدي ﻋﺷر ) دوال اﻷﻣن واﻟﺣﻣﺎﯾﺔ (‬

‫‪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‬‬

‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻋﻄﺎء ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﺼﻮرة ﻋﻠﻰ ﺷﻜﻞ ﻣﺼﻔﻮﻓﺔ ‪.‬‬

‫اﻟﺪوال ) ‪( imagecreatefromjpeg , imagecreatefrompng , imagecreatefromgif‬‬ ‫‪‬‬

‫ﺗﻌﻤﻞ ھﺬه اﻟﺪوال اﻟﺜﻼث ﺑﻨﻔﺲ اﻵﻟﯿﺔ ﺗﻘﺮﯾﺒﺎ ﺣﯿﺚ ﺗﻘﻮم ﺑﺈﻧﺸﺎء ﻣﻘﺒﺾ ﻟﻠﺼﻮرة ﻋﻦ طﺮﯾﻖ ﺗﺣﻣﯾل‬
‫)‪ (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‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﻌﺮﯾﻒ ﻟﻮن ﻟﻠﺼﻮر ﻻﺳﺘﺨﺪاﻣﮫ ﻓﻲ اﻟﺮﺳﻢ وﺗﺤﺘﺎج إﻟﻰ ﻣﻘﺒﺾ اﻟﺼﻮرة ﻓﻲ ھﺬه‬
‫اﻟﺪاﻟﺔ ‪.‬‬

‫ﻣﺜﺎل‪ /‬ﻧﻔﺮض أن ﻣﻘﺒﺾ اﻟﺼﻮرة ھﻮ ‪$x‬‬


‫; ) ‪$im=imagecoloreallocate( $x , 0,0,0‬‬

‫وﻛﻣﺎ ﺗﻼﺣظ ﻓﻲ ھذا اﻟﻣﺛﺎل وﺿﻌﻧﺎ درﺟﺔ اﻹﺷﺑﺎع ﻟﻸﻟوان ) درﺟﺔ إﺷﺑﺎع أي ﻟون ھﻲ ﺗﺗراوح‬
‫ﻣﺎﺑﯾن ‪ 0‬و ‪ ( 255‬ﺣﯾث أن اﻟرﻗم اﻷول ﻟﻠون اﻷﺣﻣر واﻟرﻗم اﻟﺛﺎﻧﻲ ﻟﻠون اﻷﺧﺿر واﻟرﻗم اﻟﺛﺎﻟث‬
‫ﻟﻠون اﻷزرق‬

‫‪ ‬اﻟﺪاﻟﺔ ‪imagearc‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺮﺳﻢ ﻗﻄﻊ ﻧﺎﻗﺺ ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ وﺗﺤﺘﺎج إﻟﻰ ﻣﻘﺒﺾ اﻟﺼﻮرة ﻟﻜﻲ ﻧﺮﺳﻢ ﻋﻠﯿﮭﺎ‬
‫وﻟﻮن اﻟﺮﺳﻢ ‪.‬‬

‫ﻣﺜﺎل‪ /‬ﻧﻔﺮض أن ﻣﻘﺒﺾ اﻟﺼﻮرة ھﻮ ‪ $x‬وﻣﻘﺒﺾ ﻟﻮن اﻟﺮﺳﻢ ھﻮ ‪$im‬‬


‫; ) ‪imagearc( $x , 100,50,100,0,360 , $im‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪imagechar‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺮﺳﻢ ﺧﻂ ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞوأﯾﻀﺎ ً ﺗﺤﺘﺎج إﻟﻰ ﻣﻘﺒﺾ اﻟﺼﻮرة ﻟﻜﻲ ﻧﺮﺳﻢ ﻋﻠﯿﮭﺎ‬
‫وﻣﻘﺒﺾ ﻟﻮن اﻟﺮﺳﻢ ‪.‬‬
‫) ‪( 64‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (‬

‫ﻣﺜﺎل‪ /‬ﻧﻔﺮض أن ﻣﻘﺒﺾ اﻟﺼﻮرة ھﻮ ‪ $x‬وﻣﻘﺒﺾ ﻟﻮن اﻟﺮﺳﻢ ھﻮ ‪$im‬‬


‫; ) ‪imagechar( $x , 1,0,0, "c" , $im‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪imagefontwidth‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺤﺪﯾﺪ ﻋﺮض اﻟﺨﻄﻮط ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ) ‪$width=imagefontwidth( 20‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪imagefontheight‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻓﻲ ﺗﺤﺪﯾﺪ ارﺗﻔﺎع اﻟﺨﻄﻮط ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ) ‪$height=imagefontheight( 5‬‬

‫‪ ‬اﻟﺪوال ) ‪ imagegif‬و ‪ imagepng‬و ‪( imagejpeg‬‬

‫ھﺬه اﻟﺪوال ﻛﻠﮭﺎ ﻟﮭﺎ ﻧﻔﺲ اﻟﻮظﯿﻔﺔ ﺣﯿﺚ أﻧﮭﺎ ﺗﺴﺘﺨﺪم ﻹﺧﺮاج وﺣﻔﻆ اﻟﺼﻮر ﻣﻦ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ إﻟﻰ‬
‫اﻟﻤﺘﺼﻔﺢ او ﻣﻠﻒ ﺧﺎرﺟﻲ واﻟﻔﺮق اﻟﻮﺣﯿﺪ ﺑﯿﻦ ھﺬه اﻟﺪوال ھو أﻧﮫ ﻛل داﻟﺔ ﺗﺣﻔظ اﻟﺻورة ﺑﺻﯾﻐﺔ‬
‫ﻣﺧﺗﻠﻔﺔ ) ‪ .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‬ھو ﻣﻘﺑض اﻟﻠون ‪.‬‬

‫ﻣﺜﺎل‪ /‬ﻧﻔﺮض أن ﻣﻘﺒﺾ اﻟﺼﻮرة ھﻮ ‪ $x‬وﻣﻘﺒﺾ ﻟﻮن اﻟﺮﺳﻢ ھﻮ ‪$im‬‬


‫; ) ‪imagestring( $x , 4 , 10 , 10 , "Ahmed" , $im‬‬
‫) ‪( 66‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (‬

‫‪ ‬اﻟداﻟﺔ ‪imagettftext‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﻣﺸﺎﺑﮭﺔ ﻟﻠﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ‪ ,‬ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻄﺒﺎﻋﺔ ﻧﺺ ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ ﺑﺎﺳﺘﺨﺪام ﺧﻄﻮط‬
‫ﻣﻦ اﻟﻨﻮع ‪ ttf‬ﺑﺄي ﻣﻘﺎس ﺧﻂ وﺑﺄي زاوﯾﺔ ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪:‬‬

‫;)‪imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text‬‬

‫ﺣﯿﺚ أن ‪ $image‬ھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة و‪ $size‬ﯾﻤﺜﻞ ﺣﺠﻢ اﻟﺨﻂ وﯾﻤﻜﻦ أن ﯾﺄﺧﺬ أي رﻗﻢ ﻛﺎن‬
‫و‪ $angle‬ﺗﻤﺜﻞ اﻟﺰاوﯾﺔ واﻟﺰاوﯾﺔ ﯾﻤﻜﻦ أن ﺗﻜﻮن ﻣﻮﺟﺒﺔ او ﺳﺎﻟﺒﺔ ) اﻟﻘﯿﻤﺔ اﻟﻤﻮﺟﺒﺔ ﺗﺆدي إﻟﻰ‬
‫اﻟﺪوران ﻋﻜﺲ ﻋﻘﺎرب اﻟﺴﺎﻋﺔ و اﻟﻘﯿﻤﺔ اﻟﺴﺎﻟﺒﺔ ﺗﺆدي إﻟﻰ اﻟﺪوران ﻣﻊ ﻋﻘﺎرب اﻟﺴﺎﻋﺔ ( و‪$x, $y‬‬
‫ﺗﻤﺜﻞ إﺣﺪاﺛﯿﺎت اﻟﺼﻮرة ﻓﻲ ﻣﻮﻗﻊ اﻟﻌﻤﻞ و ﯾﻤﺜﻞ ﻣﻘﺒﺾ اﻟﻠﻮن و‪ $fontfile‬ﺗﻤﺜﻞ ﻣﺴﺎر اﻟﺨﻂ )‬
‫ﻷﻧﻨﺎ ﺳﻨﺸﻤﻞ ﺧﻂ ﻣﻦ ﺧﺎرج ﻣﻜﺘﺒﺔ ‪ ( GD‬و‪ $text‬ﯾﻤﺜﻞ اﻟﻨﺺ اﻟﺬي ﺳﯿﻄﺒﻊ ﻓﻲ ﻣﺴﺎﺣﺔ اﻟﻌﻤﻞ ‪.‬‬

‫ﻣﺜﺎل‪ /‬ﻧﻔﺮض أن ﻣﻘﺒﺾ اﻟﺼﻮرة ھﻮ ‪ $x‬وﻣﻘﺒﺾ اﻟﻠﻮن ھﻮ ‪$c‬‬


‫; ) "‪imagettftext( $x, 25, 0, 25, 110, $c , " /font.ttf " , "welcome‬‬

‫‪ ‬اﻟداﻟﺔ ‪imagecreatefromstring‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻨﺸﺎء ﻣﻘﺒﺾ ﻟﺼﻮرة ﺟﺎھﺰة دون اﻟﺤﺎﺟﺔ إﻟﻰ وﺟﻮد ﻣﻠﻒ ﻟﮭﺎ ﺣﯿﺚ ﯾﻤﻜﻦ ان‬
‫ﺗﻜﻮن ﺑﯿﺎﻧﺎت اﻟﺼﻮرة ﻣﺨﺰﻧﺔ ﺿﺎﻣﻦ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت او ﺑﺎﺳﺘﺨﺪام داﻟﺔ ‪base64_decode‬‬

‫ﻣﺜﺎل‪/‬‬
‫; )" اﻟﻜﻮد اﻟﺬي ﯾﻌﺒﺮ ﻋﻦ اﻟﺼﻮرة "(‪imagecreatefromstring( base64_decode‬‬

‫‪ ‬اﻟداﻟﺔ ‪imagecolorat‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻹرﺟﺎع ﻟﻮن ﺑﻜﺴﻞ ﻣﺤﺪد ﺑﺈﺣﺪاﺛﯿﺎﺗﮫ ﻣﻦ ﺻﻮرة ﻣ ُﺤﺪدة ﺑﻤﻘﺒﻀﮭﺎ ‪ ,‬واﻟﺻﯾﻐﺔ‬
‫اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ‬
‫;)‪$color = imagecolorat($image, $x, $y‬‬

‫‪ ‬اﻟداﻟﺔ ‪imagecolorsforindex‬‬

‫ﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻣﺼﻔﻮﻓﺔ ﺗﺤﻮي ﻗﯿﻢ اﻷﻟﻮان ﺣﯿﺚ ﯾﻤﺜﻞ ﻛﻞ ﻟﻮنﻋﻨﺼﺮا ً ﻣﻦ ﻋﻨﺎﺻﺮ ﺗﻠﻚ اﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬
‫) ‪( 67‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (‬

‫‪ ‬اﻟداﻟﺔ ‪imagedestroy‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪال ﻟﮭﺪم ﻣﻘﺒﺾ اﻟﺼﻮرة وﺗﺤﺮﯾﺮ اﻟﺬاﻛﺮة اﻟﻤﺨﺰﻧﺔ ﻋﻠﯿﮭﺎ اﻟﺼﻮرة وﻛﻞ ﻣﺎ ﺗﺤﺘﺎﺟﮫ‬
‫ھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪:‬‬
‫;)‪imagedestroy($image‬‬

‫‪ ‬اﻟداﻟﺗﯾن ) ‪ imagesy‬و ‪( imagesx‬‬

‫ﺗﺴﺘﺨﺪم ھﺎﺗﺎن اﻟﺪاﻟﺘﺎن ﻹﻋﺎدة اﻟﻄﻮل واﻟﻌﺮض ﻟﻠﺼﻮرة وﻛﻞ ﻣﺎ ﺗﺤﺘﺎﺟﺎﻧﮫ ھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة‬
‫وﺗﻜﻮن اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ) ﻋﻠﻰ ﻓﺮض أن ‪ $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‬ھﻮ اﻟﻠﻮن اﻟﺬي ﺳﯿﺘﻢ وﺿﻌﮫ ﻣﻜﺎن اﻟﻔﺮاغ ﻧﺘﯿﺠﺔ اﻟﺘﺪوﯾﺮ ‪.‬‬

‫ﻣﺜﺎل‪ /‬ﻧﻔﺮض أن ﻣﻘﺒﺾ اﻟﺼﻮرة ھﻮ ‪$x‬‬


‫;)‪imagerotate($x, 45, 0xffffff‬‬

‫‪ ‬اﻟداﻟﺔ ‪imagesetpixel‬‬

‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺘﺤﺪﯾﺪ ﻟﻮن ﺑﻜﺴﻞ ﻣﻌﯿﻦ ﺑﺈﺣﺪاﺛﯿﺎت ‪ , $x, $y‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪:‬‬
‫;)‪imagesetpixel($image, $x, $y, $color‬‬

‫ﺣﯾث أن ‪ $image‬ھو ﻣﻘﺑض اﻟﺻورة و‪ $color‬ھو ﻣﻘﺑض اﻟﻠون ‪.‬‬

‫‪ ‬اﻟداﻟﺔ ‪imageline‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺮﺳﻢ ﻣﺴﺘﻘﯿﻤﺎت ﺑﯿﻦ ﻧﻘﻄﺘﯿﻦ ﻣﺤﺪدﺗﯿﻦ ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪:‬‬
‫;)‪imageline($image, $x1, $y1, $x2, $y2, $color‬‬

‫ﺣﯾث أن ‪ $image‬ھو ﻣﻘﺑض اﻟﺻورة و ‪ $x1, $y1‬ھﻲ إﺣداﺛﯾﺎت ﻧﻘطﺔ اﻟﺑداﯾﺔ و ‪ $x2, $y2‬ھﻲ‬
‫إﺣﺪاﺛﯿﺎت ﻧﻘﻄﺔ اﻟﻨﮭﺎﯾﺔ و ‪ $color‬ھو ﻣﻘﺑض اﻟﻠون ‪.‬‬

‫‪ ‬اﻟداﻟﺔ ‪imagesetthickness‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺤﺪﯾﺪ ﺳﻤﻚ ﺧﻂ اﻟﺮﺳﻢ وھﻲ ﺗﺄﺧﺬ وﺳﯿﻄﯿﻦ اﻷول ﯾﻤﺜﻞ ﻣﻘﺒﺾ اﻟﺼﻮرة واﻟﺜﺎﻧﻲ‬
‫ﯾﻤﺜﻞ ﺳﻤﻚ اﻟﺨﻂﻣﻘﺪرا ً ﺑﺎﻟﺒﯿﻜﺴﻞ‬

‫ﻣﺜﺎل‪ /‬ﻋﻠﻰ ﻓﺮض أن ﻣﻘﺒﺾ اﻟﺼﻮرة ھﻮ ‪$x‬‬


‫;)‪imagesetthickness($x, 5‬‬
‫) ‪( 69‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (‬

‫‪ ‬اﻟداﻟﺔ ‪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‬‬

‫وﺳﺗﻛون اﻟﺻﯾﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭذه اﻟداﻟﺔ ﺑﮭذا اﻟﺷﻛل ‪:‬‬


‫;)‪imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y,$src_w, $src_h‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪imagecopyresized‬‬

‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻨﺴﺦ ﺟﺰء ﻣﻦ اﻟﺼﻮرة وﻟﺼﻘﮫ ﻋﻠﻰ ﺻﻮرة أﺧﺮى ﻣﻊ ﺗﻐﯿﯿﺮ أﺑﻌﺎده واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ‬
‫ﻟﮭﺎ ھﻲ ‪:‬‬

‫‪imagecopyresized($dst_image, $src_image, $dst_x, $dst_y, $src_x,$src_y, $dst_w,‬‬


‫;)‪$dst_h, $src_w, $src_h‬‬

‫وھذه اﻟوﺳﺎﺋط ھﻲ ﻧﻔﺳﮭﺎ اﻟﻣوﺿﺣﺔ ﺑﺎﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ‬

‫‪ ‬اﻟداﻟﺔ ‪imagefilter‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﻄﺒﯿﻖ ﺗﺄﺛﯿﺮات ﻋﻠﻰ اﻟﺼﻮر ) ﻓﻼﺗﺮ ( ‪ ,‬وﺗﺄﺧﺬ ھﺬه اﻟﺪاﻟﺔ ﻋﺪد ﻣﺘﻐﯿﺮ ﻣﻦ‬
‫اﻟﻮﺳﺎﺋﻂ ﺑﺤﺴﺐ اﻟﺘﺄﺛﯿﺮ اﻟﻤ ُﻤﺮر إﻟﯿﮭﺎ وﻟﻛن ﻛﻤﺎ ھﻮ ﻣ ُﻌﺘﺎد ﯾﻜﻮن اﻟﻮﺳﯿﻂ اﻷول ھﻮ ﻣﻘﺒﺾ اﻟﺼﻮرة‬
‫واﻟﺜﺎﻧﻲ ھﻮ اﻟﺜﺎﺑﺖ اﻟﺨﺎص ﺑﺎﻟﻔﻠﺘﺮ ‪ ,‬اﻟﻤ ُﺴﺘﺨﺪم و ﺑﺎﻗﻲ اﻟﻮﺳﺎﺋﻂ ھﻲ وﺳﺎﺋﻂ ﺗﺨﺘﻠﻒ ﺣﺴﺐ اﻟﺘﺄﺛﯿﺮ‬
‫اﻟﻤ ُﺴﺘﺨﺪم ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﻠﺪاﻟﺔ ھﻲ ‪:‬‬
‫) ‪( 70‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻧﻲ ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺻور (‬

‫;)‪imagefilter($image, $filtertype, $arg1, $arg2, $arg3‬‬

‫وﻣن ﺗﺄﺛﯾرات اﻟﻔﻼﺗر اﻟﻣﺳﺗﺧدﻣﺔ ﻣﻊ ھذه اﻟداﻟﺔ ھﻲ ‪-:‬‬

‫‪ -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‬‬
‫>?‬

‫‪ -2‬ﺗطﺑﯾق ﺗﺄﺛﯾر اﻟﺿﺑﺎﺑﯾﺔ ‪blur‬‬

‫‪ IMG_FILTER_SELECTIVE_BLUR‬أو اﻟﺛﺎﺑت‬ ‫وذﻟك ﻋﻧد اﺳﺗﺧدام اﻟﺛﺎﺑت‬


‫‪ , IMG_FILTER_GAUSSIAN_BLUR‬وﻻ داﻋﻲ ﻻﺳﺘﺨﺪام أي وﺳﯿﻂ إﺿﺎﻓﻲ ‪.‬‬

‫واﻟﺠﺪول اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ اﻟﻔﻼﺗﺮ اﻟﻤﺪﻋﻮﻣﺔ ﻣﻦ ﻗﺒﻞ اﻟﺪاﻟﺔ ‪-: imagefilter‬‬

‫اﻟﺸﺮح‬ ‫اﻟﺜﺎﺑﺖ‬
‫ﻋﻛس ﺟﻣﯾﻊ أﻟوان اﻟﺻورة‬ ‫‪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‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_connect‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺈﺟراء اﺗﺻﺎل ﻣﻊ ﺳﯾرﻓر ‪ FTP‬ﻓﺈذا ﺗم اﻻﺗﺻﺎل ﺑﻧﺟﺎح ﺗﻌود ﺑﻣﻘﺑض ﻟﮭذا‬
‫اﻻﺗﺻﺎل ﻟﻧﺗﻣﻛن ﻣن اﺳﺗﺧداﻣﮫ ﻓﻲ ﺑﻘﯾﺔ اﻟﻌﻣﻠﯾﺎت ‪.‬‬

‫ﻣﺛﺎل‪/‬‬
‫; ) "‪$ftp=ftp_connect( "www.example.com‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_login‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺗﺳﺟﯾل دﺧول اﻟﻣﺳﺗﺧدم إﻟﻰ اﻟﺳﯾرﻓر وﺗﺣﺗﺎج ھذه اﻟداﻟﺔ إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل‬
‫واﻻﺳم وﻛﻠﻣﺔ اﻟﺳر وﺗﻌود ﺑﺎﻟﻘﯾﻣﺔ ‪ true‬إذا ﺗم اﻻﺗﺻﺎل ﺑﻧﺟﺎح ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$log=ftp_login( $ftp , "user" , "password‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_pwd‬‬

‫ﺗﻌود ھذه اﻟداﻟﺔ ﺑﺎﺳم اﻟﻣﺟﻠد اﻟﺣﺎﻟﻲ اﻟذي ﻧﺗﻌﺎﻣل ﻣﻌﮫ وﺗﺣﺗﺎج ھذه اﻟداﻟﺔ ﻓﻘط إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل‬
‫‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) ‪$dir=ftp_pwd( $ftp‬‬
‫) ‪( 72‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻟث ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ ﺳﯾرﻓر ‪( FTP‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_chdir‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺗﻐﯾﯾر اﻟﻣﺟﻠد اﻟﺣﺎﻟﻲ ﻓﻲ اﻟﺳﯾرﻓر وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$chdir=ftp_chdir( $ftp , "www‬‬

‫ﻓﻲ ھذا اﻟﻣﺛﺎل ﻧطﻠب اﻻﺗﺟﺎه إﻟﻰ اﻟﻣﺟﻠد ‪www‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_mkdir‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺈﻧﺷﺎء ﻣﺟﻠد ﺟدﯾد ﻓﻲ اﻟﻣﺳﺎر اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$mk=ftp_mkdir( $ftp , "sss‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_rmdir‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺣذف ﻣﺟﻠد ﻣﻌﯾن ﻓﻲ اﻟﻣﺳﺎر اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$rm=ftp_rmdir( $ftp , "sss‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_nlist‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺎﻟﻌودة ﺑﺄﺳﻣﺎء اﻟﻣﻠﻔﺎت واﻟﻣﺟﻠدات ﻓﻲ اﻟﻣﺳﺎر اﻟﻣﺣدد ﻋﻠﻰ ﺷﻛل ﻣﺻﻔوﻓﺔ وﺗﺣﺗﺎج‬
‫إﻟﻰ ﻣﻘﺑض ﻋﻣﻠﯾﺔ اﻻﺗﺻﺎل ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$list=ftp_nlist( $ftp , ".‬‬
‫) ‪( 73‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻟث ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ ﺳﯾرﻓر ‪( FTP‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_get‬‬

‫ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﺗﻧزﯾل ﻣﻠف ﻣن ﺳﯾرﻓر ‪ FTP‬إﻟﻰ ﺟﮭﺎزك او ﻣوﻗﻌك وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض‬
‫اﻻﺗﺻﺎل وأﯾﺿﺎ ً ﺗﺣﺗﺎج إﻟﻰ ﻧوع اﻟﻧﻘل ھل ھو ‪ FTP_ASCII‬او ‪FTP_BINARY‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) ‪ftp_get( $ftp , "/tmp/data.bin" , "/pub/data.bin" , FTP_BINARY‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_put‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﻧﻘل اﻟﻣﻠف ﻣن ﺟﮭﺎزك إﻟﻰ ﺳﯾرﻓر ‪ ftp‬وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل وأﯾﺿﺎ ً‬
‫ﺗﺣﺗﺎج إﻟﻰ ﻧوع اﻟﻧﻘل ھل ھو ‪ FTP_ASCII‬او ‪FTP_BINARY‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) ‪ftp_get( $ftp , "/tmp/data.bin" , "/pub/data.bin" , FTP_BINARY‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_size‬‬

‫ﺗﻌﯾد ھذه اﻟداﻟﺔ ﺣﺟم اﻟﻣﻠف اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$size=ftp_size( $ftp , "file.text‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_rename‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺗﻐﯾﯾر اﻻﺳم ﻟﻠﻣﻠف اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$x=ftp_rename( $ftp , "file.txt" , "fileto.txt‬‬
‫) ‪( 74‬‬ ‫اﻟﻔﺻل اﻟﺛﺎﻟث ﻋﺷر ) دوال اﻟﺗﻌﺎﻣل ﻣﻊ ﺳﯾرﻓر ‪( FTP‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_delete‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺣذف اﻟﻣﻠف اﻟﻣﺣدد وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$d=ftp_delete( $ftp , "file.txt‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_site‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺈرﺳﺎل اﻷواﻣر إﻟﻰ اﻟﺳﯾرﻓر وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬


‫; ) "‪$x=ftp_site( $ftp , "cd‬‬

‫‪ ‬اﻟداﻟﺔ ‪ftp_quit‬‬

‫ﺗﻘوم ھذه اﻟداﻟﺔ ﺑﺈﻏﻼق اﻻﺗﺻﺎل ﻣﻊ اﻟﺳﯾرﻓر وﺗﺣﺗﺎج إﻟﻰ ﻣﻘﺑض اﻻﺗﺻﺎل ‪.‬‬

‫ﻣﺛﺎل‪ /‬ﻧﻔرض أن ﻣﻘﺑض اﻻﺗﺻﺎل ھو ‪$ftp‬‬

‫; ) ‪$close=ftp_quit( $ftp‬‬
‫) ‪( 75‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (‬

‫اﻟﻔﺼﻞ اﻟﺮاﺑﻊ ﻋﺸﺮ‬


‫) اﺷﺘﻤﺎل اﻟﻤﻠﻔﺎت واﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ (‬

‫أوﻻ ً ‪ -:‬اﺷﺘﻤﺎل اﻟﻤﻠﻔﺎت ) ‪( include files‬‬

‫ﻗﺪ ﯾﻜﻮن ﻟﺪﯾﻚ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ ﻣﺘﻐﯿﺮ ﻣﺘﻜﺮر ﻓﻲ أﻛﺜﺮ ﻣﻦ ﺻﻔﺤﺔ أو رﺳﺎﻟﺔ ﺧﻄﺄ ﻣﻌﯿﻨﺔ أو ﺗﺮﯾﺪ إدراج‬
‫ﻧﺺ ﻛﺒﯿﺮ اﻟﺤﺠﻢ ﻓﻲ ﺻﻔﺤﺎت ﻣﺘﻌﺪدة ‪ ,‬ھﻨﺎ ﯾﻤﻜﻦ اﺷﺘﻤﺎل ﻣﻠﻔﺎت داﺧﻞ ﻣﻠﻔﺎت ‪ php‬ھﺬه اﻟﻤﻠﻔﺎت ﻗﺪ‬
‫ﺗﺤﺘﻮي ﻋﻠﻰ ﻧﺼﻮص أو اﻛﻮاد ‪ html‬أو ﻛﻮد ‪ , php‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ھﻲ ‪-:‬‬
‫; ) ‪include ( file name‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫ﻗﻢ ﺑﻔﺘﺢ ﻣﻠﻒ ﻧﺼﻲ وأﻛﺘﺐ ﻓﯿﮫ ﻣﺎ ﺗﺸﺎء ﺛﻢ أﺣﻔﻈﮫ ﺑﺎﺳﻢ ‪ a.txt‬ﺛﻢ ﻗﻢ ﺑﺈﻧﺸﺎء ﻣﻠﻒ ‪ php‬واﻛﺘﺐ ﻓﯿﮫ‬
‫ھﺬا اﻟﻜﻮد‬
‫‪<?php‬‬

‫; ) "‪include ( "a.txt‬‬

‫>?‬

‫اﻧﻘﻠﮭﺎ إﻟﻰ ﻣﺠﻠﺪ اﻟﺴﯿﺮﻓﺮ ‪ ...‬ﺷﻐﻞ ﻣﻠﻒ ‪ php‬وأﻧﻈﺮ اﻟﻨﺘﯿﺠﺔ ‪.‬‬

‫ﯾﻤﻜﻨﻚ أن ﺗﻨﺸﺄ ﻣﻠﻒ ‪ php‬وﺗﺤﺘﻔﻆ ﻓﯿﮫ ﻓﻲ ﺗﻌﺮﯾﻒ داﻟﺔ ) ‪ ( function‬وﻋﻨﺪ اﻟﺤﺎﺟﺔ ﺗﺴﺘﺪﻋﯿﮫ ﻓﻲ‬
‫أي ﻣﻜﺎن ‪.‬‬

‫ﻻﺣﻆ ھﻨﺎ أﺿﻔﻨﺎ ﻓﻘﻂ اﺳﻢ اﻟﻤﻠﻒ اﻟﻨﺼﻲ ﺑﺎﻋﺘﺒﺎر إﻧﮫ ﻣﻮﺟﻮد ﻓﻲ ﻧﻔﺲ اﻟﻤﺠﻠﺪ وﻟﻜﻦ إن ﻛﺎن ﻓﻲ ﻣﺠﻠﺪ‬
‫آﺧﺮ ﯾﺠﺐ إﺿﺎﻓﺔ ﻣﺴﺎر اﻟﻤﻠﻒﻛﺎﻣﻼ ً ‪.‬‬

‫ﻣﻼﺣﻈﮫ‪ /‬اﻟﺪاﻟﺔ ‪ require‬ھﻲﺗﻤﺎﻣﺎ ً ﺗﻌﻤﻞ ﻧﻔﺲ اﻟﺪاﻟﺔ ‪ include‬ﻟﻛن اﻟﻔرق ﺑﯾﻧﮭم ھو اﻧﮫ اذا ﺟﻠﺑﻧﺎ‬
‫ﺻﻔﺣﺔ وﻛﺎن ﻣﺳﺎرھﺎ ﺧطﺄ او اﻟﺻﻔﺣﺔ ﻏﯾر ﻣوﺟودة ﻓﺄﻧﮫ ﺳﯾظﮭر ﺧطﺄ ﺣﯾث اﻧﮫ ﻓﻲ اﻟداﻟﺔ‬
‫‪ include‬ﺳوف ﯾظﮭر اﻟﺧطﺄ وﯾﺳﺗﻣر ﻓﻲ ﺗﻧﻔﯾذ ﺑﺎﻗﻲ ﻛود اﻟﺻﻔﺣﺔ أﻣﺎ ﻓﻲ اﻟداﻟﺔ ‪ require‬ﻓﺄﻧﮫ‬
‫ﺳﯾوﻗف ﺗﻧﻔﯾذ ﺑﺎﻗﻲ اﻟﻛود اﻟﻣوﺟود ﻓﻲ اﻟﺻﻔﺣﺔ ‪ ,‬وھﻧﺎك دوال أﺧرى ﺗﺳﺗﺧدم ﻟﺿﻣﯾن اﻟﻣﻠﻔﺎت ﻣﺛل‬
‫) ‪( 76‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (‬

‫اﻟداﻟﺔ ‪ include_once‬وھﻲ ﺗﺳﺗﺧدم ﻟﺗﺿﻣن اﻟﻣﻠف ﻣرة واﺣدة أي إذا ﻛﻧﺎ ﻗد طﻠﺑﻧﺎ اﻟﻣﻠف‬
‫ﻣرﺗﯾن ﻓﺄﻧﮫ ﺳﯾﺟﻠﺑﮫ ﻣرة واﺣدة ﻓﻘط وﻧﻔس اﻟﺷﻲء ﺑﺎﻟﻧﺳﺑﺔ ﻟﻠداﻟﺔ ‪. require_once‬‬

‫داﻟﺔ ﻋﺮض ﻣﺼﺪر اﻟﻜﻮد‬

‫ﯾﻤﻜﻦ ﻋﺮض ) طﺒﺎﻋﺔ ( ﻛﻮد ﺻﻔﺤﺔ ﻣﻌﯿﻦ وذﻟﻚ ﺑﺎﺳﺘﺨﺪم اﻟﺪاﻟﺔ ) ‪ ( show_source‬وﺳﯾﺗم‬
‫ﻋرض اﻟﻛود ﺑﺷﻛل ﻣﻧﺳق وﻣرﺗب ) ﻛﻣﺎ ھو ﻣﻛﺗوب ( ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫‪<?php‬‬

‫; ) "‪show_source ( "style.css‬‬

‫>?‬

‫ﺛﺎﻧﯿﺎ ً ‪ -:‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت واﻟﻣﺟﻠدات‬

‫أوﻻ ً ‪ -:‬اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﻣﻠﻔﺎت‬


‫‪ ‬اﻟﺪاﻟﺔ ‪basename‬‬

‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﺳﺘﺨﻼص اﺳﻢ اﻟﻤﻠﻒ ﻣﻦ ﻣﺴﺎر ﻣﻌﯿﻦ‬

‫ﻣﺜﺎل‪/‬‬
‫; ) "‪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‬‬

‫ﺗﺴﺘﺨﺪم ﻹﻋﻄﺎء ﻣﻠﻜﯿﺔ او ﻟﺘﻐﯿﯿﺮ ﻣﻠﻜﯿﺔ ﻣﻠﻒ او ﻣﺠﻠﺪ ‪.‬‬

‫ﻣﻼﺣﻈﺔ ‪ /‬ھﺬه اﻟﺪاﻟﺔ ﻻ ﺗﺴﺘﺨﺪم إﻻ ﻣﻦ ﻗﺒﻞ اﻟﻤﺪﯾﺮ ﻟﻠﻤﻠﻔﺎت ‪.‬‬


‫) ‪( 78‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (‬

‫ﻣﺜﺎل‪/‬‬
‫; ) اﻟﻤﻠﻒ او اﻟﻤﺠﻠﺪ ‪ ,‬ﻣﻌﺮف اﻟﻤﺴﺘﺨﺪم ( ‪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‬‬

‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﯿﻄﺒﻊ اﻟﺴﻄﺮ اﻻول ﻣﻦ اﻟﻤﻠﻒ‬


‫) ‪( 80‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (‬

‫‪ ‬اﻟﺪاﻟﺔ ‪file_exists‬‬

‫ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻣﻠﻒ ﺳﻮاء ﺑﺎﻟﻘﺮاءة او اﻟﻜﺘﺎﺑﺔ او ﻏﯿﺮھﺎ ﻻﺑﺪ ﻣﻦ ﻣﻌﺮﻓﺔ ھﻞ اﻟﻤﻠﻒ ﻣﻮﺟﻮد ﻓﻲ‬
‫اﻟﻤﻮﻗﻊ اﻟﺴﻠﯿﻢ أم ﻻ ‪ ,‬ﻷﻧﻨﺎ إذا ﺣﺎوﻟﻨﺎ أن ﻧﺘﻌﺎﻣﻞ ﻣﻌﮫ وﻟﻢ ﯾﻜﻦﻣﻮﺟﻮدا ً ﻓﺴﻮف ﻧﻘﻊ ﻓﻲ أﺧﻄﺎء ‪ ,‬وھﺬه‬
‫اﻟﺪاﻟﺔ ﻧﻌﻄﯿﮭﺎ اﺳﻢ اﻟﻤﻠﻒ ﻓﺘﻌﯿﺪ ﻟﻨﺎ اﻟﻘﯿﻤﺔ ‪ 1‬إذا ﻛﺎن اﻟﻤﻠﻒ ﻣﻮﺟﻮد او أي ﻗﯿﻤﺔ أﺧﺮى إذا ﻟﻢ ﯾﻜﻦ‬
‫ﻣﻮﺟﻮد ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫"اﻟﻤﻠﻒ ﻣﻮﺟﻮد" ‪if( file_exists( "pic.jpg") ) { echo‬‬

‫} "اﻟﻤﻠﻒ ﻏﯿﺮ ﻣﻮﺟﻮد" ‪} else{ echo‬‬

‫‪ ‬اﻟداﻟﺔ ‪file_get_contents‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة ﻣﻠﻒ ﺑﺄﻛﻤﻠﮫ ﻋﻠﻰ ﺷﻜﻞ ﺳﻠﺴﻠﺔ ﻧﺼﯿﺔ و ﯾُﻤﺮر ﻟﮭﺎ ﻣﺴﺎر اﻟﻤﻠﻒﻛﺎﻣﻼ ً ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫)'‪file_get_contents('login.json‬‬

‫‪ ‬اﻟداﻟﺔ ‪file_put_contents‬‬

‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻜﺘﺎﺑﺔ ﺑﯿﺎﻧﺎت اﻟﺘﻲ ﺗﻤﺮر ﻟﮭﺎ إﻟﻰ ﻣﻠﻒ ﻣﺎ وھﻲ ﺗﺄﺧﺬ وﺳﯿﻄﯿﻦ اﻷول ﯾﻤﺜﻞ ﻣﺴﺎر‬
‫اﻟﻤﻠﻒ واﻟﺜﺎﻧﻲ ﯾﻤﺜﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﺘﻀﺎف ﻟﻠﻤﻠﻒ ‪ ,‬وﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎء اﻟﻤﻠﻒ إذا ﻟﻢ ﯾﻜﻦ‬
‫ﻣﻮﺟﻮدا ‪ ,‬وﻓﻲ ﺣﺎل وﺟﻮده ﺗﻘﻮم ﺑﻤﺴﺢ ﺟﻤﯿﻊ ﻣﺤﺘﻮﯾﺎﺗﮫ ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪fopen‬‬

‫ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻊ أي ﻣﻠﻒ ﻻﺑﺪ ﻣﻦ أن ﻧﻘﻮم ﺑﻔﺘﺤﮫ وھﺬه اﻟﺪاﻟﺔ ﺗﻔﺘﺢ اﻟﻤﻠﻒ وﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ ﺛﻼﺛﺔ‬
‫ﻣﺘﻐﯿﺮات ﺣﯿﺚ أن اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻟﺚ اﺧﺘﯿﺎري وﯾﻤﻜﻦ ﻋﺪم ﻛﺘﺎﺑﺘﮫ وﺗﻌﻮد ﻟﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﺑﺮﻗﻢ ﯾﺪﻋﻰ‬
‫ﻣﻘﺒﺾ اﻟﻤﻠﻒ ﻋﻦ طﺮﯾﻘﮫ ﻧﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺪوال اﻷﺧﺮى وإﻟﯿﻚ اﻟﻤﺘﻐﯿﺮات ‪-:‬‬

‫اﻟﻤﺘﻐﯿﺮ اﻷول ‪ -:‬اﺳﻢ اﻟﻤﻠﻒ اﻟﻤﺮاد ﻓﺘﺤﮫ ‪.‬‬


‫) ‪( 81‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (‬

‫اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻧﻲ ‪ -:‬ﻣﺎ ھﻲ اﻟﺤﺎﻟﺔ اﻟﺘﻲ ﺗﺮﯾﺪ أن ﺗﻔﺘﺢ اﻟﻤﻠﻒ ﻋﻠﯿﮭﺎ ) ﻟﻠﻘﺮاءة ﻓﻘﻂ او ﻟﻠﻘﺮاءة واﻟﻜﺘﺎﺑﺔ او‬
‫ﻟﻠﻜﺘﺎﺑﺔ ﻓﻘﻂ ( ‪.‬‬

‫اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻟﺚ ‪ -:‬وھﻮ اﺧﺘﯿﺎري وﯾﺤﺪد ھﻞ ﺗﺮﯾﺪ اﺳﺘﺨﺪام اﻟﻤﺠﻠﺪات اﻟﻤﺤﺪدةﻣﺴﺒﻘﺎ ً ﻓﻲ ﺧﯿﺎرات‬
‫‪ 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‬ﺣﺮف ﻣﻦ اﻟﻤﻠﻒ‬

‫ﻣﺜﺎل ‪ /‬ﻟﻘﺮاءة ﻛﺎﻣﻞ اﻟﻤﻠﻒ ﺑﺤﺴﺐ ﺣﺠﻤﮫ‬


‫; )"‪$s = filesize("file.html‬‬
‫; ) "‪$fp=fopen( "file.txt" , "r‬‬
‫; ) ‪$contents=fread( $fp , $s‬‬
‫; ) ‪fclose( $fp‬‬
‫ﻻﺣﻆ ان اﻟﻤﻠﻒ اذا ﻛﺎن ﻓﺎرغ ﻓﺄن اﻟﺪاﻟﺔ ‪ filesize‬ﺳﺘﻌﯿﺪ اﻟﺮﻗﻢ ‪ 0‬وھﻨﺎ ﺳﯿﺤﺪث ﺧﻄﺄ ﻋﻨﺪ‬
‫اﺳﺘﺨﺪاﻣﮭﺎ داﺧﻞ اﻟﺪاﻟﺔ ‪ fread‬ﻟﺬﻟﻚ ﯾﺠﺐ أن ﻧﺘﺄﻛﺪ ان اﻟﻤﻠﻒ ﻏﯿﺮ ﻓﺎرغ ‪.‬‬

‫‪ ‬اﻟداﻟﺔ ‪fgets‬‬

‫ھﺬه اﻟﺪاﻟﺔ ھﻲﺗﻤﺎﻣﺎ ً ﻣﺜﻞ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ) ‪ ( fread‬واﻟﻔرق اﻟوﺣﯾد ھو أن ھذه اﻟداﻟﺔ ﻻ ﻧﺣدد ﻟﮭﺎ ﺣﺟم‬
‫ﺑﺎﻟﺑﺎﯾت ﻟﺗﻘرأه ﻷﻧﮭﺎ ﺳﺗﺄﺧذ ﺑﺷﻛل اﻓﺗراﺿﻲ اﻟﺣﺟم ‪ 1024‬ﺑﺎﯾت ‪ ,‬وﻛﻼ اﻟداﻟﺗﯾن ﺗﺗوﻗﻔﺎن ﺑﻌد ﻗراءة‬
‫اﻟﻣﻠف ﺑﺎﻟﻛﺎﻣل‬

‫‪ ‬اﻟﺪاﻟﺔ ‪feof‬‬

‫وھﻲ ﺗﻔﯿﺪﻧﺎ ھﻞ ﺗﻢ ﻗﺮاءة اﻟﻤﻠﻒ ﺑﺎﻟﻜﺎﻣﻞ أي ھﻞ وﺻﻠﻨﺎ إﻟﻰ ﻧﮭﺎﯾﺔ اﻟﻤﻠﻒ وﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﻣﻘﺒﺾ‬
‫اﻟﻤﻠﻒ وﺳﻮف ﯾﻌﯿﺪ ﻟﻨﺎ اﻟﻘﯿﻤﺔ ‪ true‬إذا ﻛﻨﺎ ﻗﺪ وﺻﻠﻨﺎ إﻟﻰ ﻧﮭﺎﯾﺔ اﻟﻤﻠﻒ ‪.‬‬
‫) ‪( 83‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (‬

‫ﻣﺜﺎل‪/‬‬
‫; ) ‪feof( $fp‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪fwrite‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﻘﻮم ﺑﻌﻤﻠﯿﺔ اﻟﻜﺘﺎﺑﺔ وھﻲ ﺗﺤﺘﺎج إﻟﻰ اﻟﻤﺘﻐﯿﺮات اﻟﺘﺎﻟﯿﺔ ‪-:‬‬

‫‪ -1‬ﻣﻘﺒﺾ اﻟﻤﻠﻒ اﻟﻤﺮاد اﻟﻜﺘﺎﺑﺔ ﻋﻠﯿﮫ ‪.‬‬


‫‪ -2‬اﻟﻨﺺ اﻟﻤﺎرد ﻛﺘﺎﺑﺘﮫ ‪.‬‬
‫‪ -3‬وھﺬا اﻟﻤﺘﻐﯿﺮ اﺧﺘﯿﺎري وھﻮ ﺣﺠﻢ اﻟﻨﺺ اﻟﻤﺮاد ﻛﺘﺎﺑﺘﮫوﻏﺎﻟﺒﺎ ً ﻻ ﯾﺴﺘﺨﺪم ‪.‬‬

‫وﺳﯿﺘﻢ اﻟﻜﺘﺎﺑﺔ ﻓﻲ داﺧﻞ اﻟﻤﻠﻒ ﻓﻲ اﻟﻤﻜﺎن اﻟﺬي ﺗﻮﻗﻒ ﻓﯿﮫ ﻣﺆﺷﺮ ﻗﺮاءة اﻟﻤﻠﻒ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫; ) "‪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‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (‬

‫‪ ‬اﻟداﻟﺔ ‪is_ executable‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ إﻣﻜﺎﻧﯿﺔ اﻟﺘﻨﻔﯿﺬ ﻋﻠﻰ ﻣﻠﻒ او ﻗﯿﺪ وﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ ‪ 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‬‬

‫ﻣﻼﺣظﺔ‪ /‬ﯾﺠﺐ أن ﯾﻜﻮن اﻟﻤﺠﻠﺪ اﻟﻤﺮاد ﺣﺬﻓﮫ ﻓﺎرﻏﺎ أﻣﺎ إذا ﻛﺎن اﻟﻤﺠﻠﺪ ﯾﺤﺘﻮي أي ﻣﻠﻒ او ﻣﺠﻠﺪ‬
‫ﻓﺮﻋﻲ ‪ ,‬ﻓﻠﻦ ﯾﺘﻢ ﺗﻨﻔﯿﺬ ھﺬه اﻟﺘﻌﻠﯿﻤﺔ و ﺳﯿﺘﻢ ﺗﻮﻟﯿﺪ رﺳﺎﻟﺔ ﺧﻄﺄ ﻟﻜﻦ إذا أردﻧﺎ ﺣﺬف ﻣﺠﻠﺪ ﯾﺤﻮي ﻣﻠﻔﺎت‬
‫وﻣﺠﻠﺪات ﻓﺮﻋﯿﺔ ‪ ,‬ﻓﯿﺠﺐ ﻋﻠﯿﻨﺎ أوﻻ ً أن ﻧﻘﻮم ﺑﺤﺬف ﺟﻤﯿﻊ ﻣﺤﺘﻮﯾﺎﺗﮫ ﻗﺒﻞ ﻣﺤﺎوﻟﺔ اﺳﺘﺪﻋﺎء ھﺬه اﻟﺪاﻟﺔ‬
‫‪ ,‬وأﯾﻀﺎ ً ﯾﺠﺐ اﻻﻧﺘﺒﺎه اﻟﻰ ان اﻟﺘﺼﺮﯾﺢ اﻟﻤﻌﻄﻰ ﻟﻠﻤﻠﻒ ﯾﺴﻤﺢ ﺑﺤﺬﻓﮫ ‪.‬‬

‫ﺛﺎﻟﺛﺎ ً ‪ -:‬اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﻣﻠﻔﺎت اﻟﻣﺿﻐوطﺔ ‪zip‬‬

‫ﻓﻲ اﻟﺒﺪاﯾﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﻤﻠﻔﺎت ﯾﺠﺐ ان ﻧﻔﻌﻠﮭﺎ ﻣﻦ ﺧﻼل اﻟﻤﻠﻒ ‪ php.ini‬اﻟﺬي ﯾﻜﻮن‬
‫ﻣﺮﻓﻖ ﻣﻊ اﻟﺴﺮﻓﺮ ﺣﯿﺚ ﺳﻨﺒﺤﺚ ﻋﻦ اﻟﻌﺒﺎرة ) ‪ ( extension=php_zip.dll‬ﻓﻲ داﺧﻞ اﻟﻤﻠﻒ‬
‫ﺳﻨﺠﺪ ﻗﺒﻞ ھﺬه اﻟﻌﺒﺎرة ) ﻓﻲ ﺑﺪاﯾﺔ اﻟﺴﻄﺮ ( ھﺬه اﻟﻌﻼﻣﺔ ) ; ( اﻟﻔﺎرزة اﻟﻤﻨﻘﻮطﺔ وھﺬا ﯾﺪل ﻋﻠﻰ اﻧﮭﺎ‬
‫ﻻ ﺗﻌﻤﻞ وﻛﻞ ﻣﺎ ﻋﻠﯿﻨﺎ ﻓﻌﻠﮫ ھﻮ ان ﻧﺤﺬف ھﺬه اﻟﻔﺎرزة اﻟﻤﻮﺟﻮدة ﻓﻲ ﺑﺪاﯾﺔ اﻟﺴﻄﺮ ﻟﺘﻔﻌﯿﻠﮭﺎ ‪.‬‬

‫‪zip_open ‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻠﻔﺘﺢ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط وﻛﻞ ﻣﺎ ﻋﻠﯿﻨﺎ ﻓﻌﻠﮫ ھﻮ ان ﻧﻤﺮر ﻟﮭﺎ ﻣﺴﺎر ھﺬا اﻟﻤﻠﻒ ﺑﯿﻦ‬
‫ﻗﻮﺳﯿﮭﺎ ‪ ,‬وﺳﺘﻌﯿﺪ ﻟﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﻣﻘﺒﺾ ﻟﻌﻤﻠﯿﺔ اﻟﻔﺘﺢ ‪.‬‬

‫ﻣﺜﺎل‪/‬‬
‫;)"‪$o = zip_open("file.zip‬‬

‫‪zip_close ‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺤﺮﯾﺮ ﻣﻘﺒﺾ اﻟﻔﺘﺢ اﻟﺬي ﺗﻌﯿﺪه اﻟﺪاﻟﺔ ‪ zip_open‬وھﻲ ﻻ ﺗﺤﺘﺎج إﻻ اﻟﻰ اﺳﻢ‬
‫اﻟﻤﻘﺒﺾ ﺑﯿﻦ ﻗﻮﺳﯿﮭﺎ ‪.‬‬
‫) ‪( 89‬‬ ‫اﻟﻔﺻل اﻟراﺑﻊ ﻋﺷر ) اﺷﺗﻣﺎل اﻟﻣﻠﻔﺎت واﻟﺗﻌﺎﻣل ﻣﻌﮭﺎ (‬

‫ﻣﺜﺎل‪/‬‬
‫;)"‪$o = zip_open("file.zip‬‬

‫;) ‪zip_close( $o‬‬

‫‪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 ‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة ﺣﺠﻢ اﻟﻤﻠﻒ اﻟﺪاﺧﻠﻲ اﻟﻤﻮﺟﻮد داﺧﻞ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط ‪.‬‬

‫ﻣﺜﺎل‪ /‬ﻟﺠﻠﺐ أﺣﺠﺎم ﻛﻞ اﻟﻤﻠﻔﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط ‪.‬‬


‫;)"‪$o = zip_open("file.zip‬‬
‫{) ‪if( $o‬‬
‫;) ‪$e = zip_read( $o‬‬
‫{) ‪while( $e‬‬
‫;) ‪$n = zip_entry_filesize( $e‬‬
‫; ">‪echo $n . "<br‬‬
‫;) ‪$e = zip_read( $o‬‬
‫}‬
‫}‬
‫) ‪( 91‬‬ ‫اﻟﻔﺻل اﻟﺧﺎﻣس ﻋﺷر ) ﺗﺻﯾد اﻷﺧطﺎء (‬

‫اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ‬


‫) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (‬

‫إذا ﻛﺘﺐ اﻟﻤﺴﺘﺨﺪم ﺟﻤﻠﺔ ﻓﻲ ﻣﺮﺑﻊ ﻧﺺ ﯾﺤﺘﻮي ﻋﻠﻰ ﻋﺪة ﻛﻠﻤﺎت وﺗﺮﯾﺪ أن ﺗﺘﺄﻛﺪ ﻣﻦ وﺟﻮد ﻛﻠﻤﺔ‬
‫ﻣﻌﯿﻨﺔ وﺳﻂ ھﺬه اﻟﺠﻤﻠﺔ أو ﻣﻌﺮﻓﺔ ﺻﺤﺔ ﻛﺘﺎﺑﺔ اﻟﺒﺮﯾﺪ اﻻﻟﯿﻜﺘﺮوﻧﻲ اﻟﻤﺪﺧﻞ أو ‪ ...‬اﻟﺦ ‪ ,‬ﻧﺤﺘﺎج إﻟﻰ‬
‫اﻟﺪاﻟﺔ ‪. ereg‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪ereg‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻤﻌﺮﻓﺔ وﺟﻮد ﻛﻠﻤﺔ ﻓﻲ ﻣﺘﻐﯿﺮ ﻣﺎ ‪ ,‬واﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬
‫) اﺳﻢ اﻟﻤﺘﻐﯿﺮ ‪ " ,‬اﻟﻜﻠﻤﺔ " ( ‪ereg‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; " ‪$word = "one , two , three , one‬‬


‫} ; ]‪if ( ereg ("one" , $word , $rog ) ) { echo $rog[0‬‬
‫} ; ]‪if ( ereg ("two" , $word , $rog ) ) { echo $rog[0‬‬

‫ﻧﻼﺣﻆ ﻓﻲ اﻟﻤﺜﺎل أﻋﻼه ﻋﺪة أﻣﻮر ‪-:‬‬


‫‪ -1‬اﺳﺘﺨﺪام اﻟﺪاﻟﺔ ‪ ereg‬ﻓﻲ أداة اﻟﺸﺮط ‪ if‬واﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ أﻛﺜﺮ ﻣﻦ ﻣﻜﺎن ﻟﻠﺒﺤﺚ ﻋﻦ أﻛﺜﺮ ﻣﻦ ﻛﻠﻤﺔ‬
‫‪.‬‬

‫‪ -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\. ) -:‬‬

‫ﺻﻨﺎﻋﺔ ﻓﺌﺔ ﺣﺮوف ]‪[ xyz‬‬

‫ﻧﻘﺼﺪ ﺑﺬﻟﻚ إﻧﻨﺎ ﻧﺤﺪد ﻧﻄﺎق ﻣﻌﯿﻦ ﻣﻦ اﻟﻜﻠﻤﺔ ﻣﻦ اﻟﻤﻤﻜﻦ أن ﯾﻜﻮن ﻓﻲ ھﺬا اﻟﻨﻄﺎق أي ﺣﺮوف ﻣﻦ‬
‫اﻟﻔﺌﺔ اﻟﺘﻲ أﻗﻮم ﺑﺘﺤﺪﯾﺪھﺎ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; "?‪$y = "how are you‬‬

‫} ; "‪if ( ereg ( "h[oe]" , $y ) { echo "true‬‬

‫ھﻨﺎ ﻓﺈﻧﮫ ﺳﻮف ﯾﺒﺤﺚ ﻋﻦ أي ﻛﻠﻤﺔ ﺗﺒﺪأ ﺑﺎﻟﺤﺮف ‪ h‬وﻣﻦ ﺛﻢ ﯾﺘﺒﻌﮭﺎ أﺣﺪ ھﺎذﯾﻦ اﻟﺤﺮﻓﯿﻦ ‪ o‬أو ‪, e‬‬
‫وإن أردﻧﺎ اﻟﺒﺤﺚ ﻋﻦ ﻛﻠﻤﺔ ﺗﺒﺪأ ﺑﺎﻟﺤﺮف ‪ h‬وﻟﻜﻦ ﯾﺠﺐ أن ﻻ ﯾﺘﺒﻌﮭﺎ ھﺎذﯾﻦ اﻟﺤﺮﻓﯿﻦ ﻓﺈﻧﻨﺎ ﻧﻀﯿﻒ‬
‫اﻟﻌﻼﻣﺔ ) ^ ( ﻗﺒﻞ اﻟﺤﺮﻓﯿﻦ "]‪. "h[^oe‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﯾﻤﻜﻨﻨﺎ اﺳﺘﻌﻤﺎل اﺧﺘﺼﺎرات ﻟﺒﻌﺾ اﻷﻣﻮر ﻓﻤﺜﻼ ً إذا ﻛﻨﺎ ﻧﺮﯾﺪ ﻛﻠﻤﺔ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ أي‬
‫رﻗﻢ ﻛﻨﺎ ﺳﻨﻜﺘﺐ ﻛﺎﻟﺘﺎﻟﻲ ] ‪ [ ^ 123456789‬وﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل اﺧﺘﺼﺎر ﻟﻠﻤﻮﺿﻮع ﻛﺎﻟﺘﺎﻟﻲ ‪[ ^ 0 -‬‬
‫] ‪ , 9‬وﺣﺘﻰ إذا أردﻧﺎ أن ﯾﺘﺄﻛﺪ ﻣﻦ وﺟﻮد اﻟﺮﻗﻢ ﻓﻌﻠﯿﻨﺎ ﻣﺴﺢ ھﺬه اﻟﻌﻼﻣﺔ ) ^ ( ‪ ,‬وھﺬه اﻻﺧﺘﺼﺎرات‬
‫ﻓﻲ اﻟﺠﺪول ﻓﻲ اﻷﺳﻔﻞ ﺗﺸﻤﻞ أﺣﺮف وأﺷﯿﺎء أﺧﺮى ‪.‬‬
‫) ‪( 93‬‬ ‫اﻟﻔﺻل اﻟﺧﺎﻣس ﻋﺷر ) ﺗﺻﯾد اﻷﺧطﺎء (‬

‫ﻣﻌﻨﺎه و وﺿﯿﻔﺘﮫ‬ ‫اﻟﻤﻄﺎﺑﻖ ﻟﮫ‬ ‫اﻻﺧﺘﺼﺎر‬


‫أي رﻗﻢ ﻣﻦ ‪ 0‬إﻟﻰ ‪9‬‬ ‫]‪[0-9‬‬ ‫‪\d‬‬
‫ﻣﻤﻨﻮع اﻷرﻗﺎم ﻣﻦ ‪ 0‬إﻟﻰ ‪9‬‬ ‫]‪[^0-9‬‬ ‫‪\D‬‬
‫أي رﻗﻢ أو أي ﺣﺮف ﻛﺒﯿﺮ أو ﺻﻐﯿﺮ أو ﻋﻼﻣﺔ ‪-‬‬ ‫]‪[0-9 A-Z a-z-‬‬ ‫‪\w‬‬
‫ﻋﻜﺲ اﻟﺴﺎﺑﻘﺔ‬ ‫]‪[^ 0-9 A-Z a-z-‬‬ ‫‪\W‬‬
‫ﯾﻘﺒﻞ ﻣﺴﺎﻓﺔ أو ﺳﻄﺮ ﺟﺪﯾﺪ أو ﻋﻼﻣﺔ ﺟﺪول ‪tab‬‬ ‫] ‪[\t \n \r‬‬ ‫‪\s‬‬
‫ﻋﻜﺲ اﻟﺴﺎﺑﻘﺔ‬ ‫] ‪[^\t \n \r‬‬ ‫‪\S‬‬

‫ﻣﻼﺣﻈﮫ‪ /‬ﻟﺘﺤﺪﯾﺪ ﻣﻜﺎن اﻟﻜﻠﻤﺔ إن ﻛﺎﻧﺖ ﻓﻲ اﻟﺒﺪاﯾﺔ أو ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﻨﺺ ﺣﯿﺚ إن اﻟﻌﻼﻣﺔ ) ^ ( ﻟﺘﺤﺪﯾﺪ‬
‫اﻟﻤﻜﺎن ﻟﺒﺪاﯾﺔ اﻟﺠﻤﻠﺔ واﻟﻌﻼﻣﺔ )‪ ( $‬ﻟﻨﮭﺎﯾﺔ اﻟﺠﻤﻠﺔ ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬

‫; "‪$x = "how are you‬‬

‫} ; "‪if (ereg ("^h" , $x) {echo "true‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; "‪$x = "how are you‬‬

‫} ; "‪if (ereg ("h$" , $x) {echo "true‬‬

‫ﯾﻤﻜﻦأﯾﻀﺎ ً اﻻﺧﺘﯿﺎر إذا ﻣﺎ ﻛﺎن واﺣﺪ ﻣﻦ ﻧﻤﻄﯿﻦﺻﺤﯿﺤﺎ ً ﺑﻮاﺳﻄﺔ اﻟﻌﻼﻣﺔ ) | ( ‪.‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; "‪$x = "how are you‬‬

‫} ; "‪if (ereg ("^g | y$" , $x) {echo "true‬‬

‫ﺳﯿﻌﺘﺒﺮ ﻓﻲ ھﺬا اﻟﻤﺜﺎل إن اﻟﺸﺮط ﻣﺘﺤﻘﻖ ‪.‬‬

‫اﻟﻌﻼﻣﺎت ) * و ‪ +‬و ? (‬

‫ﺑﺎﺳﺘﺨﺪام ھﺬه اﻟﻌﻼﻣﺎت ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ إذا ﻣﺎ ﻛﺎن ﺣﺮف أو ﺟﻤﻠﺔ ﻣﺘﻜﺮرة ﺑﻌﺪد ﻣﻦ اﻟﻤﺮات أو ﻣﺮة‬
‫واﺣﺪة ‪.‬‬
‫) ‪( 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‬‬ ‫اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (‬

‫ﺣﺮف أو ﻣﺠﻤﻮﻋﺔ ﺣﺮوف ﻣﻜﺮرة ﻣﺮة أو أﻛﺜﺮ‬ ‫‪+‬‬


‫ﺣﺮف أو ﻣﺠﻤﻮﻋﺔ ﺣﺮوف ﻣﻜﺮرة ﻣﺮة أو أﻛﺜﺮ أو ﻏﯿﺮ ﻣﻜﺮرةﻧﮭﺎﺋﯿﺎ ً‬ ‫*‬
‫ﺗﻜﺮار ﻣﺤﺼﻮر ﺑﯿﻦ ﻋﺪدﯾﻦ‬ ‫} ‪{ x, y‬‬
‫ﺗﻜﺮار ﺑﺤﺪ أﻗﺼﻰ ﻣﻦ اﻟﻤﺮات‬ ‫}‪{,y‬‬
‫ﺗﻜﺮار ﺑﺤﺪ أدﻧﺎ ﻣﻦ اﻟﻤﺮات‬ ‫}‪{x,‬‬
‫ﺗﻜﺮار ﺑﻌﺪد ﻣﻌﯿﻦ‬ ‫}‪{x‬‬
‫ﻓﻲ ﺑﺪاﯾﺔ اﻟﻨﺺ‬ ‫^‬
‫ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﻨﺺ‬ ‫‪$‬‬

‫ﻣﺜﺎل ‪ -:‬ﻟﻠﺘﺄﻛﺪ ﻣﻦ إﻣﯿﻞ‬


‫‪^[-a-z A-Z 0-9-]+(\.[-A-Z a-z 0-9-]+)*@[a-z A-Z 0-9-]+(\.[a-z A-Z 0-9-]+)*$‬‬

‫ﺷﺮح اﻟﺘﻌﺒﯿﺮ ‪-:‬‬

‫اﻟﺸﺮح‬ ‫اﻟﺮﻣﺰ‬
‫ﯾﺠﺐ أن ﯾﺒﺪأ اﻟﻨﺺ‬ ‫^‬
‫أي ﺣﺮف ﻣﻦ ‪ a‬إﻟﻰ ‪ z‬ﻛﺒﯿﺮ أو ﺻﻐﯿﺮ أو أرﻗﺎم‬ ‫]‪[-a-z A-Z 0-9-‬‬

‫وﻗﺪ ﯾﻜﻮن ھﺬا اﻟﺤﺮف ﻣﻜﺮر أﻛﺜﺮ ﻣﻦ ﻣﺮة‬ ‫‪+‬‬


‫ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ اﻧﮫ ﻗﺪ ﯾﺘﺒﻊ ﺑﺎﻟﻨﻘﻄﺔ أو ﺣﺮوف و‬ ‫)‪(\.[-a-z A-Z 0-9-]+‬‬
‫أرﻗﺎم‬
‫وﻗﺪ ﻻ ﯾﺘﺒﻌﮫ أو ﯾﺘﺒﻌﮫ وﯾﺘﻜﺮر أﻛﺜﺮ ﻣﻦ ﻣﺮة‬ ‫*‬
‫وﺑﻌﺪ ذﻟﻚ ﯾﻜﻮن ﻟﺪﯾﮫ اﻟﺤﺮف @‬ ‫@‬
‫وأﯾﻀﺎ ً ﻧﻔﺲ اﻟﻘﻮاﻋﺪ ﻓﻲ اﻟﻨﮭﺎﯾﺔ‬ ‫*)‪[a-z A-Z 0-9-]+(\.[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‬‬

‫{) ) ‪if( filter_var( $x , FILTER_VALIDATE_EMAIL‬‬

‫; “ ‪echo “ yes‬‬

‫{ ‪} else‬‬

‫} ; “ ‪echo “ no‬‬

‫ﻛﻣﺎ ﺗﻼﺣظ ھﻧﺎ ﺗﺣﻘﻘﻧﺎ ﻣن أن اﻟﻣﺗﻐﯾر ﯾﺣﻣل ﺑرﯾد اﻟﯾﻛﺗروﻧﻲ ‪ ,‬وھﻧﺎك اﻧواع أﺧرى ﻣن اﻟﺗﺣﻘﻘﺎت‬
‫ﻣﻧﮭﺎ ‪-:‬‬

‫‪ FILTER_VALIDATE_BOOLEAN‬ﻟﻠﺗﺣﻘق ﻣن اﻟﻘﯾﻣﺔ ا ﻟﺑوﻟﯾﺔ ) ‪, yes , 1‬‬ ‫‪-1‬‬


‫‪. ( true‬‬
‫ﻟﻠﺗﺣﻘق ﻣن اﻻﻣﯾل ‪.‬‬ ‫‪FILTER_VALIDATE_EMAIL‬‬ ‫‪-2‬‬
‫ﻟﻠﺗﺣﻘق ﻣن اﻟﻛﺳور اﻟﻌﺷرﯾﺔ ‪.‬‬ ‫‪FILTER_VALIDATE_FLOAT‬‬ ‫‪-3‬‬
‫ﻟﻠﺗﺣﻘق ﻣن اﻟﻘﯾم اﻟرﻗﻣﯾﺔ اﻟﺻﺣﯾﺣﺔ ‪.‬‬ ‫‪FILTER_VALIDATE_INT‬‬ ‫‪-4‬‬
‫ﻟﻠﺗﺣﻘق ﻣن اﻟـ ‪. ip‬‬ ‫‪FILTER_VALIDATE_IP‬‬ ‫‪-5‬‬
‫ﻟﻠﺗﺣﻘق ﻣن اﻟراﺑط ‪.‬‬ ‫‪FILTER_VALIDATE_URL‬‬ ‫‪-6‬‬
‫) ‪( 99‬‬ ‫اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (‬

‫‪ ‬اﻟﺪاﻟﺔ ‪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‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬اﻟﺤﺮوف اﻟﺴﻼﺷﯿﺔ ھﻲ ﻣﺜﻞ ‪ .... \t \n \b \r \f‬إﻟﺦ‬

‫ﻣﺜﺎل‪/‬‬
‫;"‪$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‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﯾﻘﺼﺪ ﺑﺎﻟﻨﻈﺎم اﻟﺴﺘﻌﺸﺮي ھﻲ ھﺬه اﻷرﻗﺎم واﻟﺤﺮوف ﻓﻘﻂ ) ‪( 123456789abcdef‬‬


‫وﯾﺴﺘﻔﺎد ﻣﻦ ھﺬا اﻟﻨﻈﺎم ﻓﻲ أﺷﯿﺎء ﻛﺜﯿﺮة ﻣﻨﮭﺎ ﻣﺜﻼ ً اﻟﻘﯿﻢ اﻟﻠﻮﻧﯿﺔ ‪.‬‬
‫) ‪( 102‬‬ ‫اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ﻋﺸﺮ ) ﺗﺼﯿﺪ اﻷﺧﻄﺎء (‬

‫ﻣﺜﺎل‪/‬‬
‫;"‪$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‬‬

‫اﻟﻔﺻل اﻟﺳﺎدس ﻋﺷر‬


‫) ‪( session & cookies‬‬

‫أوﻻ ً ‪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‬‬

‫ﻣﺴﺢ اﻟﻜﻮﻛﯿﺰ‬

‫ﯾﻤﻜﻨﻨﺎ ﻣﺴﺢ اﻟﻜﻮﻛﯿﺰ ﺑﺄﻛﺜﺮ ﻣﻦ طﺮﯾﻘﺔ ‪ ،‬ﺑﺎﻟﻄﺒﻊ ﻓﺈن اﻟﻤﺴﺘﺨﺪم ﯾﺴﺘﻄﯿﻊ ﻣﺴﺢ اﻟﻜﻮﻛﯿﺰ وﺗﻐﯿﯿﺮ‬
‫ﻣﺤﺘﻮﯾﺎﺗﮭﺎ ﺑﻨﻔﺴﮫ وﻟﻜﻦ ﻓﻲ ﺣﺎﻟﺔ ﻣﺎ إذا أردﻧﺎ أن ﻧﺠﻌﻞ اﻟﺴﯿﺮﻓﺮ ﯾﻘﻮم ﺑﻤﺴﺤﮭﺎ ﻓﺈﻧﻨﺎ ﻧﺴﺘﺨﺪم إﺣﺪى‬
‫ھﺎﺗﯿﻦ اﻟﻄﺮﯾﻘﺘﯿﻦ‬

‫أﻣﺎ أن ﻧﻘﻮم ﺑﺈﺧﺒﺎر اﻟﺴﯿﺮﻓﺮ ﺑﻮﻗﺖ ﻗﺪﯾﻢ ‪:‬‬


‫; )‪setcookie ("ahmed" , " 0 " , time() - 999‬‬

‫وإﻣﺎ اﻟﻘﯿﺎم ﺑﻤﺴﺢ اﻟﻜﻮﻛﯿﺰ ﺑﻜﺘﺎﺑﺔ اﺳﻤﮫ ﻓﻘﻂ ‪:‬‬


‫; )"‪setcookie ("ahmed‬‬
‫) ‪( 105‬‬ ‫اﻟﻔﺼﻞ اﻟﺴﺎدس ﻋﺸﺮ ) ‪( Sessions & Cookies‬‬

‫ﺛﺎﻧﯾﺎ ً ‪ -:‬اﻟﺟﻠﺳﺎت ‪sessions‬‬

‫اﻟﺠﻠﺴﺔ ھﻲ آﻟﯿﺔ ﻟﺘﺘﺒﻊ اﻟﻤﺴﺘﺨﺪم وھﻮ ﯾﻘﻮم ﺑﻤﺨﺘﻠﻒ اﻟﻌﻤﻠﯿﺎت داﺧﻞ اﻟﻤﻮﻗﻊ ﺣﯿﺚ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ھﺬه‬
‫اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ ﺟﮭﺎز اﻟﺴﯿﺮﻓﺮﻋﻮﺿﺎ ً ﻋﻦ ﺣﻔﻈﮭﺎ ﻋﻠﻰ ﺟﮭﺎز اﻟﻤﺴﺘﺨﺪم ﻛﻤﺎ ھﻮ اﻟﺤﺎل ﻓﻲ اﻟﻜﻮﻛﯿﺰ ‪,‬‬
‫ﻟﻜﻞ ﻣﺴﺘﺨﺪم ‪ id‬ﺧﺎص ﺑﮫ ﯾﺴﻤﻰ ‪ session id‬او اﺧﺘﺼﺎرا ‪. sid‬‬
‫ﻟﺒﺪأ اﻟﺠﻠﺴﺔ ﯾﺠﺐ ﺗﻀﻤﯿﻦ ;) (‪ session_start‬ﻓﻲ رأس ﻛﻞ ﺻﻔﺤﺔ ﻧﻮد اﺳﺘﺨﺪام اﻟﺠﻠﺴﺎت ﻓﯿﮭﺎ ‪.‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪$_SESSION‬‬

‫وھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت اﻟﺠﻠﺴﺎت ﻓﯿﮭﺎ وﻣﻦ ﺧﻼﻟﮭﺎ ﯾﺘﻢ إﺿﺎﻓﺔ ﻣﺘﻐﯿﺮ ﺧﺎص‬
‫ﺑﺎﻟﺠﻠﺴﺔ ﻣﺒﺎﺷﺮة ‪ ,‬وﺗﻜﻮن اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﮭﺎ ﺑﮭﺬا اﻟﺸﻜﻞ‬
‫;‪$_SESSION[' var '] = value‬‬

‫ﻻﺣظ أن ‪ var‬ﯾﻣﺛل اﺳم اﻟﻣﺗﻐﯾر اﻟذي ﺳﺗﺧزن ﻓﯾﮫ اﻟﻘﯾﻣﺔ وﯾﻣﻛن اﺧﺗﯾﺎر أي اﺳم ‪ ,‬وﯾﻣﻛن طﺑﺎﻋﺗﮫ‬
‫ﺑﮭذا اﻟﺷﻛل ‪-:‬‬
‫; ]‘ ‪echo $_SESSION[‘ var‬‬

‫وﻟﺤﺬف ﻣﺘﻐﯿﺮ ﺧﺎص ﺑﺎﻟﺠﻠﺴﺎت ﯾﻤﻜﻦ إﺳﻨﺎد ﻗﯿﻤﺔ ﻓﺎرﻏﺔ ﻟﮫ ‪.‬‬

‫‪ ‬اﻟداﻟﺔ ‪unset‬‬

‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺤﺬف ﻣﺘﻐﯿﺮ ﺧﺎص ﺑﺎﻟﺠﻠﺴﺎت ‪ ,‬ﻣﺜﺎل‪/‬‬


‫;)]'‪unset($_SESSION['name‬‬

‫‪ ‬اﻟداﻟﺔ ;) (‪session_destroy‬‬

‫ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﻟﺣذف ﻛﺎﻣل اﻟﺟﻠﺳﺔ وذﻟك ﺑﻛﺗﺎﺑﺗﮭﺎ ﻓﻘط ﻣﻊ ﻣﻼﺣظﺔ ﺑﺄﻧﮫ ﯾﺟب أن ﻧﻛﺗب ﻗﺑﻠﮭﺎ‬
‫اﻟداﻟﺔ ‪. session_start‬‬

‫ﻣﺛﺎل‪/‬‬
‫; ) (‪session_start‬‬

‫; ) (‪session_destroy‬‬
‫) ‪( 106‬‬ ‫اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ﻋﺸﺮ ) ‪( MYSQL‬‬

‫اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ﻋﺸﺮ‬


‫) ‪( MySQL‬‬

‫ﺗﻘﺴﻢ ‪ MySQL‬إﻟﻰ ﺟﺰأﯾﻦ ھﻤﺎ ‪-:‬‬

‫‪ -1‬ﻟﻐﺔ ﺗﻌﺮﯾﻒ اﻟﺒﯿﺎﻧﺎت ‪DDL‬‬

‫وﺗﻌﻤﻞ ھﺬه اﻟﻠﻐﺔ ﻋﻠﻰ إﻧﺸﺎء وﺗﻌﺪﯾﻞ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت واﻟﺠﺪاول ‪ ,‬وأھﻢ أواﻣﺮھﺎ ‪create table ,‬‬
‫‪. alter , create database‬‬

‫‪ -2‬ﻟﻐﺔ ﻣﻌﺎﻟﺠﺔ اﻟﺒﯿﺎﻧﺎت ‪DML‬‬

‫وھﺬه اﻟﻠﻐﺔ ﺗﺨﺘﺺ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺪرﺟﺔ داﺧﻞ اﻟﺠﺪاول ﻣﻦ ﻋﻤﻠﯿﺎت ﺣﺬف وﺗﺤﺮﯾﺮ وإدراج‬
‫وﺗﻌﺪﯾﻞ ‪ ...‬اﻟﺦ ‪ ,‬وأھﻢ أواﻣﺮھﺎ ‪. 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 (no int(5) not null , name varchar(20) not null , gride int(3) not null‬‬
‫;‬

‫ﻋﻨﺪ ﺗﻨﻔﯿﺬ اﻟﻜﻮد اﻟﺴﺎﺑﻖ ﺳﻮف ﺗﺸﺎھﺪ رﺳﺎﻟﺔ ﺗﺨﺒﺮك ﺑﻨﺠﺎح اﻟﻌﻤﻠﯿﺔ ‪.‬‬

‫ﺳﺄﺷﺮح اﻵن اﻟﻜﻮد اﻟﺴﺎﺑﻖ ‪-:‬‬

‫ﻛﻤﺎ ﺗﻌﺮف ﻓﺄن ) ‪ ( create table‬ﺗﺨﺒﺮ اﻟﺴﯿﺮﻓﺮ ﻋﻦ إﻧﺸﺎء ﺟﺪول ﺟﺪﯾﺪ وﻗﺪ ﺳﻤﯿﻨﺎ ھﺬا اﻟﺠﺪول‬
‫)‪ (std‬ﺑﻌﺪ ذﻟﻚ ﻧﻔﺘﺢﻗﻮﺳﺎ ً ﻟﻨﻀﻊ ﺣﻘﻮل اﻟﺠﺪول ﺣﯿﺚ وﺿﻌﻨﺎ ‪ na‬وھﻲ ﺗﻤﺜﻞ اﻟﺮﻗﻢ ) ‪( number‬‬
‫وﯾﻤﻜﻦ وﺿﻊ أي اﺳﻢ آﺧﺮ ‪ ,‬ﺑﻌﺪ ذﻟﻚ وﺿﻌﻨﺎ ‪ int‬وھﻲ ﺗﻤﺜﻞ اﻟﻘﯿﻢ اﻟﻌﺪدﯾﺔ ﺣﯿﺚ إن وﺿﻌﻨﺎ ‪ int‬ﻓﻲ‬
‫أي ﺣﻘﻞ ﺳﯿﺪل ذﻟﻚ ﻋﻠﻰ إن ھﺬا اﻟﺤﻘﻞ ﻟﻦ ﯾﺴﺘﻘﺒﻞ إﻻ اﻷﻋﺪاد ‪ ,‬وﺑﻌﺪھﺎ وﺿﻌﻨﺎ ﺑﯿﻦ ﻗﻮﺳﯿﻦ اﻟﺮﻗﻢ ) ‪5‬‬
‫( ﺣﯿﺚ إن ھﺬا ﯾﺪل ﻋﻠﻰ إن أﻛﺒﺮ ﻗﺪر ﯾﻤﻜﻦ أن ﯾﺤﺘﻮي ھﺬا اﻟﺤﻘﻞ ھﻮ ﺧﻤﺲ أرﻗﺎم وﺑﻌﺪھﺎ وﺿﻌﻨﺎ‬
‫) ‪ ( not null‬وھﺬه ﺗﺸﯿﺮ إﻟﻰ أن ھﺬا اﻟﺤﻘﻞ ﻻ ﯾﻤﻜﻦ أن ﯾﺘﺮكﻓﺎرﻏﺎ ً وﺑﻌﺪھﺎ وﺿﻌﻨﺎ ﻓﺎرزة ﻟﻨﺒﯿﻦ‬
‫) ‪( 109‬‬ ‫اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ ﻋﺸﺮ ) ‪( MYSQL‬‬

‫اﻧﺘﮭﺎء ھﺬا اﻟﺤﻘﻞ وﻧﻌﺮف ﺣﻘﻞ ﺟﺪﯾﺪ ‪ ,‬وﻻﺣﻆ إﻧﻨﺎ ھﻨﺎ ﻋﺮﻓﻨﺎ ﺛﻼﺛﺔ ﺣﻘﻮل ﻓﻲ ھﺬا اﻟﺠﺪول ‪ .‬ﺣﯿﺚ إن‬
‫) ‪ ( varcher‬ﺗﺸﯿﺮ إﻟﻰ أن ﻗﯿﻢ ھﺬا اﻟﺤﻘﻞ ھﻲ ﻓﻘﻂ ﺣﺮوف ‪.‬‬

‫* ﻟﻮ أردﻧﺎ ﺣﺬف اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ ‪-:‬‬


‫; ‪drop table std‬‬

‫وﻋﻨﺪ ﺗﻨﻔﯿﺬ ذﻟﻚ ﺳﻮف ﺗﺸﺎھﺪ رﺳﺎﻟﺔ ﺗﺨﺒﺮك ﻋﻦ ﻧﺠﺎح اﻟﻌﻤﻠﯿﺔ ‪.‬‬

‫وﻟﻮ أردﻧﺎ أن ﻧﻀﯿﻒ ﺑﯿﺎﻧﺎت ﻓﻲ ﺣﻘﻮل اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﺳﻮف ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ ‪-:‬‬
‫; )‪insert into std (no,name,gride) value (1,'sager',95‬‬

‫وﻋﻨﺪ ﺗﻨﻔﯿﺬ ذﻟﻚ ﺳﻮف ﺗﺸﺎھﺪ رﺳﺎﻟﺔ ﺗﺨﺒﺮك ﻋﻦ ﻧﺠﺎح اﻟﻌﻤﻠﯿﺔ ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﻋﻨﺪ ﻛﺘﺎﺑﺔ ﻗﯿﻤﺔ ﻧﺼﯿﺔ ﻧﻀﻌﮭﺎ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ﻣﻔﺮدة ) ' ' ( وأن وﺿﻌﻨﺎ ﻗﯿﻤﺔ‬
‫ﻋﺪدﯾﺔ ﻓﻼ داﻋﻲ ﻟﻌﻼﻣﺎت اﻟﺘﻨﺼﯿﺺ ‪.‬‬
‫) ‪( 110‬‬ ‫اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ‪( SQL‬‬

‫اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ‬


‫) ﺗﻌﻠﯿﻤﺎت ‪( SQL‬‬

‫ﻣﻼﺣﻈﺔ ﻣﮭﻤﺔ‪ /‬ﺳﻨﻔﺘﺮض أﻧﻨﺎ أﻧﺸﺄﻧﺎ ﺟﺪول ﻟﻠﻄﻼب اﺳﻤﮫ ‪ std‬وﻓﯿﮫ ﺛﻼﺛﺔ ﺣﻘﻮل وأﺳﻤﺎﺋﮭﺎ ‪ -:‬رﻗﻢ‬
‫اﻟﻄﺎﻟﺐ ‪ no‬واﺳﻢ اﻟﻄﺎﻟﺐ ‪ name‬ودرﺟﺔ اﻟﻄﺎﻟﺐ ‪ . gride‬وﺳﻨﺠﺮي اﻷﻣﺜﻠﺔ اﻟﻘﺎدﻣﺔ ﻋﻠﻰ ھﺬا‬
‫اﻷﺳﺎس ‪.‬‬

‫‪ ‬اﻟﺘﻌﻠﯿﻤﺔ ‪select‬‬

‫ﺗﺴﺘﺨﺪم اﻟﺘﻌﻠﯿﻤﺔ ‪ select‬ﻻﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺟﺪول أو ﺟﺪاول ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪ ,‬واﻟﺼﯿﻐﺔ‬


‫اﻟﻌﺎﻣﺔ ﻟﮭﺎ ھﻲ ‪-:‬‬
‫; ‪select col1 , col2 , ... from table1 , table2 , ...‬‬

‫أﺳﻤﺎء اﻟﺤﻘﻮل‬ ‫أﺳﻤﺎء اﻟﺠﺪول‬

‫ﻣﺜﺎل ‪-:‬‬
‫; ‪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‬‬

‫أ‪ -‬اﻟﻌﻼﻣﺔ ‪like‬‬

‫ﺗﺘﯿﺢ ﻟﻨﺎ ھﺬه اﻟﻌﻼﻣﺔ اﻟﻤﻘﺎرﻧﺔ ﺑﺠﺰء ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت ‪,‬ﻣﺜﻼ ً ﻟﻮ أردﻧﺎ أن ﻧﺘﻌﺮف ﻋﻠﻰ اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ ﺗﺒﺪأ‬
‫أﺳﻤﺎﺋﮭﻢ ﺑﺤﺮف ‪ s‬ﺳﻨﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ ‪-:‬‬
‫; '‪select * from std where name like 's%‬‬

‫وﻟﻮ أردﻧﺎ اﻟﺘﻌﺮف ﻋﻠﻰ اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ ﯾﻮﺟﺪ ﻣﻦ ﺿﻤﻦ أﺳﻤﺎﺋﮭﻢ اﻟﺤﺮف ) ‪ ) ( s‬ﻓﻲ أي ﻣﻜﺎن ﻣﻦ‬
‫اﻻﺳﻢ ( ﺳﯿﻜﻮن اﻟﻜﻮد ﻛﺎﻟﺘﺎﻟﻲ ‪-:‬‬
‫; '‪select * from std where name like '%s%‬‬

‫ﻻﺣﻆ ﻟﻮ أردﻧﺎ أن ﻧﺘﻌﺮف ﻋﻠﻰ اﻻﺳﻢ اﻟﺬي ﯾﻨﺘﮭﻲ ﺑﺤﺮف ‪s‬ﻣﺜﻼ ً ‪ ,‬ﻧﻀﻊ '‪ '%s‬وﻣﻦ ذﻟﻚ ﻧﺴﺘﻨﺘﺞ أن‬
‫اﻟﻌﻼﻣﺔ ‪ %‬ﺗﻤﺜﻞﺣﺮﻓﺎ ً ) أي ﺣﺮف ( ‪.‬‬
‫) ‪( 112‬‬ ‫اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ‪( SQL‬‬

‫ب‪ -‬اﻟﻌﻼﻣﺔ ‪in‬‬

‫ﯾﻤﻜﻦ ﺗﻌﺮﯾﻒ ھﺬه اﻟﻌﻼﻣﺔ ﻋﻠﻰ إﻧﮭﺎ اﻟﺸﺮط ) ﺗﻮﻓﺮ أﺣﺪ ھﺬه اﻟﻘﯿﻢ ( أي ان اﻟﺸﺮط ﯾﺘﺤﻘﻖ إذا ﻛﺎن أﺣﺪ‬
‫ھﺬه اﻟﻘﯿﻢ ﺻﺤﯿﺢ ‪.‬‬

‫ﻣﺜﺎل ‪ -:‬ﻟﻮ أردﻧﺎ درﺟﺎت اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ أرﻗﺎﻣﮭﻢ ‪ 1‬و ‪ 3‬و ‪ 4‬ﻓﺈﻧﻨﺎ ﺳﻮف ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ ‪-:‬‬
‫; )‪select * from std where no in (1,3,4‬‬

‫ج‪ -‬اﻟﻌﻼﻣﺔ ‪between‬‬

‫ﺑﮭﺬه اﻟﻌﻼﻣﺔ ﻧﺨﺒﺮ اﻟﺴﯿﺮﻓﺮ إﻧﻨﺎ ﻧﺤﺘﺎج إﻟﻰ اﻟﻘﯿﻢ اﻟﻮاﻗﻌﺔ ﺑﯿﻦ ھﺎﺗﯿﻦ اﻟﻘﯿﻤﺘﯿﻦ ‪ ,‬وﺗﺴﺘﺨﺪمﻋﺎدﺗﺎ ً ﻓﻲ‬
‫اﻟﺒﺤﺚ ﺑﯿﻦ ﺗﺎرﯾﺨﯿﻦ ﻣﻌﯿﻨﯿﻦ ‪.‬‬

‫ﻣﺜﺎل ‪ -:‬ﻋﻨﺪﻣﺎ ﻧﺤﺘﺎج إﻟﻰ اﻟﻄﻠﺒﺔ اﻟﺘﻲ درﺟﺎﺗﮭﻢ ﺑﯿﻦ ‪ 80‬و ‪ 90‬ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ ‪-:‬‬
‫; ‪select * from std where gride between 80 and 90‬‬

‫* ﻟﻌﺮض اﻟﻄﻠﺒﺔ اﻟﺘﻲ درﺟﺎﺗﮭﻢ ﻻ ﺗﻜﻮن ﻣﻦ ﺿﻤﻦ اﻟﺪرﺟﺎت اﻟﻤﺤﺼﻮرة ﺑﯿﻦ ‪ 80‬و ‪ 90‬ﻧﻀﻊ ‪not‬‬
‫ﻗﺒﻞ ‪. between‬‬

‫* ﻋﻨﺪ اﺳﺘﺨﺪام اﻟﺘﻮارﯾﺦ ﻧﻀﻊ اﻟﻌﻼﻣﺔ ‪ #‬ﺑﺪل ﻣﻦ ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ ) ' ' ( ‪.‬‬

‫دﻣﺞ اﻟﺸﺮط‬

‫ﻧﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺔ أﻛﺜﺮ ﻣﻦ ﺷﺮط ﻋﻠﻰ ﻧﻔﺲ اﻟﺤﻘﻞ أو ﺣﻘﻮل ﻣﺘﻌﺪدة ‪ .‬وﻟﻜﻲ ﻧﻔﻌﻞ ذﻟﻚ ﻧﺴﺘﺨﺪم اﻟﻜﻠﻤﺘﯿﻦ‬
‫اﻟﺘﺎﻟﯿﺘﯿﻦ ‪-:‬‬

‫‪ -: and‬ﯾﺠﺐ ﺗﺤﻘﻖ اﻟﺸﺮطﯿﻦ ‪.‬‬

‫‪ -: or‬ﺗﺤﻘﻖ أﺣﺪ اﻟﺸﺮطﯿﻦ ‪.‬‬

‫ﻣﺜﺎل ‪ -:‬ﻟﻮ أردﻧﺎ أن ﻧﻌﺮف اﻟﻄﻠﺒﺔ اﻟﺬﯾﻦ أرﻗﺎﻣﮭﻢ أﻛﺜﺮ ﻣﻦ ‪ 2‬ودرﺟﺎﺗﮭﻢ أﻛﺒﺮ ﻣﻦ ‪ 70‬ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ‬
‫اﻟﺘﺎﻟﯿﺔ ‪-:‬‬
‫; ‪select * from std where no > 2 and gride > 70‬‬

‫وﯾﻤﻜﻦ أن ﻧﻀﻊ ‪ or‬ﻣﻜﺎن ‪. and‬‬


‫) ‪( 113‬‬ ‫اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ‪( SQL‬‬

‫‪ ‬اﻟﺘﻌﻠﯿﻤﺔ ‪order by‬‬

‫ﻧﺤﺘﺎج ﻓﻲ ﻛﺜﯿﺮ ﻣﻦ اﻷﺣﯿﺎن إﻟﻰ ﺗﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت ﺣﺴﺐ ﺻﻒ ﻣﻌﯿﻦ ‪ ,‬وﻟﺬﻟﻚ ﻧﺴﺘﺨﺪم ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ‪,‬‬
‫وﺗﺄﺗﻲ ﻣﻊ ھﺬه اﻟﺘﻌﻠﯿﻤﺔ اﻟﻜﻠﻤﺘﺎن ‪-:‬‬

‫‪ -: Asc‬ﺗﺮﺗﯿﺐ اﻟﺤﻘﻞ ﻣﻦ اﻷﺻﻐﺮ إﻟﻰ اﻷﻛﺒﺮ ) وھﻮ اﻻﻓﺘﺮاﺿﻲ ( ‪.‬‬

‫‪ -: Desc‬ﺗﺮﺗﯿﺐ اﻟﺤﻘﻞ ﻣﻦ اﻷﻛﺒﺮ إﻟﻰ اﻷﺻﻐﺮ ‪.‬‬

‫ﻣﺜﺎل ‪ -:‬ﻟﻠﺤﺼﻮل ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺐ ﺣﺴﺐ اﻟﺪرﺟﺔ ﻣﻦ اﻷﺻﻐﺮ إﻟﻰ اﻷﻛﺒﺮ ﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ ﻛﺎﻟﺘﺎﻟﻲ‬
‫‪-:‬‬
‫; ‪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‬‬

‫ﺣﯿﺚ إن اﻟﺮﻗﻢ اﻷول ﯾﻤﺜﻞ اﻟﺮﻗﻢ اﻟﺬي ﻧﺒﺪأ اﻟﻌﺪ ﺑﻌﺪه واﻟﺮﻗﻢ اﻟﺜﺎﻧﻲ ﯾﻤﺜﻞ ﻋﺪد اﻟﺴﺠﻼت ‪.‬‬

‫‪ ‬اﻟﺘﻌﻠﯿﻤﺔ ‪insert into‬‬

‫ﻧﺴﺘﺨﺪم ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﻋﻨﺪﻣﺎ ﻧﺤﺘﺎج إﻟﻰ إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت إﻟﻰ اﻟﺠﺪول ‪.‬‬

‫ﻣﺜﺎل ‪ -:‬ﻟﻮ أردﻧﺎ إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت طﺎﻟﺐ ﺟﺪﯾﺪ اﺳﻤﮫ اﻷول ‪ yosef‬ودرﺟﺘﮫ ‪ 92‬ورﻗﻤﮫ ‪ , 6‬ﻧﺤﺘﺎج إﻟﻰ‬
‫ﻛﺘﺎﺑﺔ ھﺬه اﻟﺠﻤﻠﺔ ‪-:‬‬
‫) ‪( 114‬‬ ‫اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ‪( SQL‬‬

‫; )‪insert into std (no,name,gride) values (6,'yosef',92‬‬

‫وﻋﻨﺪ ﺗﻨﻔﯿﺬ ھﺬه اﻟﺠﻤﻠﺔ ﺗﻈﮭﺮ رﺳﺎﻟﺔ ﺗﺆﻛﺪ أﻧﮫ ﺗﻢ إﺿﺎﻓﺔ ﺳﺠﻞ واﺣﺪ إﻟﻰ اﻟﺠﺪول ‪,‬أﯾﻀﺎ ً ﻧﺴﺘﻄﯿﻊ‬
‫ﻛﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻟﺴﺎﺑﻘﺔ ﺑﮭﺬا اﻟﺸﻜﻞ ‪-:‬‬
‫; )‪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‬‬

‫‪ ‬اﻟﺗﻌﻠﯾﻣﺔ ‪inner join‬‬

‫ﺗﺳﺗﺧدم ھذه اﻟﺗﻌﻠﯾﻣﺔ ﻟرﺑط ﺟدوﻟﯾن ﻣﻊ ﺑﻌﺿﮭﻣﺎ اﻟﺑﻌض أي ﺳﯾﻣﻛﻧﻧﺎ أن ﻧﺳﺗﺧرج اﻟﺑﯾﺎﻧﺎت ﻣن ﻛﻼ‬
‫اﻟﺟدوﻟﯾن ﻓﻲ ﻧﻔس اﻟوﻗت وﻛﺄﻧﮭﻣﺎ ﺟدول واﺣد ﻣﻊ ﻣﻼﺣظﺔ أن اﻟﺟدوﻟﯾن ﻟن ﯾﺗم دﻣﺟﮭﻣﺎ ﻓﻲ‬
‫ﺟدول واﺣد ﻓﻲ ﻗﺎﻋدة اﻟﺑﯾﺎﻧﺎت ﻟﻛن ﻟﻐﺔ اﻟـ ‪ php‬ﺳﺗﺗﻌﺎﻣل ﻣﻌﮭم ﻛﺟدول واﺣد ‪ ,‬وﻻﺣظ أن‬
‫اﻟﺟدوﻟﯾن ﯾﺟب أن ﯾﺣﺗوي ﻛل ﻣﻧﮭم ﻋﻠﻰ ﺣﻘل ﯾﻛون ھذا اﻟﺣﻘل ﻣﺿﺎف ﻓﻲ ﻛﻠﯾﮭﻣﺎ ‪.‬‬

‫ﻣﺛﺎل ‪/‬‬
‫;)“ ‪mysql_query(“ select * from std inner join std2 on std.id=std2.id‬‬

‫ﺣث ھﻧﺎ اﻟﺣﻘل اﻟﻣﺷﺗرك ﺑﯾن اﻟﺟدوﻟﯾن ھو ‪ , id‬وﻻﺣظ ﺑﺄﻧﮫ ﯾﻣﻛن أن ﻧﻛﺗب ﺑﻌد ھذه اﻟﺟﻣﻠﺔ أي‬
‫ﺗﻌﻠﯾﻣﺔ ﻧﺷﺎء ﻣﺛل اﻟﺗﻌﻠﯾﻣﺔ ‪ where‬واﻟﺗﻌﻠﯾﻣﺔ ‪ order by‬وﻏﯾرھﺎ ﻣن اﻟﺗﻌﻠﯾﻣﺎت ﺑﺷﻛل أﻋﺗﯾﺎدي ‪.‬‬

‫‪ ‬اﻟﺗﻌﻠﯾﻣﺔ ‪truncate table‬‬

‫ﺗﺳﺗﺧدم ھذه اﻟﺗﻌﻠﯾﻣﺔ ﻹﻓراغ ﻣﺣﺗوى ﺟدول أي ﺗﺟﻌﻠﮫ ﻓﺎرغ ﺗﻣﺎﻣﺎ ً ﻣن أي ﺑﯾﺎﻧﺎت ﺗﻣت إﺿﺎﻓﺗﮭﺎ‬
‫إﻟﯾﮫ أي وﻛﺄﻧﮫ ﻗد ﺗم إﻧﺷﺎﺋﺔ ﻟﻠﺗو أي ﺳﺗﺑﻘﻰ ﻓﻘط أﺳﻣﺎء ﻋﻧﺎوﯾن اﻟﺣﻘول اﻷﺻﻠﯾﺔ ‪.‬‬
‫) ‪( 117‬‬ ‫اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ﻋﺸﺮ ) ﺗﻌﻠﯿﻤﺎت ‪( SQL‬‬

‫ﻣﺛﺎل‪/‬‬

‫; ‪truncate table std‬‬

‫‪ ‬اﻷﻣﺮ ‪alter table‬‬

‫وﯾﺴﺘﺨﺪم ﻓﻲ اﻟﺘﻌﺪﯾﻞ ﻋﻠﻰ اﻟﺠﺪول ﻣﻦ إﺿﺎﻓﺔ وﺣﺬف أﻋﻤﺪة )ﺣﻘﻮل( ‪.‬‬

‫* ﻹﺿﺎﻓﺔ ﺣﻘﻞ ﺗﻜﻮن اﻟﺼﯿﻐﺔ ﻛﺎﻟﺘﺎﻟﻲ ‪-:‬‬


‫)ﻧﻮع اﻟﺒﯿﺎﻧﺎت ‪ int‬أو ‪ varchar‬أو ‪...‬اﻟﺦ ( اﺳﻢ اﻟﺤﻘﻞ ‪ add‬اﺳﻢ اﻟﺠﺪول ‪alter table‬‬

‫* ﻟﺤﺬف ﺣﻘﻞ ﺗﻜﻮن اﻟﺼﯿﻐﺔ ﻛﺎﻟﺘﺎﻟﻲ ‪-:‬‬


‫اﺳﻢ اﻟﺤﻘﻞ ‪ drop column‬اﺳﻢ اﻟﺠﺪول ‪alter table‬‬
‫) ‪( 118‬‬ ‫اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال ‪ php‬ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ‪( MYSQL‬‬

‫اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ‬


‫) دوال ‪ php‬ﻟﻠﺗﻌﺎﻣل ﻣﻊ ‪( MYSQL‬‬

‫* ﻟﺮﺑﻂ ﺻﻔﺤﺔ ‪ php‬ﺑﻘﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻧﺤﺘﺎج إﻟﻰ ﺧﻄﻮﺗﯿﻦ اﻟﺨﻄﻮة اﻷوﻟﻰ ﻣﻦ ﺧﻼل إﺟﺮاء اﻻﺗﺼﺎل‬
‫ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ اﻟﺘﺎﻟﯿﺔ ‪-:‬‬

‫اﻟﺨﻄﻮة اﻷوﻟﻰ ‪-:‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪mysql_connect‬‬

‫ھﺬه اﻟﺪاﻟﺔ ﺗﺴﺘﺨﺪم ﻷﺟﺮاء اﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وھﻲ ﺗﺤﺘﺎج إﻟﻰ ﺛﻼﺛﺔ ﻣﺘﻐﯿﺮات ‪-:‬‬

‫‪ -1‬اﺳﻢ اﻟﺴﯿﺮﻓﺮ ‪.‬‬


‫‪ -2‬اﺳﻢ اﻟﻤﺴﺘﺨﺪم ‪.‬‬
‫‪ -3‬ﻛﻠﻤﺔ اﻟﺴﺮ ‪.‬‬

‫وﺗﻌﻮد ھﺬه اﻟﺪاﻟﺔ ﺑﻤﻘﺒﺾ اﻻﺗﺼﺎل ﻓﻲ ﺣﺎل ﻧﺠﺎح اﻻﺗﺼﺎل أو رﺳﺎﻟﺔ ﺗﻌﺒﺮ ﻋﻦ اﻟﺨﻄﺄ ﻓﻲ ﺣﺎل ﻓﺸﻞ‬
‫اﻻﺗﺼﺎل ‪.‬‬

‫اﺳﻢ اﻟﺴﯿﺮﻓﺮ‬ ‫ﻛﻠﻤﺔ اﻟﺴﺮ‬ ‫ﻣﺜﺎل ‪-:‬‬


‫‪<?php‬‬
‫)" " ‪$link = mysql_connect ("localhost" , "root" ,‬‬
‫; )"ﻓﺸﻞ اﻻﺗﺼﺎل"( ‪or die‬‬
‫; )"ﺗﻢ اﻻﺗﺼﺎل"( ‪print‬‬ ‫اﺳﻢ اﻟﻤﺴﺘﺨﺪم‬

‫;)‪mysql_close ($link‬‬
‫>?‬

‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﻋﻨﺪ ﺣﺪوث اﻻﺗﺼﺎل ﺳﻮف ﯾﺘﻢ طﺒﺎﻋﺔ اﻟﻌﺒﺎرة ﺗﻢ اﻻﺗﺼﺎل ‪ ,‬وﻟﻜﻦ ﻋﻨﺪ ﻓﺸﻞ اﻻﺗﺼﺎل‬
‫ﺳﺘﻄﺒﻊ اﻟﻌﺒﺎرة ﻓﺸﻞ اﻻﺗﺼﺎل وﺗﻼﺣﻆ ﺑﺄﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺈﻧﮭﺎء اﻻﺗﺼﺎل ﺑﻮاﺳﻄﺔ اﻟﺪاﻟﺔ ‪. mysql_close‬‬

‫ﻣﻼﺣظﺔ‪ /‬ﯾﻣﻛن اﺟراء اﻷﺗﺻﺎل ﻣن ﺧﻼل اﻟداﻟﺔ ‪ mysql_pconnect‬وھﻲ ﺗﻛﺗب ﺑﻧﻔس ظرﯾﻘﺔ‬
‫اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ واﻟﻔرق ﺑﯾﻧﮭﻣﺎ ھو أن اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ ﯾﺟب أﻏﻼﻗﮭﺎ ﺑواﺳطﺔ اﻟداﻟﺔ ‪mysql_close‬‬
‫ﺑﻌد اﻷﻧﺗﮭﺎء ﺗﻣﺎﻣﺎ ً ﻣن اﻟﻛود أﻣﺎ ھذه اﻟداﻟﺔ ﻓﻼ ﺗﺣﺗﺎج إﻟﻰ اﻷﻏﻼق ﻟﻛﻧﮭﺎ ﺳوف ﺗﻌﻣل أﺗﺻﺎل ﺟدﯾد‬
‫) ‪( 119‬‬ ‫اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال ‪ php‬ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ‪( MYSQL‬‬

‫ﻟﻛل ﻣﺳﺗﺧدم ﯾدﺧل إﻟﻰ اﻟﻣوﻗﻊ وھذا ﺳﯾﻌﻣل ﺿﻐط ﻋﻠﻰ اﻟﺧﺎدم ﻟذا ﯾﻔﺿل اﺳﺗﺧدام اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ‬
‫‪. mysql_connect‬‬

‫اﻟﺨﻄﻮة اﻟﺜﺎﻧﯿﺔ ‪-:‬‬

‫ﻧﺤﺪد ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﻮد اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ اﻟﺘﺎﻟﯿﺔ ‪-:‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪mysql_select_db‬‬

‫ﺗﺤﺪد ھﺬه اﻟﺪاﻟﺔ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻌﮭﺎﺣﺎﻟﯿﺎ ً ‪ ,‬وﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ ﻣﺘﻐﯿﺮﯾﻦ ھﻤﺎ ‪-:‬‬

‫‪ -1‬اﺳﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﻮد اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ‪.‬‬

‫‪ -2‬ﻣﻘﺒﺾ اﻻﺗﺼﺎل اﻟﺬي أﺟﺮﯾﻨﺎه ‪.‬‬

‫وﺗﻌﻮد ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻟﻘﯿﻤﺔ ‪ 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‬‬

‫اﺳﻢ اﻟﺤﻘﻞ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬


‫) ‪( 121‬‬ ‫اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ﻋﺸﺮ )دوال ‪ php‬ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ‪( MYSQL‬‬

‫‪ -3‬اﻟﺪاﻟﺔ ‪mysql_fetch_object‬‬

‫ﺗﺴﺘﺨﺮج ھﺬه اﻟﺪاﻟﺔ اﻟﻘﯿﻢ ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﯾﺘﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻛﻜﺎﺋﻦ وﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﻣﻘﺒﺾ‬
‫ﻋﻤﻠﯿﺔ اﻻﺳﺘﻌﻼم ‪ ,‬وھﻲ ﻣﺸﺎﺑﮭﮫ ﻟﻠﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ‪ ,‬وﻻﺣظ أﻧﮫ ﯾﺗم اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﻘﯾم اﻟﻣﺳﺗﺧرﺟﺔ ﺑﮭذا‬
‫اﻟﺷﻛل ‪-:‬‬

‫ﻣﺜﺎل ‪-:‬‬
‫; )‪$row = mysql_fetch_object($result‬‬

‫; ‪$x = $row -> id_cat‬‬

‫اﺳم اﻟﺣﻘل ﻓﻲ ﻗﺎﻋدة اﻟﺑﯾﺎﻧﺎت‬

‫‪ ‬اﻟداﻟﺔ ‪mysql_free_result‬‬

‫ﺗﺳﺗﺧدم ھذه اﻟداﻟﺔ ﺑﻌد اﻻﻧﺗﮭﺎء ﻣن ﻋﻣﻠﯾﺔ اﻻﺳﺗﻌﻼم ﺑواﺳطﺔ اﻟداﻟﺔ ‪ mysql_query‬ﺣﯾث‬
‫أﻧﮭﺎ ﺗﻌﺗﺑر ﺑﻣﺛﺎﺑﺔ إﻏﻼق ﻟﻸﺳﺗﻌﻼم وھﻲ ﻣﮭﻣﺔ ﻟﻛﻲ ﻻ ﯾﻛون ھﻧﺎك ﺿﻐط ﻋﻠﻰ اﻟﺧﺎدم‬
‫ﺧﺻوﺻﺎ ً إذا ﻛﺎﻧت ھﻧﺎك ﺑﯾﺎﻧﺎت ﻛﺛﯾرة ‪ ,‬وھﻲ ﻋﺎدﺗﺎ ً ﺗﺳﺗﺧدم إذا ﻛﻧﺎ ﻗد اﺳﺗﺧدﻣﻧﺎ ‪select‬‬
‫وﺑﻌدھﺎ ﺣﻠﻘﺔ ﺗﻛرار ‪.‬‬

‫ﻣﺛﺎل‪/‬‬
‫; )"‪$result = mysql_query ("select * from std‬‬

‫; )‪$row = mysql_fetch_object($result‬‬

‫; ‪$x = $row -> id_cat‬‬

‫;) ‪mysql_free_result( $result‬‬

‫‪ ‬اﻟﺪاﻟﺔ ‪mysql_num_rows‬‬

‫ﺗﻌﻮد ﻟﻨﺎ ھﺬه اﻟﺪاﻟﺔ ﺑﻌﺪد اﻟﺴﺠﻼت اﻟﺘﻲ ﺣﺼﻠﻨﺎ ﻋﻠﯿﮭﺎ ﺑﻌﺪ اﺳﺘﺨﺪام اﻟﺘﻌﻠﯿﻤﺔ ‪ select‬ﻓﻘﻂ ‪ ,‬وﺗﺤﺘﺎج‬
‫ھﺬه اﻟﺪاﻟﺔ إﻟﻰ ﻣﺘﻐﯿﺮ واﺣﺪ ﻓﻘﻂ وھﻮ ﻣﻘﺒﺾ اﻻﺗﺼﺎل ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ /‬ﻻ ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻣﻊ اﻟﺘﻌﻠﯿﻤﺎت ) ‪. ( update , insert , delet‬‬

‫* وﯾﻤﻜﻦ وﺿﻊ ‪ 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‬‬

‫ﺑﻮاﺳﻄﺔ ھﺬه اﻟﺪاﻟﺔ ﻧﺴﺘﻄﯿﻊ ﻣﻌﺮﻓﺔ اﻟﺤﻘﻮل اﻟﻤﻮﺟﻮدة ﻓﻲ ﺟﺪول ﻣﻌﯿﻦ وﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ‬
‫ﻣﺘﻐﯿﺮﯾﻦ ھﻤﺎ ‪-:‬‬

‫‪ -1‬اﺳﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪.‬‬


‫‪ -2‬اﺳﻢ اﻟﺠﺪول ‪.‬‬

‫وﺳﻮف ﺗﻌﻮد ھﺬه اﻟﺪاﻟﺔ ﺑﻤﻘﺒﺾ ﻟﻠﻌﻤﻠﯿﺔ ﻟﻨﺴﺘﺨﺪﻣﮫ ﻓﻲ ﻣﻌﺮﻓﺔ ﻣﻌﻠﻮﻣﺎت ﺣﻘﻮل اﻟﺠﺪول ﺳﻮاء اﻻﺳﻢ‬
‫أو اﻟﻨﻮع أو اﻟﻄﻮل أو اﻟﺸﺮط ‪ ,‬ﺑﻮاﺳﻄﺔ اﻟﺪوال اﻟﺘﺎﻟﯿﺔ ‪-:‬‬

‫ﻟﻤﻌﺮﻓﺔ اﺳﻢ اﻟﺤﻘﻞ ‪.‬‬ ‫‪mysql_field_name‬‬ ‫اﻟﺪاﻟﺔ‬ ‫‪-1‬‬


‫ﻟﻤﻌﺮﻓﺔ ﻧﻮع اﻟﺤﻘﻞ ‪.‬‬ ‫‪mysql_field_type‬‬ ‫اﻟﺪاﻟﺔ‬ ‫‪-2‬‬
‫ﻟﻤﻌﺮﻓﺔ طﻮل اﻟﺤﻘﻞ ‪.‬‬ ‫‪mysql_field_len‬‬ ‫اﻟﺪاﻟﺔ‬ ‫‪-3‬‬
‫اﻟﺸﺮط ﻓﻲ اﻟﺤﻘﻞ ‪.‬‬ ‫‪mysql_field_flags‬‬ ‫اﻟﺪاﻟﺔ‬ ‫‪-4‬‬

‫‪ ‬اﻟداﻟﺔ )(‪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‬‬
‫>?‬

‫ﺳﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ﺑﮭﺬا اﻟﺸﻜﻞ‬


‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪-----------------‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬

‫ﺗﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮات اﻟﺴﺎﻛﻨﺔ داﺧﻞ اﻟﺪوال ﯾﺠﻌﻠﻨﺎ ﻻ ﻧﺴﺘﻄﯿﻊ إﺳﺘﺨﺪام ھﺬه اﻟﻤﺘﻐﯿﺮات ﺧﺎرج اﻟﻨﻄﺎق‬
‫اﻟﻤﻌﺮﻓﺔ ﺑﮫ ﻻﻧﮭﺎ ﺗﻌﺘﺒﺮ ﻣﺘﻐﯿﺮات ﻣﺤﻠﯿﺔ ذات طﺎﺑﻊ ﺧﺎص ‪ ,‬وﻟﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮات ﻋﺎﻣﺔ ﻣﻦ اﻟﻨﻮع‬
‫اﻟﺴﺎﻛﻦ ﯾﺘﻢ اﻟﻮﺻﻮل إﻟﯿﮭﺎ ﻣﻦ ﺧﻼل اﻟﻜﻠﻤﺔ اﻟﻤﺤﺠﻮزة ‪ 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 ‫اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ‬

public function test( ){


echo parent::NAME;
echo "<br>";
echo parent::$name;
echo "<br>";
echo self::NAME2;
echo "<br>";
echo self::$name3;
}
}
echo B::NAME;
echo "<br>";
echo B::$name;
echo "<br>";
echo B::NAME;
echo "<br>";
$obj = new B( );
echo $obj -> test( );
?>

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‬وھﺬه ﻣﺸﺎﺑﮭﮫ ﻟﻌﻤﻠﯿﺔ اﻟﻮراﺛﺔ‬
‫اﻟﻤﺘﻌﺪدة ‪.‬‬

‫‪ __construct ‬و ‪__destruct‬‬


‫ﺗﺴﺘﺨﺪم اﻟﺪاﻟﺔ ‪ __construct‬ﻟﻠﺘﺸﻐﯿﻞ اﻟﺘﻠﻘﺎﺋﻲ وھﻲ ﻋﺒﺎرة ﻋﻦ داﻟﺔ ﻣﺤﺠﻮزة ‪.‬‬
‫ﻣﺜﺎل‪/‬‬
‫{‪class A‬‬
‫{ ) (‪public function __construct‬‬
‫;"‪echo "Welcome‬‬
‫} }‬
‫;) (‪$n = new A‬‬
‫) ‪( 137‬‬ ‫اﻟﻔﺼﻞ اﻟﻌﺸﺮون ) اﻟﺒﺮﻣﺠﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ‪( OOP‬‬

‫ﻻﺣﻆ ﺑﺄﻧﮫ ﺳﯿﻄﺒﻊ اﻟﻜﻠﻤﺔ ‪ 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‬‬

‫ﻟﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ ‪My program‬‬

‫راﺑﻌﺎ ً ‪ -:‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام وﺳﻮم ﻟﻐﺔ ‪ html‬ﻣﻊ ﻟﻐﺔ ‪ php‬ﺑﻮﺿﻌﮭﺎ داﺧﻞ اﻟﺪاﻟﺔ ‪ echo‬وﺑﯿﻦ ﻋﻼﻣﺘﻲ‬
‫ﺗﻨﺼﯿﺺ ) " " (‬

‫ﻣﺜﺎل ‪-:‬‬
‫;" ‪echo "<h1> welcome </h1> <br> Hi‬‬

‫;">‪echo "<p‬‬

‫ﺣﯿﺚ إن اﻟﻮﺳﻢ >‪ <p‬ﯾﻌﻤﻞ ﻋﻠﻰ ﺗﺮك ﺳﻄﺮﯾﻦ ﻓﺎرﻏﯿﻦ ‪.‬‬

‫ﺧﺎﻣﺴﺎ ً ‪ -:‬ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ ﻧﺺ ) ﻗﯿﻤﮫ ﻧﺼﯿﺔ ( وﻧﻀﻌﮭﺎ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ﻣﻔﺮدة ) ' ' ( أو‬
‫ﻣﺰدوﺟﺔ وﻟﻜﻦ إذا ﻛﺎﻧﺖ ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ ﻣﻔﺮدة ﻓﻲ اﻟﺒﺪاﯾﺔ ﻓﻼ ﯾﺠﻮز أن ﺗﻨﺘﮭﻲ ﺑﻌﻼﻣﺔ ﺗﻨﺼﯿﺺ‬
‫ﻣﺰدوﺟﺔ وﻻ ﯾﺠﻮز اﻟﻌﻜﺲأﯾﻀﺎ ً ‪.‬‬

‫ﻻ ﯾﺠﻮز وﺿﻊ ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﻨﺺ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع ‪ ,‬ﻻﺣﻆ ھﺬه اﻷﻣﺜﻠﺔ ‪-:‬‬

‫; " ﻣﺜﺎل " ﺧﺎطﺊ " =‪$x‬‬


‫; ' ﻣﺜﺎل ' ﺧﺎطﺊ ' =‪$x‬‬
‫; " ﻣﺜﺎل ' ﺻﺤﯿﺢ " =‪$x‬‬
‫; ' ﻣﺜﺎل " ﺻﺤﯿﺢ ' =‪$x‬‬

‫وأﯾﻀﺎ ً ﯾﻤﻜﻦ إظﮭﺎر ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ ﻓﻲ اﻟﻨﺺ ﻣﻦ ﺧﻼل إﺿﺎﻓﺔ اﻟﻌﻼﻣﺔ ) \ ( ﻗﺒﻞ ﻋﻼﻣﺔ‬
‫اﻟﺘﻨﺼﯿﺺ ‪ ,‬وإن أردﻧﺎ إظﮭﺎر ﺷﻜﻞ ھﺬا اﻟﺮﻣﺰ ﯾﻤﻜﻦ ﻛﺘﺎﺑﯿﮫ ﻣﺮﺗﯿﻦ ) \\ ( ‪ ,‬ﻣﺜﺎل ‪-:‬‬
‫; " ‪$x = " Hi \" welcome‬‬
‫) ‪( 141‬‬ ‫ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ‬

‫ﺳﺎدﺳﺎ ً ‪ -:‬ھﻨﺎك ﺑﻌﺾ اﻷﺣﺮف ﻻ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺘﺼﻔﺢ إﺿﺎﻓﺘﮭﺎ إﻟﻰ ﻋﻨﻮان اﻟﺼﻔﺤﺔ ﺑﺼﯿﻐﺘﮭﺎ‬
‫اﻟﺤﻘﯿﻘﯿﺔ ﺑﻞ ﯾﺴﺘﺨﺪم ﻟﻐﺔ اﻟﺘﺸﻔﯿﺮ ) ‪ ( URL Encoding‬ﻓﻲ اﻟﺘﻌﺮﯾﻒ ﻋﻨﮭﺎ وھﺬا ﺟﺪول ﺑﺎﻟﺮﻣﻮز اﻟﺘﻲ‬
‫ﯾﺴﺘﺨﺪﻣﮭﺎ اﻟﻤﺘﺼﻔﺢﺑﺪﻻ ً ﻣﻦ ﻋﺮﺿﮭﺎ ﺑﺼﻮرﺗﮭﺎ اﻟﺤﻘﯿﻘﯿﺔ ‪-:‬‬

‫ﺷﻔﺮﺗﮫ‬ ‫اﻟﺤﺮف ) اﻟﻤﻔﺘﺎح (‬ ‫ﺷﻔﺮﺗﮫ‬ ‫اﻟﺤﺮف ) اﻟﻤﻔﺘﺎح (‬


‫‪%2C‬‬ ‫‪,‬‬ ‫‪%9‬‬ ‫‪Tab‬‬
‫‪%2E‬‬ ‫‪.‬‬ ‫‪%20‬‬ ‫‪Space‬‬
‫‪%2F‬‬ ‫‪/‬‬ ‫‪%21‬‬ ‫!‬
‫‪%3A‬‬ ‫‪:‬‬ ‫‪%22‬‬ ‫"‬
‫‪%3B‬‬ ‫;‬ ‫‪%23‬‬ ‫‪#‬‬
‫‪%3C‬‬ ‫<‬ ‫‪%40‬‬ ‫@‬
‫‪%3E‬‬ ‫>‬ ‫‪%5C‬‬ ‫\‬
‫‪%5D‬‬ ‫=‬ ‫‪%28‬‬ ‫(‬
‫‪%3F‬‬ ‫؟‬ ‫‪%29‬‬ ‫)‬
‫‪%25‬‬ ‫‪%‬‬ ‫‪%2B‬‬ ‫‪+‬‬
‫‪%26‬‬ ‫&‬

‫ﺳﺎﺑﻌﺎ ً ‪ -:‬ﻟﻠﺮﺑﻂ ﺑﯿﻦ ﻟﻐﺔ ‪ html‬وﻟﻐﺔ ‪ ) php‬أو إرﺳﺎل اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺻﻔﺤﺔ ‪ html‬اﻟﺘﻲ ﻓﯿﮭﺎ‬
‫اﻟﻨﻤﺎذج وﺻﻔﺤﺔ ‪ php‬اﻟﺘﻲ ﺗﺴﺘﻘﺒﻞ اﻟﺒﯿﺎﻧﺎت ( ﺳﻨﻮﺿﺢ ذﻟﻚ ﻓﻲ ھﺬا اﻟﻤﺜﺎل اﻟﺘﻄﺒﯿﻘﻲ ‪-:‬‬

‫‪ -1‬ﺳﻮف ﻧﻌﻤﻞ ﺻﻔﺤﺔ ‪ html‬وﻧﻜﺘﺐ ﻓﯿﮭﺎ ھﺬا اﻟﻜﻮد‬

‫اﺳﻢ ﺻﻔﺤﺔ ال ) ‪( php‬‬

‫> "‪<html dir = "rtl‬‬


‫> "‪<form method = "get" action = "text.php‬‬
‫ﻣﺎ ھﻲ وﺟﺒﺘﻚ اﻟﻤﻔﻀﻠﺔ ﻓﻲ اﻟﺼﺒﺎح ؟‬ ‫) اﺳﻢ اﻟﻤﺘﻐﯿﺮ (‬
‫>‪<br‬‬
‫> " ﺟﺒﻨﮫ وﻣﺮﺑﻰ " = ‪<input type = "text" name = "food" value‬‬
‫>‪<br‬‬
‫) ‪( 142‬‬ ‫ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ‬

‫> " إرﺳﺎل " = ‪<input type = "submit" value‬‬


‫> " ﻣﺴﺢ " = ‪<input type = "reset" value‬‬
‫>‪</form‬‬
‫>‪</html‬‬
‫ﺳﻮف ﻧﺤﻔﻆ ھﺬه اﻟﺼﻔﺤﺔ ﻓﻲ اﻟﺴﯿﺮﻓﺮ اﻟﻤﺤﻠﻲ ﺑﺎﺳﻢ ) ‪( textbox.html‬‬
‫‪ -2‬ﺛﻢ ﻧﻨﺸﺄ ﺻﻔﺤﺔ ‪ php‬وﻧﻜﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‬

‫‪<?php‬‬ ‫اﻟﻤﺘﻐﯿﺮ ﻓﻲ ‪html‬‬

‫; ‪ " . " " . $food‬وﺟﺒﺘﻚ اﻟﻤﻔﻀﻠﺔ ھﻲ " ‪echo‬‬

‫>?‬

‫اﻵن ﺳﻮف ﻧﺤﻔﻆ اﻟﺼﻔﺤﺔ ﻓﻲ اﻟﺴﯿﺮﻓﺮ اﻟﻤﺤﻠﻲ ﺑﺎﺳﻢ ) ‪ ( 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‬‬

‫او ﯾﻣﻛن اﺳﺗﻘﺑﺎل اﻟﺑﯾﺎﻧﺎت ﺑﺷﻛل آﺧر ھﻛذا‬


‫; ]‪$arr = $_POST[my_name‬‬
‫;]‪echo arr[0‬‬
‫;]‪echo arr[1‬‬
‫) ‪( 143‬‬ ‫ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ‬

‫ﺛﺎﻣﻨﺎ ً ‪ -:‬ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻋﻤﻠﯿﺔ اﻟﻤﺴﺎواة ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ ﺑﻮﺿﻊ ﻋﻼﻣﺔ ) == ( ﺣﯿﺚ إﻧﮭﺎ ﺗﻜﻮن ﺻﺤﯿﺤﺔ‬
‫إذا ﻛﺎﻧﺖ اﻟﻘﯿﻢ ﻣﺘﺴﺎوﯾﺔ وﻻ ﺗﮭﺘﻢ أن ﺗﻜﻮن اﻟﻤﺘﻐﯿﺮات ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع أو ﻻ ‪ ,‬ﻻﺣﻆ ھﺬه اﻟﻤﺜﺎل ‪-:‬‬
‫; " ‪$x = " 10‬‬

‫; ‪$y = 10‬‬

‫} ; " اﻟﻘﯿﻢ ﻣﺘﺴﺎوﯾﺔ " ‪if ( $x == $y ) { echo‬‬

‫ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ ﺳﻮف ﺗﻜﻮن ﻣﺘﺴﺎوﯾﺔ وﺗﺤﻘﻖ اﻟﺸﺮط ﻋﻠﻰ اﻟﺮﻏﻢ ﻣﻦ أن اﻟﻤﺘﻐﯿﺮ ‪ x‬ﯾﺤﻤﻞ ﻗﯿﻤﺔ ﻧﺼﯿﺔ‬
‫واﻟﻤﺘﻐﯿﺮ ‪ y‬ﯾﺤﻤﻞ ﻗﯿﻤﺔ ﻋﺪدﯾﺔ ‪ ,‬وإن أردﻧﺎ أن ﺗﻜﻮن اﻟﻤﺴﺎواة ﺑﯿﻦ ﻗﯿﻢ اﻟﻤﺘﻐﯿﺮات وﻛﺬﻟﻚ ﺑﯿﻦ ﻧﻮع‬
‫اﻟﻤﺘﻐﯿﺮات ﺳﻮف ﻧﺤﺘﺎج أن ﻧﻜﺘﺐ اﻟﻤﺴﺎواة اﻟﻤﻀﺎﻋﻔﺔ ) === (ﺑﺪﻻ ً ﻣﻦ اﻟﻤﺴﺎواة اﻟﻤﺰدوﺟﺔ ) == (‬

‫ﺗﺎﺳﻌﺎ ً ‪ -:‬ﻻﺣﻆ أن ) ‪ ( break‬ﺗﻌﻤﻞ ﻋﻠﻰ اﻟﺨﺮوج ﻣﻦ اﻟﻌﺒﺎرة اﻟﺸﺮطﯿﺔ اﻟﻤﻮﺟﻮدة ﻓﯿﮭﺎ ‪ ,‬أﻣﺎ )‬
‫‪ ( exit‬ﻓﺘﻌﻤﻞ ﻋﻠﻰ اﻟﺨﺮوج ﻣﻦ ﻛﺎﻣﻞ اﻟﻜﻮد ﻻﺣﻆ ھﺬﯾﻦ اﻟﻤﺜﺎﻟﯿﻦ اﻟﺘﻮﺿﯿﺤﯿﯿﻦ ‪-:‬‬

‫ﻣﺜﺎل ‪-: 1‬‬

‫; ‪$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‬‬

‫ﻋﺎﺷﺮا ً ‪ -:‬اﻟﻤﺴﺎرات ﻓﻲ ‪php‬‬

‫ﻟﻨﻔﺘﺮض أﻧﻨﺎ ﻧﻮد اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻒ "‪ "file.txt‬ﻓﯿﻜﻮن ﻟﺪﯾﻨﺎ أﺣﺪ اﻟﺤﺎﻻت اﻟﺘﺎﻟﯿﺔ‬

‫‪ -1‬أن ﯾﻜﻮن ﻓﻲ ﻧﻔﺲ اﻟﻤﺠﻠﺪ اﻟﺬي ﻧﻨﻔﺬ ﻓﯿﮫ ﺑﺮﻧﺎﻣﺠﻨﺎ وھﻨﺎ ﻧﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺔ اﺳﻢ اﻟﻤﻠﻒ ﻓﻘﻂ دون‬
‫اﻟﺤﺎﺟﺔ ﻷي إﺿﺎﻓﺎت ‪ ,‬ﻣﺜﺎل ‪/‬‬
‫"‪"file.txt‬‬
‫) ‪( 144‬‬ ‫ﻣﻼﺣﻈﺎت ﻋﺎﻣﺔ‬

‫‪ -2‬أن ﯾﻜﻮن اﻟﻤﻠﻒ ﻓﻲ ﻣﺠﻠﺪ ﻧﻔﺮض أن اﺳﻤﮫ ‪ data‬داﺧﻞ اﻟﻤﺠﻠﺪ اﻟﻤﻮﺟﻮد ﻓﯿﮫ ﺑﺮﻧﺎﻣﺠﻨﺎ ‪ ,‬ﻓﻔﻲ‬
‫ھﺬه اﻟﺤﺎﻟﺔ ﻧﻜﺘﺐ ﻣﺴﺎر اﻟﻤﻠﻒ ﻛﻤﺎ ﯾﻠﻲ‬
‫"‪" ./data/file.txt‬‬

‫‪ -3‬أن ﯾﻜﻮن اﻟﻤﻠﻒ ﻓﻲ اﻟﻤﺠﻠﺪ اﻷب اﻟﻤﻮﺟﻮد ﻓﯿﮫ ﺑﺮﻧﺎﻣﺠﻨﺎ ‪ ,‬وھﻨﺎ ﯾﻜﻮن اﻟﻤﺴﺎر ﻛﺎﻟﺘﺎﻟﻲ‬
‫"‪" ../file.txt‬‬

‫‪ -4‬أن ﻧﺤﺪد اﻟﻤﺴﺎر ﻛﻌﻨﻮان اﻧﺘﺮﻧﺖ‬


‫"‪"www.example.com/file.txt‬‬

‫أﺣدﻋﺷر ‪ -:‬ﻹﺿﺎﻓﺔ ﺑﯾﺎﻧﺎت إﻟﻰ ﺣﻘول ﻓﻲ اﻟﺟدول‬


‫اﺳم اﻟﺣﻘل اﻷول‬ ‫اﺳم اﻟﺣﻘل اﻟﺛﺎﻧﻲ‬
‫; " ) (‪$x = " insert into bb set bt1='$y' , bt2=curdate‬‬

‫داﻟﺔ إدﺧﺎل اﻟﺑﯾﺎﻧﺎت‬ ‫ﻹﺿﺎﻓﺔ اﻟﺗﺎرﯾﺦ إﻟﻰ اﻟﺣﻘل ‪bt2‬‬

‫اﺳم اﻟﺟدول‬ ‫إﺿﺎﻓﺔ اﻟﺑﯾﺎﻧﺎت اﻟﻣوﺟودة ﻓﻲ ھذا اﻟﻣﺗﻐﯾر إﻟﻰ اﻟﺣﻘل ‪bt1‬‬

‫ﻹﺿﺎﻓﺔ اﻟﺑﯾﺎﻧﺎت اﻟﺗﻲ ﺑﻌدھﺎ ) وھﻲ ﺛﺎﺑﺗﺔ ‪( set‬‬

‫إﺛﻧﻰ ﻋﺷر ‪ -:‬إذا أﻧﺷﺄﻧﺎ ﻧﻣوذج إدﺧﺎل ﻓﻲ اﻟـ ‪ html‬ﻓﯾﺟب أن ﻧﺣدد اﻟﺻﻔﺣﺔ اﻟﺗﻲ ﻧرﯾد أن‬
‫ﻧﻌﺎﻟﺞ اﻟﺑﯾﺎﻧﺎت اﻟﺗﻲ ﯾدﺧﻠﮭﺎ اﻟﻣﺳﺗﺧدم وذﻟك ﻣن ﺧﻼل اﻟﺧﺎﺻﯾﺔ ‪ action‬واﻟﺗﻲ ھﻲ إﺣدا‬
‫ﺧﺻﺎﺋص اﻟوﺳم ‪ form‬ﻟﻛن إذا أردﻧﺎ أن ﻧﻌﺎﻟﺞ اﻟﺑﯾﺎﻧﺎت ﻓﻲ ﻧﻔس اﻟﺻﻔﺣﺔ اﻟﺗﻲ ﻓﯾﮭﺎ ﻧﻣوذج‬
‫اﻷدﺧﺎل ﻓﯾﻣﻛن أن ﻻ ﻧﺿﻊ اﻟﺧﺎﺻﯾﺔ ‪ action‬و ﻟﻛن ﯾﻔﺿل وﺿﻊ ھذه اﻟﺧﺎﺻﯾﺔ واﺿﺎﻓﺔ ﻧﻔس‬
‫اﺳم اﻟﺻﻔﺣﺔ اﻟﺗﻲ ﻓﯾﮭﺎ اﻟﻧﻣوذج ) وھﻲ ﻧﻔﺳﮭﺎ اﻟﺻﻔﺣﺔ اﻟﺗﻲ ﺳﻧﻌﺎﻟﺞ اﻟﺑﯾﺎﻧﺎت ﻓﯾﮭﺎ ( ﻟﻛن ﻟو ﻓرﺿﺎ ً‬
‫ﺗم ﺗﻐﯾﯾر اﺳم اﻟﺻﻔﺣﺔ ﻓﯾﻣﺎ ﺑﻌد ﻓﺳﯾﺣدث ﺧطﺄ ﺑﻛل ﺗﺄﻛﯾد وﻟﺗﻼﻓﻲ ھذه اﻟﻣﺷﻛﻠﺔ ﺳﻧﺟﻌل ﻗﯾﻣﺔ‬
‫اﻟﺧﺎﺻﯾﺔ ‪ action‬ﺗﺳﺎوي ]’ ‪ $_SERVER[‘ PHP_SELF‬وھذه اﻟﺗﻌﻠﯾﻣﺔ ﺗﻌﻧﻲ أن ﯾﺗم‬
‫اﻟﻣﻌﺎﻟﺟﺔ ﻓﻲ ﻧﻔس اﻟﺻﻔﺣﺔ ‪.‬‬

‫ﻣﺛﺎل‪/‬‬
‫>” >? ]’ ‪<form action=” <?php $_SERVER[‘ PHP_SELF‬‬

You might also like