php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php

Пошаговая инструкция ΠΏΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСр Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы Π½Π° PHP + Javascript

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:

php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. a1acdf8b6964423db32a7186393881b3. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php Ρ„ΠΎΡ‚ΠΎ. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php-a1acdf8b6964423db32a7186393881b3. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° a1acdf8b6964423db32a7186393881b3. НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:

ИдСя ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π’Π°ΠΊ ΠΊΠ°ΠΊ описания ΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ для получСния ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·, Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму Ρ€Π°Π±ΠΎΡ‚Ρ‹: Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° сСрвСр Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° Ρ„ΠΎΡ‚ΠΎ-ΠΈΠΊΠΎΠ½ΠΊΡƒ, ΠΏΡ€ΠΈ этом Π² случаС успСха сСрвСр Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Π° ΠΏΡ€ΠΈ нСуспСхС β€” Β«errorΒ». БоотвСтствСнно, Π² случаС успСха, Ρ„ΠΎΡ‚ΠΎ-ΠΈΠΊΠΎΠ½ΠΊΠ° замСняСтся Π½Π° ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Ρƒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ‚ΠΎ, Π° Π² скрытоС ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строки сохраняСтся Π΅Ρ‘ имя, Π° ΠΏΡ€ΠΈ нСуспСхС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ„ΠΎΡ‚ΠΎ-ΠΈΠΊΠΎΠ½ΠΊΡƒ ΠΈ пустоС скрытоС ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строки, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π΅ Π·Π° имя Ρ„ΠΎΡ‚ΠΎ. ВСкстовая ΠΆΠ΅ информация ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ любого поля Ρ„ΠΎΡ€ΠΌΡ‹ отправляСтся Π½Π° сСрвСр вся Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ массив [имяЀото, описаниСДСтали, количСствоШт] β€” это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎ: ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ списка Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² ΠΏΡ€ΠΈ ΠΈΡ… Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ. Как извСстно, AJAX Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, поэтому Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, Π² качСствС target ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ скрытый Ρ„Ρ€Π΅ΠΉΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ вмСсто страницы.

php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. 863a69be2e984190af56e595b0edf3b3. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php Ρ„ΠΎΡ‚ΠΎ. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php-863a69be2e984190af56e595b0edf3b3. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 863a69be2e984190af56e595b0edf3b3. НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ рСализация

Π˜Ρ‚Π°ΠΊ, Π² нашСм распоряТСнии HTML, PHP ΠΈ Javascript. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ:

1. ВСрстаСм Π½Π° страницС Ρ„ΠΎΡ€ΠΌΡƒ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎ. Она содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ input, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ спрячСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ css:

2. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π° страницС скрытый iframe, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ с Ρ„Π°ΠΉΠ»ΠΎΠΌ:

3. ВСрстаСм Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ:

3. ПишСм PHP-ΠΊΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°:

Мой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° CodeIgniter, поэтому ΠΊΠΎΠ΄ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ, Π½ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ, ΡΡƒΡ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: ΠΌΡ‹ просто Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ Ρ„Π°ΠΉΠ», Ссли всё ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² наш iframe Π΅Π³ΠΎ имя, Ссли Π½Π΅Ρ‚ β€” Β«errorΒ».

4. ПишСм Javascript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь процСсс:

Π’ΠΎΡ‚, собствСнно, ΠΈ вСсь процСсс.

Если Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ такая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, сдСлаю Π΄Π΅ΠΌΠΎ процСсса ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡŽ сюда ссылку, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄Π°ΠΌ исходники.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сайт: PHP, AJAX, HTML5 ΠΈ Drag’n’Drop

Π‘ΠΊΡƒΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ β€” ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Π²Π΅ΠΊ. HTML5 Π΄Π°Π΅Ρ‚ возмоТности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Drag’n’Drop, Π° AJAX позволяСт Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π΅Π· обновлСния страницы.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ смог ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это максимально ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π½Π° сайт ΠΌΠΎΠΆΠ½ΠΎ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π° PHP, Π½ΠΎ с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ HTML5 появились Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрСсныС возмоТности β€” Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΈ ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… функциях, ΠΈ ΠΎ нововвСдСниях.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° PHP

ΠΠ°Ρ‡Π°Ρ‚ΡŒ слСдуСт с создания Ρ„ΠΎΡ€ΠΌΡ‹:

Для Ρ‚Π΅Π³Π° ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹:

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π΅Π³ добавляСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ multiple ΠΈ имя file[] β€” это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ сразу нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ Π² ΠΊΠΎΠ΄Π΅ присутствуСт div, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ сообщСниС.

Π”Π°Π»Π΅Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ стили CSS:

И Π²ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит:

php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. 3e2d08dea13e39b3b163380bfbc5c8bed6be25c8. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php Ρ„ΠΎΡ‚ΠΎ. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php-3e2d08dea13e39b3b163380bfbc5c8bed6be25c8. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 3e2d08dea13e39b3b163380bfbc5c8bed6be25c8. НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:

Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ провСсти нСсколько ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° нСпосрСдствСнно Π½Π° сайт. Π˜Π½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π²Π·Π»ΠΎΠΌΡ‰ΠΈΠΊΠΈ загрузят Π½Π° сайт PHP-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ смогут ΠΈΡ… Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС сСрвСра.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ:

Если Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, создаСтся массив Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ провСряСтся соотвСтствиС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ, Ссли валидация ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ move_uploaded_file Ρ„Π°ΠΉΠ» пСрСмСщаСтся ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ.

Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Ρ…ΠΎΡ‚ΡŒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ ΠΎΠ½ довольно ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½ ΠΈ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ:

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, стоит провСсти нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ прСдставляли ΡƒΠ³Ρ€ΠΎΠ·Ρƒ для сайта ΠΈ Π½Π΅ валялись Π±Π΅Π· Π΄Π΅Π»Π°.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сайт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AJAX

Если Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ возмоТности JavaScript, Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π΅Π΅ ΠΈ красивСС. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Ρ‡Π΅Ρ€Π΅Π· AJAX, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ пСрСтаскивании:

Ѐункция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° FormData, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сообщСниС, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ».

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° AJAX:

php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. c6aeb83d0c6622c3dc7fb317339cb6412d0cc7c2. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php Ρ„ΠΎΡ‚ΠΎ. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php-c6aeb83d0c6622c3dc7fb317339cb6412d0cc7c2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° c6aeb83d0c6622c3dc7fb317339cb6412d0cc7c2. НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π”Π°Π»ΡŒΡˆΠ΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ всС Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ:

Π­Ρ‚ΠΎ лишь малая Ρ‡Π°ΡΡ‚ΡŒ возмоТностСй PHP β€” ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… всСх ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· курса Β«PHP-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сильная тСорСтичСская Π±Π°Π·Π° закрСпляСтся слоТными, Π½ΠΎ интСрСсными практичСскими Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ.

php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. 182cc09be744b5e7189fe4715b8655719e75fc8f. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php Ρ„ΠΎΡ‚ΠΎ. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php-182cc09be744b5e7189fe4715b8655719e75fc8f. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 182cc09be744b5e7189fe4715b8655719e75fc8f. НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:

ΠŸΠΈΡˆΠ΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π² свободноС врСмя создаСт ΠΈΠ³Ρ€Ρ‹. ΠœΠ΅Ρ‡Ρ‚Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ свою ΡΡ‚ΡƒΠ΄ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»Π°ΠΌΠΏΠΎΠ²Ρ‹Π΅ RPG.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

PHP. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° сСрвСр

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΡƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСр. Если Π²Ρ‹ Π΅Ρ‰Ρ‘ Π½Π΅ Ρ‡ΠΈΡ‚Π°Π»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡŽ Β«Π§Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСр», Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ с Π½Π΅Ρ‘.

Π’ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудили ΠΎΠ±Ρ‰ΠΈΠ΅ Π½ΡŽΠ°Π½ΡΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСр. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ! Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ:

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽ сразу, рассматриваСмый ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π±Π΅Π· Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… изысков, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ максимально понятным для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ….

Для Π½Π°Ρ‡Π°Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠ°ΠΏΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π² нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅:

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° содСрТимоС индСкса.

Кода ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ, поТалуйста, Π½Π΅ ΠΏΡƒΠ³Π°ΠΉΡ‚Π΅ΡΡŒ! Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΠ° Π²Π°ΠΌ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

БоотвСтствСнно, Ссли Ρ„ΠΎΡ€ΠΌΠ° Π±Ρ‹Π»Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π°, ΠΌΡ‹ сначала Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ can_upload. Если ΠΎΠ½Π° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π°ΠΌ ΠΏΠΎ всСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ, Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ make_upload. Π˜Π½Π°Ρ‡Π΅ просто распСчатываСм сообщСниС ΠΎΠ± ошибкС.

Π—Π΄Π΅ΡΡŒ всё достаточно ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ. Π‘Ρ…Π΅ΠΌΠ° стандартная. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ нас большС интСрСсуСт, Π° Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ эти Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ can_upload ΠΈ make_upload!

Рассмотрим Ρ„Π°ΠΉΠ» functions.php

Π‘Π½Π°Ρ‡Π°Π»Π° всСго ΠΏΠ°Ρ€Ρƒ слов ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ make_upload, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° ΠΏΡ€ΠΎΡ‰Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π° вставляСм mt_rand(0, 10000), Ρ‚.Π΅, случайноС число ΠΎΡ‚ 0 Π΄ΠΎ 10000. ДСлаСтся это для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ Ρ„Π°ΠΉΠ»Π° Π±Ρ‹Π»ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π²ΡƒΡ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, вторая Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Ссли Π²Ρ‹ задались Ρ€Π΅Π·ΠΎΠ½Π½Ρ‹ΠΌ вопросом, Π° Π³Π΄Π΅ ΠΆΠ΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³ php Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π·Π½Π°Ρ‡ΠΈΡ‚, Π²Ρ‹ явно Π½Π΅ Ρ‡ΠΈΡ‚Π°Π»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡŽ «Ошибка headers already sentΒ»!

НСобходимыС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

Основной ΠΆΠ΅ интСрСс для нас прСдставляСт функция can_upload.

Π’ΠΎΡ‚ собствСнно говоря ΠΈ всё! Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ, Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ.

А Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ водяной Π·Π½Π°ΠΊ. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

БСзопасная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° сСрвСр. Π§Π°ΡΡ‚ΡŒ пСрвая

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ основныС уязвимости Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСр ΠΈ способы ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ самыС Π°Π·Ρ‹, Π² врят-Π»ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ интСрСсна профСссионалам. Но Ρ‚Π΅ΠΌ Π½Π΅ΠΌΠ΅Π½Π΅Π΅ β€” это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ PHP-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Π±-прилоТСния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹. Π€ΠΎΡ€ΡƒΠΌΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Β«Π°Π²Π°Ρ‚Π°Ρ€Ρ‹Β». Π€ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. Π‘ΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ сСти ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ возмоТности ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΈΠ΄Π΅ΠΎ, ΠΈ Ρ‚.Π΄. Π‘Π»ΠΎΠ³ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠΈ ΠΈ/ΠΈΠ»ΠΈ изобраТСния.

Часто Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π΅Π· обСспСчСния Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ контроля бСзопасности ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ уязвимостСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, стали настоящСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Π²Π΅Π±-прилоТСниях Π½Π° PHP.

ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ тСсты ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Π±-прилоТСния ΠΈΠΌΠ΅ΡŽΡ‚ мноТСство ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΈ Β«Π΄Ρ‹Ρ€Ρ‹Β» ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌ ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹Π΅ возмоТности ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ нСсанкционированныС дСйствия, начиная с просмотра любого Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСрС ΠΈ закачивания Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ рассказываСт ΠΎΠ± основных Β«Π΄Ρ‹Ρ€Π°Ρ…Β» бСзопасности ΠΈ способах ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ.

Код ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΏΠΎ адрСсу:
www.scanit.be/uploads/php-file-upload-examples.zip.

Если Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, поТалуйста ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, Π½Π΅ доступСн ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… сСтСй. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ уязвимости, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π° доступном ΠΈΠ·Π²Π½Π΅ сСрвСрС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ опасным послСдствиям.

ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π°

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ состоит ΠΈΠ· Π΄Π²ΡƒΡ… нСзависимых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ – принятиС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠΎΠΊΠ°Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. ОбС части ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ источником уязвимостСй. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ (upload1.php):

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:

form name =»upload» action =»upload1.php» method =»POST» ENCTYPE =»multipart/form-data» >
Select the file to upload: input type =»file» name =»userfile» >
input type =»submit» name =»upload» value =»upload» >
form >

Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСбольшой Perl-скрипт (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π° любом языкС – ΠΏΡ€ΠΈΠΌ. ΠΏΡ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ², Π΄Π°Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ отправляСмыС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° своС усмотрСниС.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° содСрТит Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π΄Ρ‹Ρ€Ρƒ бСзопасности: upload1.php позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠΎΡ€Π΅Π½ΡŒ сайта. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ PHP-Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π½Π° сСрвСрС с ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠ΅ΠΉ процСсса Π²Π΅Π±-сСрвСра. Π’Π°ΠΊΠΎΠΉ скрипт называСтся PHP-Shell. Π’ΠΎΡ‚ самый простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ скрипта:

Если этот скрипт находится Π½Π° сСрвСрС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ‡Π΅Ρ€Π΅Π· запрос:
server/shell.php?command=any_Unix_shell_command

Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ PHP-shell ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Они ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ запросы SQL, ΠΈ Ρ‚.Π΄.

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊ Perl, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ PHP-Shell Π½Π° сСрвСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ upload1.php:

Π­Ρ‚ΠΎΡ‚ скрипт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ libwwwperl, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Perl, ΡΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

И Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ случится ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этого скрипта:

POST /upload1.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Length: 156
Content-Type: multipart/form-data; boundary=xYzZY
—xYzZY
Content-Disposition: form-data; name=»userfile»; filename=»shell.php»
Content-Type: text/plain

—xYzZYβ€”

HTTP/1.1 200 OK
Date: Wed, 13 Jun 2007 12:25:32 GMT
Server: Apache
X-Powered-By: PHP/4.4.4-pl6-gentoo
Content-Length: 48
Connection: close
Content-Type: text/html
File is valid, and was successfully uploaded.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ shell-скрипт, ΠΌΠΎΠΆΠ½ΠΎ спокойно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ curl localhost/uploads/shell.php?command=id
uid=81(apache) gid=81(apache) groups=81(apache)

cURL – command-line ΠΊΠ»ΠΈΠ΅Π½Ρ‚ HTTP, доступный Π½Π° Unix ΠΈ Windows. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ инструмСнт для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Π΅Π±-прилоТСния. cURL ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΎΡ‚ curl.haxx.se

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Content-Type

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π΄ΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ мСсто. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв программисты ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ простыС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Content-Type:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2 (upload2.php):

Π’ этом случаС, Ссли Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ попытаСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ shell.php, наш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ MIME-Ρ‚ΠΈΠΏ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² запросС ΠΈ ΠΎΡ‚ΡΠ΅ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅.

POST /upload2.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length: 156
—xYzZY
Content-Disposition: form-data; name=»userfile»; filename=»shell.php»
Content-Type: text/plain

—xYzZY—

HTTP/1.1 200 OK
Date: Thu, 31 May 2007 13:54:01 GMT
Server: Apache
X-Powered-By: PHP/4.4.4-pl6-gentoo
Content-Length: 41
Connection: close
Content-Type: text/html
Sorry, we only allow uploading GIF images

Пока Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ. К соТалСнию, Π΅ΡΡ‚ΡŒ способ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ эту Π·Π°Ρ‰ΠΈΡ‚Ρƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ провСряСмый MIME-Ρ‚ΠΈΠΏ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ вмСстС с запросом. Π’ запросС Π²Ρ‹ΡˆΠ΅ ΠΎΠ½ установлСн ΠΊΠ°ΠΊ Β«text/plainΒ» (Π΅Π³ΠΎ устанавливаСт Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ – ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°). НичСго Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΡƒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Β«image/gifΒ», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ эмуляции ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ управляСт запросом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ посылаСт (upload2.pl):

И Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ получится.

POST /upload2.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length: 155
—xYzZY
Content-Disposition: form-data; name=»userfile»; filename=»shell.php»
Content-Type: image/gif

—xYzZYβ€”

Π’ ΠΈΡ‚ΠΎΠ³Π΅, наш upload2.pl ΠΏΠΎΠ΄Π΄Π΅Π»Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Content-Type, заставляя сСрвСр ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ».

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° содСрТания Ρ„Π°ΠΉΠ»Π° изобраТСния

ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ Content-Type, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ PHP ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ фактичСскоС содСрТаниС Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Ѐункция PHP getimagesize() часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для этого. Она Π±Π΅Ρ€Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π° ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Ρ‚ΠΈΠΏΠ° изобраТСния. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ upload3.php Π½ΠΈΠΆΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли нападавший попытаСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ shell.php, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ установит Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Content-Type Π² Β«image/gifΒ», Ρ‚ΠΎ upload3.php всС Ρ€Π°Π²Π½ΠΎ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ.

POST /upload3.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length: 155
—xYzZY
Content-Disposition: form-data; name=»userfile»; filename=»shell.php»
Content-Type: image/gif

—xYzZYβ€”

HTTP/1.1 200 OK
Date: Thu, 31 May 2007 14:33:35 GMT
Server: Apache
X-Powered-By: PHP/4.4.4-pl6-gentoo
Content-Length: 42
Connection: close
Content-Type: text/html
Sorry, we only accept GIF and JPEG images

МоТно ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π±Ρ‹Π²Π°Ρ‚ΡŒ Π² увСрСнности, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹ GIF ΠΈΠ»ΠΈ JPEG. К соТалСнию, это Π½Π΅ Ρ‚Π°ΠΊ. Π€Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GIF ΠΈΠ»ΠΈ JPEG, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя PHP-скриптом. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² изобраТСния позволяСт внСсти Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ тСкстовыС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ PHP Π² этих ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…. Когда getimagesize() смотрит Π½Π° Ρ„Π°ΠΉΠ», ΠΎΠ½ воспримСт это ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ GIF ΠΈΠ»ΠΈ JPEG. Когда транслятор PHP смотрит Π½Π° Ρ„Π°ΠΉΠ», ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ PHP Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ «мусорС», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½. Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ Ρ„Π°ΠΉΠ», Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ crocus.gif содСрТится Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ (см. Π½Π°Ρ‡Π°Π»ΠΎ ΡΡ‚Π°Ρ‚ΡŒΠΈ). ПодобноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создано Π² любом графичСском Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅.

Π˜Ρ‚Π°ΠΊ, создадим perl-скрипт для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ нашСй ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π±Π΅Ρ€Π΅Ρ‚ Ρ„Π°ΠΉΠ» crocus.gif ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ это с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ crocus.php. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ нападавший ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ uploads/crocus.php ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ слСдущСС:

php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. f1wz8. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php Ρ„ΠΎΡ‚ΠΎ. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php-f1wz8. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° f1wz8. НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:

Как Π²ΠΈΠ΄Π½ΠΎ, транслятор PHP ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ изобраТСния ΠΈ выполняСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ » » Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ GIF.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΠΎΠ³ Π±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒΡΡ вопросом, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ просто Π½Π΅ провСряСм Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°? Если ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ *.php, Ρ‚ΠΎ сСрвСр Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смоТСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ скрипт. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΈ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ список Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ имя Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, игнорируя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»Π° с выполняСмыми Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ (upload4.php):

POST /upload4.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length: 14835
—xYzZY
Content-Disposition: form-data; name=»userfile»; filename=»crocus.php»
Content-Type: image/gif
GIF89(. skipping binary data. )
—xYzZYβ€”

HTTP/1.1 200 OK
Date: Thu, 31 May 2007 15:19:45 GMT
Server: Apache
X-Powered-By: PHP/4.4.4-pl6-gentoo
Content-Length: 36
Connection: close
Content-Type: text/html
We do not allow uploading PHP files

POST /upload4.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length: 14835
—xYzZY
Content-Disposition: form-data; name=»userfile»; filename=»crocus.gif»
Content-Type: image/gif
GIF89(. skipping binary data. )
—xYzZY—

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ запросим Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ сСрвСром:

php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. f2im2. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php Ρ„ΠΎΡ‚ΠΎ. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php-f2im2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° f2im2. НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°:
Π’ случаС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ самым Π»ΡƒΡ‡ΡˆΠΈΠΌ способом ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ дСйствия, Π° сохранСниС Ρ„Π°ΠΉΠ»Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ получаСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getimagesize(). Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ происходит. Π‘Ρ‚ΠΎΠΈΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ jpeg. ΠŸΡ€ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ (насколько ΠΌΠ½Π΅ извСстно) ΠΏΠΎΡ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ, обСспСчив практичСски Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΡ‚Π½ΠΎΡΡ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ„ΠΎΡ‚ΠΎ Π½Π° сайт php

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ„ΠΎΡ‚ΠΎ Π½Π° сайт php

Π€ΠΎΡ€ΠΌΠ° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎ php

Π£ нас стандартная Ρ„ΠΎΡ€ΠΌΠ° для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… выглядит Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

И Ссли ΠΌΡ‹ Π΅Ρ‘ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ, Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ:

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‘ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ!

ДобавляСм Π² Ρ„ΠΎΡ€ΠΌΡƒ enctype=»multipart/form-data»

И Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° Π² input мСняСм с «text» Π½Π° «file»

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Ρƒ нас Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ:

ЭлСмСнтарная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΠΎΡ‚ΠΎ Π½Π° сайт php

И Π΄Π°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с php скриптом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ Ρ„ΠΎΡ‚ΠΎ Π½Π° сайт!

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! НС Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ! Π§Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΠΎΡ‚ΠΎ Π½Π° сСрвСр Π½Π΅ бСзопасна ΠΈ Π½Π°Π΄ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ мноТСство ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этот Ρ„Π°ΠΉΠ» бСзопасСн.
Но ΠΌΡ‹ сСйчас. просто пытаСмся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎ Π½Π° сСрвСр

Π’ сСти Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ, я расскаТу, ΠΊΠ°ΠΊΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ я!

Π§Ρ‚ΠΎ Π½Π°ΠΌ понадобится для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎ Π½Π° сСрвСр php

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ с Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Ρ„ΠΎΡ‚ΠΎ, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ автоматичСски ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² настройках сСрвСра. β†’ Ссли ΠΆΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ удастся Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, Ρ‚ΠΎ php Π²Π°ΠΌ ΠΎΠ± этом сообщит! Но ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сСрвСр настроСн ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ! ΠŸΠΎΠΊΡƒΠΏΠ°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ хостинг!, Π³Π΄Π΅ сСрвСр настроСн ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ, Π½ΠΎ Ссли это ΠΈ Π½Π΅ Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π²Ρ‹ всСгда смоТСтС ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Π½Ρ‘ΠΌ Π½Π° нашСм сайтС!

Ѐункция для пСрСмСщСния изобраТСния

Если Ρ„Π°ΠΉΠ» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½, Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наш Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, Π³Π΄Π΅ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ„Π°ΠΉΠ» изобраТСния Π΄ΠΎ Π΅Π³ΠΎ удалСния.

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ со страницы всС скрипты НС Π·Π°Π±ΡƒΠ΄ΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ спасибо!

Π“Π΄Π΅ находится врСмСнная ΠΏΠ°ΠΏΠΊΠ° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎ Π½Π° сСрвСрС

Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² наш «DirectAdmin» β†’ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° строка настройки php:

Данная ΠΏΠ°ΠΏΠΊΠ° нСдоступна ΠΏΠΎ адрСсу «http»

php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. 2020 06 28 11 29. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php Ρ„ΠΎΡ‚ΠΎ. php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php-2020 06 28 11 29. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° php скрипт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сайт php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 2020 06 28 11 29. НСдавно я столкнулся с Π²ΠΏΠΎΠ»Π½Π΅, Π½Π° ΠΌΠΎΠΉ взгляд, распространённой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр любоС число, скаТСм, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ ΠΌΠΎΡ‘ΠΌ случаС это Π±Ρ‹Π»ΠΎ: Ρ„ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π΅Π³ΠΎ описаниС ΠΈ количСство. Для наглядности ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ интСрфСйса:Π“Π΄Π΅ находится врСмСнная ΠΏΠ°ΠΏΠΊΠ° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎ Π½Π° сСрвСрС

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ° изобраТСния

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ являСтся Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° это функция getimagesize

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½Π° Ρ‚ΠΈΠΏ изобраТСния:

[3] => width=»1920″ height=»1080″

Π•Ρ‘ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ explode

НазваниС ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ сохраняСмого Ρ„Π°ΠΉΠ»Π° «test.$mime[1]»

Π­Ρ‚ΠΎ лишь ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°! И Π΅Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° вСс Ρ„ΠΎΡ‚ΠΎ! + На Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ врСдоносного ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΎΠ± этом ΠΌΡ‹ ΠΏΠΎΠ²Π΅Ρ€ΠΈΠΌ ΡƒΠΆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·!

ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹Π΅ запросы Π½Π° Ρ‚Π΅ΠΌΡƒ Ρ„ΠΎΡ‚ΠΎ php.

Иногда Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ поисковыС запросы, Ρ‡Ρ‚ΠΎ ΠΈ Π½Π΅ понимаСшь, Ρ‡Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π²ΠΈΠ΄Ρƒ, ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ это:

ΠΊΠ°ΠΊ Π² php ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊ сайту

Π­Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сайт, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ всю страницу ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ.

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ html ΠΊΠΎΠ΄ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

ΠŸΠΎΡ‚ΠΎΠΌ вывСсти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ echo.

Π›ΠΈΠ±ΠΎ Ρ‚Π°ΠΊ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ систСмы коммСнтирования :

Π€ΠΎΡ€ΠΌΠ° ΠΏΠΎΠΊΠ° доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π΄ΠΌΠΈΠ½Ρƒ. скоро всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. надСюсь.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *