Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

# Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° сСрвСр Β· Наглый PHP

<form enctype="multipart/form-data" action="script.php" method="POST">
    

    
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    
    ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ»: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

Π’ script.php

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π½Π° сСрвСр, Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² массивС $_FILES[«userfile»]. ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽ Π’Π°ΡˆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ userfile — это Ρ‚ΠΎ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π² <input type=»file» name Π² нашСй Ρ„ΠΎΡ€ΠΌΠ΅

$_FILES[«userfile»][«name»] — Ρ…Ρ€Π°Π½ΠΈΡ‚ исходноС имя Ρ„Π°ΠΉΠ»Π°
$_FILES[«userfile»][«tmp_name»] — Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ имя, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ„Π°ΠΉΠ» сохранился Π½Π° сСрвСрС.
$_FILES[«userfile»][«size»] — Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…

move_uploaded_file($_FILES['userfile']['tmp_name'],$_FILES['userfile']['name'] )

PHP сохраняСт Ρ„Π°ΠΉΠ»Ρ‹ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Ρ„-я move_uploaded_file Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ

//ΠΊΠ»ΡŽΡ‡ userfile опрСдСляСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ name Π² input’e

Π Π°Π±ΠΎΡ‚Π° с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ. ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² Π‘Π”, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это сущСствСнно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ замСдляСт Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ имя Π² Π‘Π”.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

<form action="file-upload.php" method="post" enctype="multipart/form-data">
  Π€Π°ΠΉΠ»Ρ‹:<br />
  <input name="userfile[]" type="file" multiple="true" /><br />
  <input type="submit" value="ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ" />
</form>

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° добавляСтся []. Для мноТСствСнной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ добавляСм multiple=”true”.

$_FILES[‘userfile’][‘name’] – содСрТит массив ΠΈΠΌΠ΅Π½ всСх Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

$_FILES[‘userfile’][‘name’][0] – доступ ΠΊ Π½ΡƒΠ»Π΅Π²ΠΎΠΌΡƒ элСмСнту

count($_FILES[‘userfile’][‘name’]) — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

ПолСзноС Ρ‡Ρ‚ΠΈΠ²ΠΎ:

  1. БСзопасная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° сСрвСр, Ρ‡Π°ΡΡ‚ΡŒ пСрвая https://habr.com/ru/post/44610/

  2. БСзопасная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° сСрвСр, Ρ‡Π°ΡΡ‚ΡŒ вторая https://habr. com/ru/post/44615/

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

  1. Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° сСрвСр
  2. ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ список Ρ€Π°Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ(добавляСм Π‘Π”)
  3. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Β«Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ просмотров»
  4. ΠœΡƒΠ»ΡŒΡ‚ΠΈΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСр Π² PHP (upload)

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ систСму Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ HTML-Ρ„ΠΎΡ€ΠΌΠ° ΠΈ PHP-скрипт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… этой Ρ„ΠΎΡ€ΠΌΠΎΠΉ. ИмСнно Ρ‚Π°ΠΊΠΈΠΌ способом Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ сСрвисы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСр. РСализуСтся ΠΎΠ½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сСрвСр.

HTML Ρ„ΠΎΡ€ΠΌΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°

Бамая простая Ρ„ΠΎΡ€ΠΌΠ° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°:

<form method="post" action="upload.php" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
<input type="file" name=" my_file ">
<input type="submit" value="Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»">
</form>

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΡƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΏΠΎΠ»Π΅ для Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° сСрвСр:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ entype ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² этой Ρ„ΠΎΡ€ΠΌΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ multipart/form-data, Ρ‡Ρ‚ΠΎ опрСдСляСт, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚. Π΅. Ρ„Π°ΠΉΠ»Π°. Если это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ„ΠΎΡ€ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ method ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π€ΠΎΡ€ΠΌΡ‹ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ POST. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅ΠΉ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ «ΠžΡ‚личия ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² POST ΠΈΠ»ΠΈ GET»

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ action содСрТит ссылку Π½Π° PHP-Ρ„Π°ΠΉΠ», содСрТащий ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ отправляСмых Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ MAX_FILE_SIZE, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ΅ опрСдСляСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² Π±Π°ΠΉΡ‚Π°Ρ…. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, этот Ρ€Π°Π·ΠΌΠ΅Ρ€ опрСдСляСтся настройками сСрвСра.

Для указания Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Ρ‚Π΅Π³ <input> Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏ «file», Π° Ρ‚Π°ΠΊ ΠΆΠ΅ для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ PHP-скрипта слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «name».

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡ‹ выполняСтся Ρ‚Π΅Π³ΠΎΠΌ <input> с Ρ‚ΠΈΠΏΠΎΠΌ «submit». Он отобраТаСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ.

PHP ΠΊΠΎΠ΄ сохранСния Ρ„Π°ΠΉΠ»Π°

Π—Π°Π΄Π°Ρ‡Π° этого ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π΅ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ сСрвСром Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ мСсто с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ – запись ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π‘Π”, созданиС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, сохранСниС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ авторских ΠΏΡ€Π°Π² ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Π’ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅, Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ„Π°ΠΉΠ»Π΅ содСрТатся ΡΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌ массивС $_FILES. БоотвСтствСнно, ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ свСдСния ΠΎΠ± ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΌ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ Ρ„Π°ΠΉΠ»Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π² $_FILES[‘my_file’]. Π’Π°ΠΊΠΎΠΉ массив содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

$_FILES[‘my_file’][‘name’] имя отправляСмого Ρ„Π°ΠΉΠ»Π°
$_FILES[‘my_file’][‘size’] Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…
$_FILES[‘my_file’][‘type’] MIME-Ρ‚ΠΈΠΏ принятого Ρ„Π°ΠΉΠ»Π°. Если ΠΎΠ½ опрСдСляСтся, содСрТит, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: image/gif, image/png, image/jpeg, text/html
$_FILES[‘my_file’][‘tmp_name’] содСрТит имя Ρ„Π°ΠΉΠ»Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: /tmp/phpR4n5wJ
$_FILES[‘my_file’][‘error’] ΠΊΠΎΠ΄ ошибки $_FILES, Ссли ΠΎΠ½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π°

ПослС получСния этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° сСрвСрС, Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ скопирован Π² ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, Ρ‚. ΠΊ. Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ скрипта автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½.

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ выполняСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ copy(), ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слуТит имя исходного Ρ„Π°ΠΉΠ»Π° (для этого случая имя Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° — $_FILES[‘my_file’][‘tmp_name’]) ΠΈ имя ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

<?php
$new_file =Β .$_FILES[][];


ifΒ (copy($_FILES[][], $new_file)) {
echoΒ ;
}Β elseΒ {

echoΒ ;
?>

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ Π½Π° сСрвСрС с ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π½Π° созданиС Π² Π½Π΅ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ².

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ имя Ρ„Π°ΠΉΠ»Π° указываСтся Ρ‚Π΅ΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρƒ исходного Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’ Ρ€Π΅Π°Π»Π΅ ΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ часто имя задаСтся Π² соотвСтствии с собствСнными трСбованиями, Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρ‡Ρ‚ΠΎ обСспСчиваСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ названия Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ позволяСт свСсти Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ стандарту. Π—Π΄Π΅ΡΡŒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ исходного названия Π² Π‘Π”, Ссли это Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Но Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ мСньшС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ названия Ρ„Π°Π»Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°Π»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ формирования ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ для хранСния Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… Ρ„Π°Π»ΠΎΠ².

Ѐункция copy() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈ False ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибки Π² процСссС копирования.

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

Php Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΠΎΡ‚ΠΎ Π½Π° сСрвСр

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

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

  1. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π° сСрвСр.
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Π²Ρ‹Π±Ρ€Π°Π½ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π½Π΅Ρ‚.
  3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°.
  4. Π“Ρ€Π°ΠΌΠΎΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»Π°.

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

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

  1. index.php – ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹
  2. functions.php – Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с двумя функциями
  3. img – ΠΏΠ°ΠΏΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ изобраТСния

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

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

Π“Π»Π°Π²Π½ΠΎΠ΅ β€” просто ΠΏΠΎΠ½ΡΡ‚ΡŒ схСму Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ скрипта. Π£ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  1. can_upload – ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true Π»ΠΈΠ±ΠΎ строку с сообщСниСм ΠΎΠ± ошибкС
  2. make_upload – ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСр

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

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

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ β€” Ρ„ΡƒΠΊΠ½Ρ†ΠΈΠΈ.

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

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

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

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

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

($file[β€˜name’] == Β») β€” ΠΌΠ΅Π»ΠΎΡ‡ΡŒ, знакомая Π²Π°ΠΌ ΠΏΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

А Π²ΠΎΡ‚ ($file[β€˜size’] == 0) β€” это Π·Π°Π±Π°Π²Π½ΠΎ! ОсобСнно с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΈ этом, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» слишком большой! Π Π°Π·Π³Π°Π΄ΠΊΠ° кроСтся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Ρ„Π°ΠΉΠ» Π±Ρ‹Π» большС, Ρ‡Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π² настройках сСрвСра, Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π²ΠΎΠΎΠ±Ρ‰Π΅. А Ссли Ρ„Π°ΠΉΠ» Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½, Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ.

Ну ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Π±Π΅Π»ΠΎΠ³ΠΎ листа. Π’Π°ΠΊΠΈΠΌ листом Ρƒ нас являСтся массив $types, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ пСрСчисляСм всС допустимыС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Если Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π² массивС, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π°ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎ.

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

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

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

Β§1. ΠžΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹

Π’ΡΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π° сСрвСр ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: настройка php.ini β†’ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° β†’ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° бСзопасности β†’ валидация Π΄Π°Π½Π½Ρ‹Ρ… β†’ сохранСниС Π½Π° диск. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΠΎ URL Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ способа получСния изобраТСния ΠΈ Π΅Π³ΠΎ сохранСния. ΠžΠ±Ρ‰Π°Ρ схСма Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π° сСрвСр выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΏΠΎ URL ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getimagesizefromstring(), Ρ‚. ΠΊ. cURL скачаСт Π΅Ρ‘ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… манипуляций.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ изобраТСния Π½Π° сСрвСр, Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: ΡˆΠΈΡ€ΠΈΠ½Ρƒ, высоту, Ρ‚ΠΈΠΏ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ вашСго прилоТСния, Π½ΠΎ для наглядности Π² этом руководствС ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ всС Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Β§2. ΠŸΡ€Π°Π²ΠΈΠ»Π° бСзопасности

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

Если Π΅ΡΡ‚ΡŒ Ρ‡Π΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Β«ΠŸΡ€Π°Π²ΠΈΠ»Π° бСзопасности», Ρ‚ΠΎΠ³Π΄Π° оставляйтС свои замСчания ΠΈΠ»ΠΈ ссылки Π½Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ бСзопасности Π² коммСнтариях ΠΊ этому руководству, Π° я ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽ ΠΈΡ… Π² этом ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅.

Β§3. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ php.ini

PHP позволяСт внСсти ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ значСния Π² процСсс Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π»ΡŽΠ±Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ php.ini Π½Π°ΠΉΡ‚ΠΈ Π±Π»ΠΎΠΊΠΈ Β«Resource LimitsΒ», Β«Data HandlingΒ» ΠΈ Β«File UploadsΒ», Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎ нСобходимости, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ смоТСт Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ большС дСсяти Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 5 ΠœΠ±Π°ΠΉΡ‚. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ· Π±Π»ΠΎΠΊΠ° Β«Resource LimitsΒ» большС Π½ΡƒΠΆΠ½Ρ‹ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ρ‚. ΠΊ. с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ cURL ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ содСрТимоС Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΅Ρ‘ ΠΏΠΎ Π½ΡƒΠΆΠ½Ρ‹ΠΌ Π½Π°ΠΌ критСриям, Π° для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

50 ΠœΠ±Π°ΠΉΡ‚ памяти. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ максимальноС врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с локальной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΏΠΎ ссылкС, Π΄Π°Π±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ достаточноС врСмя выполнСния скрипта Π² max_execution_time ΠΈ Π½Π΅ ΠΏΡƒΠ³Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ошибками.

Β§4. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹

БСйчас ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСр, Π° Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ лишь саму ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π˜Ρ‚Π°ΠΊ, для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HTML-Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» PHP-скрипту ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ POST ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ способ кодирования Π΄Π°Π½Π½Ρ‹Ρ… enctype=»multipart/form-data» (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²). Π‘ Ρ„ΠΎΡ€ΠΌΠΎΠΉ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ дальшС:

Для поля Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ имя name=»upload» Π² нашСй HTML-Ρ„ΠΎΡ€ΠΌΠ΅, хотя ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ. ПослС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° PHP-скрипту file-handler.php Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $_FILES[β€˜upload’] с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, которая Π² массивС содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π΅:

НС всСм Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· $_FILES ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ: MIME-Ρ‚ΠΈΠΏ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚. ΠΊ. ΠΎΠ½ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ· HTTP-ΠΎΡ‚Π²Π΅Ρ‚Π°, Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° Π½Π΅ стоит Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π² силу Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π° Π½ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ». Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, дальшС Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π»ΠΈ загрузился наш Ρ„Π°ΠΉΠ» ΠΈ загрузился Π»ΠΈ ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ошибки Π² $_FILES[β€˜upload’][β€˜error’] ΠΈ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ POST с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ is_uploaded_file(). Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ΄Ρ‘Ρ‚ Π½Π΅ ΠΏΠΎ ΠΏΠ»Π°Π½Ρƒ, Π·Π½Π°Ρ‡ΠΈΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π° экран.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» врСдоносный ΠΊΠΎΠ΄ встроСнный Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, нСльзя Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getimagesize(), которая Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ MIME-Ρ‚ΠΈΠΏ. Ѐункция ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся ссылкой Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» изобраТСния. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ настоящий MIME-Ρ‚ΠΈΠΏ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ FileInfo. Код Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова image Π² Ρ‚ΠΈΠΏΠ΅ нашСго Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ Ссли Π΅Π³ΠΎ Π½Π΅ окаТСтся, выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ:

На Π΄Π°Π½Π½ΠΎΠΌ этапС ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π»ΡŽΠ±Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π° наш сСрвСр, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° MIME-Ρ‚ΠΈΠΏ, Π½ΠΎ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ характСристикам Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getimagesize(), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ скормим сам Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» $_FILES[β€˜upload’][β€˜tmp_name’]. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ массив максимум ΠΈΠ· 7 элСмСнтов:

Для дальнСйшСй Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ изобраТСния ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ Π½ΠΈΠΌ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΎΠΌ Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 3 значСния: ΡˆΠΈΡ€ΠΈΠ½Ρƒ, высоту ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° (для вычислСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ filesize() для Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ).

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

На этом Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°. Для Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс UploadedFile ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Symfony HttpFoundation, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΎΠΉ для $_FILES ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ сохраняСт Ρ„Π°ΠΉΠ» Ρ‡Π΅Ρ€Π΅Π· move_uploaded_file().

Β§5. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния ΠΏΠΎ ссылкС

Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния ΠΏΠΎ ссылкС Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° cURL, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ рСсурсами. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Ρ‘ ΠΌΡ‹ скачаСм ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ для этих Ρ†Π΅Π»Π΅ΠΉ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ file_get_contents(), Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹ Π½Π΅ смоТСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΡ‘ΠΌ скачиваСмых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС возникшиС ошибки. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ cURL ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ скачал Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ: Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ пСрСнаправлСниям, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ сСртификата, ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ максимальноС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ cURL (формируСтся Π·Π° счёт ΠΎΠ±ΡŠΡ‘ΠΌΠ° скачиваСмых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ срСднСй скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСсурсом). Как ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

Если всё ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈ cURL улоТился Π² 60 сСкунд, Ρ‚ΠΎΠ³Π΄Π° содСрТимоС ΠΏΠΎ ссылкС Π±ΡƒΠ΄Π΅Ρ‚ скачано Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $raw. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, функция curl_getinfo() Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΌ запросС, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ рСсурсами:

Π”Π°Π»ΡŒΡˆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π΅Ρ‚ Π»ΠΈ ошибок Π² curl_errno() ΠΈ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ рСсурс ΠΎΡ‚Π΄Π°Ρ‘Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΉ 200, ΠΈΠ½Π°Ρ‡Π΅ ΠΌΡ‹ скаТСм, Ρ‡Ρ‚ΠΎ ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ URL Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ. ПослС всСх ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $raw ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Π² getimagesizefromstring() ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΡƒΠΆΠ΅ ΠΏΠΎ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ схСмС ΠΊΠ°ΠΊ Π² случаС с Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹.

Для сохранСния изобраТСния Π½Π° диск ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ file_put_contents(), которая Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² Ρ„Π°ΠΉΠ». НовоС имя Ρ„Π°ΠΉΠ»Π° ΠΌΡ‹ создадим Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ md5(), Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ сдСлаСм ΠΈΠ· image_type_to_extension(). Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΏΠΎ ссылкС.

Β§6. Настройка Π²Ρ‹Π±ΠΎΡ€Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Π’ этом ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ способы Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· с локальной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠΎ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ ссылкам. Для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ссылок ΠΌΡ‹ задСйствуСм $_POST ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π΅ΠΉ всС Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Π³Π° textarea. Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ дальшС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с $_FILES. Наша новая HTML-Ρ„ΠΎΡ€ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ старой.

Π’ ΠΊΠΎΠ½Π΅Ρ† ΠΈΠΌΠ΅Π½ΠΈ поля Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° name=»upload[]» добавились Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΈ Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ multiple, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ². ВсС Ρ„Π°ΠΉΠ»Ρ‹ снова загрузятся Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, Ссли Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ошибок Π² php.ini . ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π² $_FILES, Π½ΠΎ Π½Π° этот Ρ€Π°Π· ΡΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ структуру для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² массивС. Π Π΅ΡˆΠ°Π΅Ρ‚ΡΡ эта Π·Π°Π΄Π°Ρ‡Π° нСбольшими манипуляциями с массивом:

Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΏΠΎ URL ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ наши ссылки Ρ‡Π΅Ρ€Π΅Π· textarea с ΠΈΠΌΠ΅Π½Π΅ΠΌ name=»upload», Π³Π΄Π΅ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈΠ»ΠΈ с Π½ΠΎΠ²ΠΎΠΉ строки. Ѐункция preg_split Ρ€Π°Π·Π±Π΅Ρ€Ρ‘Ρ‚ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· $_POST[β€˜upload’] ΠΈ сформируСт массив, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ URL ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ FineUploader ΠΈΠ»ΠΈ jQuery FileUpload, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ.

Π”Π°Ρ‚Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ: 2010-10-19

БСгодня я Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ довольно популярной Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния Π½Π° сСрвСр. А Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния. Π’Π°ΠΊΠΆΠ΅ рассмотрим ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ качСства.

НСмного Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° сСрвСр срСдствами PHP

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сразу Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π² свою ΠΏΠ°ΠΏΠΊΡƒ. Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠ½ загруТаСтся Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ сСрвСра, Π° Π·Π°Ρ‚Π΅ΠΌ обрабатываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PHP ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€ΠΈΡ‚Π°Ρ‚ΠΎΡ€Π°. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡŽ сСссии Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» автоматичСски удаляСтся. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΌΡ‹ Π²Π½Π°Ρ‡Π°Π»Π΅ забрасываСм Ρ„Π°ΠΉΠ» Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ Π² Π½ΡƒΠΆΠ½ΡƒΡŽ.

$_FILES это массив Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Он ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„Π°ΠΉΠ»Π° picture):

$_FILES[β€˜ picture β€˜][β€˜name’] – настоящСС имя Ρ„Π°ΠΉΠ»Π°. НапримСр: image.jpg.

БСсплатный курс ΠΏΠΎ PHP ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ

ΠžΡΠ²ΠΎΠΉΡ‚Π΅ курс ΠΈ ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹ΠΉ сайт Π½Π° PHP ΠΈ MySQL с ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ нуля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ модСль MVC

Π’ курсС 39 ΡƒΡ€ΠΎΠΊΠΎΠ² | 15 часов Π²ΠΈΠ΄Π΅ΠΎ | исходники для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠΊΠ°

$_FILES[β€˜ picture β€˜][β€˜size’] – Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ….

$_FILES[β€˜ picture β€˜][β€˜type’] – MIME-Ρ‚ΠΈΠΏ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. НапримСр: image/gif, image/png, image/jpeg.

$_FILES[β€˜ picture β€˜][β€˜tmp_name’] – содСрТит имя Ρ„Π°ΠΉΠ»Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: /tmp/phpV3b3qY. ИмСнно этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСмСщСния Ρ„Π°ΠΉΠ»ΠΎΠ² послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

$_FILES[β€˜ picture β€˜][β€˜error’] – ΠΊΠΎΠ΄ ошибки.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°

Для Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° Ρ„ΠΎΡ€ΠΌΠ° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ enctype=»multipart/form-data» обязатСлСн для Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹. Π’Π΅Π³ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠΎΠ»Π΅ для Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ загруТаСтся Π½Π° сСрвСр.

Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌ потрСбуСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события – Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°. Π’Π½Π°Ρ‡Π°Π»Π΅ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½Π° настройка – ΠΏΡƒΡ‚ΡŒ сохранСния изобраТСния. МоТно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ прямой, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ. Π’ случаС POST запроса ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ. Π‘ΠΊΡ€ΠΈΠΏΡ‚ сообщит ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ – ΡƒΠ΄Π°Ρ‡Π½Π° ΠΎΠ½Π° ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Ѐункция copy, ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π°Π²Π΅Ρ€Π½ΠΎ догадались, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСсто Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅. ΠœΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ сСрвСра Π² Π½ΡƒΠΆΠ½ΡƒΡŽ, сохранив имя Ρ„Π°ΠΉΠ»Π°.

Договоримся, Ρ‡Ρ‚ΠΎ ΠΈ Ρ„ΠΎΡ€ΠΌΠ° ΠΈ Π΅Ρ‘ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ – upload.php.

Π˜Ρ‚ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅ΠΌ простой, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ скрипт. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π½Π° хостинг, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ i ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

Π›ΡŽΠ±Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° прСдставляСт для сайта ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. И особСнно Ρ„ΠΎΡ€ΠΌΠ° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ скрипт ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° сСрвСрС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π‘Π°ΠΌΡ‹Π΅ простыС ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ – Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°. Для этого ΡƒΠΊΠ°ΠΆΠ΅ΠΌ допустимыС Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€.

Π’ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π² Π²ΠΈΠ΄Π΅ массива:

Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°. Π’ случаС нСдопустимого Ρ‚ΠΈΠΏΠ° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ скрипта ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅. Ѐункция in_array провСряСт присутствиС значСния Π² массивС.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°. Π’ случаС нСдопустимого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ скрипта ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅.

Π˜Ρ‚ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΊΠΎΠΉ скрипт. Π‘ΠΊΡ€ΠΈΠΏΡ‚ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π±Π°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ. НСмного забСгая Π²ΠΏΠ΅Ρ€Ρ‘Π΄, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ $tmp_path – ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ PHP

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ ΠΊ самому интСрСсному, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ измСнСнию Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² изобраТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PHP. Для этого напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ resize. Π‘Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ качСство изобраТСния ΠΈ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

Π Π°Π·ΠΌΠ΅Ρ€ изобраТСния Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ исходя ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈΠ±ΠΎ эскиз ($type = 1), Π»ΠΈΠ±ΠΎ большоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ($type = 2).

Π˜Ρ‚Π°ΠΊ, шапка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ такая:

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ подставляСм Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ эскиза, Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΈ качСство ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. ΠŸΠΎΠΉΠ΄Ρ‘ΠΌ дальшС.

УстанавливаСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅. Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ абстрактной, Ссли Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ эти значСния Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎ высотС. Однако Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Π° такая ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

УстанавливаСм качСство изобраТСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (ΠΏΡ€ΠΈ $quality = null) Ρ€Π°Π²Π½Ρ‹ΠΌ 75%.

Π”Π°Π»Π΅Π΅ создаём ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. Для создания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π° (jpg, png ΠΈΠ»ΠΈ gif). Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ создания Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎ imagecreatefrom + Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°.

Если ΡƒΠΊΠ°Π·Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ $rotate, выполняСм ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния. Π”Π΅Π»Π°Π΅ΠΌ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ rotate(), ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ: ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, градусы, Ρ„ΠΎΠ½ изобраТСния для Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΡ пустых областСй, ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ пустыС области Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ, ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡƒΠ³ΠΎΠ» Π² 90, 180, 270 градусов.

БСсплатный курс ΠΏΠΎ PHP ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ

ΠžΡΠ²ΠΎΠΉΡ‚Π΅ курс ΠΈ ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹ΠΉ сайт Π½Π° PHP ΠΈ MySQL с ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ нуля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ модСль MVC

Π’ курсС 39 ΡƒΡ€ΠΎΠΊΠΎΠ² | 15 часов Π²ΠΈΠ΄Π΅ΠΎ | исходники для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠΊΠ°

Π”Π°Π»Π΅Π΅ опрСдСляСм высоту ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ изобраТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ imagesx ΠΈ imagesy.

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° (эскиз ΠΈΠ»ΠΈ большоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) устанавливаСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅.

Π”Π°Π»Π΅Π΅, Ссли ΡˆΠΈΡ€ΠΈΠ½Π° изобраТСния большС максимальной, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ прСобразования. Π˜Π½Π°Ρ‡Π΅ просто сохраняСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ. БохраняСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ imagejpeg. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, рассмотрСно сохранСниС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ jpg, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» всСгда ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ. УдаляСм изобраТСния ΠΈΠ· памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ imagedestroy.

Π’ качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ имя Ρ„Π°ΠΉΠ»Π°. Оно Π½Π°ΠΌ Π΅Ρ‰Ρ‘ понадобится.

ВСрнёмся ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ. Π’Π½Π°Ρ‡Π°Π»Π΅ вычисляСм ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΈ изобраТСния ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ изобраТСния.

Π”Π°Π»Π΅Π΅ создаём ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ (функция imagecreatetruecolor) с ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ ΠΈ высотой, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ шагС.

И ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ($src) Π² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданноС ($dest), измСняя Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. Ѐункция imagecopyresampled Π΄Π΅Π»Π°Π΅Ρ‚ это с пСрСсэмплированиСм, Ρ‡Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ качСство.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, сохраняСм ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π˜Ρ‚ΠΎΠ³ΠΎ, функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ прСобразования, выполняСт прСобразования, сохраняСт ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя изобраТСния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ.

ΠžΡ‚Π²Π΅Ρ‡Ρƒ Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π° вопрос Β«ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ сразу ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ?Β». МоТСм. Однако Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ для увСличСния Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ абстракции, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Ρ‹ ΠΆΠ΅ смоТСтС Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сайтах.

БовсСм Π·Π°Π±Ρ‹Π». ДобавляСм Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ строку:

Она ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ использована глобальная пСрСмСнная $tmp_path – ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅.

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ сразу послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ. А Ρ‚Π°ΠΊΠΆΠ΅ слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρƒ Ρ‡Π°ΡΡ‚ΡŒ скрипта, Π³Π΄Π΅ ΠΌΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ. Π’Ρ‹ вСдь Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ схСма Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ‚Π°ΠΊΠΎΠ²Π°: ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ β†’ врСмСнная ΠΏΠ°ΠΏΠΊΠ° сСрвСра β†’ наша врСмСнная ΠΏΠ°ΠΏΠΊΠ° β†’ конСчная ΠΏΠ°ΠΏΠΊΠ°. Π’ΠΎ Π΅ΡΡ‚ΡŒ, добавился Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚.

Для ΠΏΡƒΡ‰Π΅Π³ΠΎ вСсСлья Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π°ΡˆΡƒ Ρ„ΠΎΡ€ΠΌΡƒ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ поля для Π²Π²ΠΎΠ΄Π° градуса ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ:

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Блишком большой Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ»?

Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ.

ПослСсловиС

ЕстСствСнно, рассмотрСнный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ. Однако ΠΎΠ½ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ. Π§Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ, забросив скрипт Π½Π° сСрвСр ΠΈ создав ΠΏΠ°ΠΏΠΊΠΈ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΌΠΎΠΆΠ½ΠΎ бСсконСчно Π΄ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ условия ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, прСобразования, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ «водяной Π·Π½Π°ΠΊΒ».

Π˜Π΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – ΠΎΡΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ ΠΈ Π΄ΠΎΠΏΠΈΠ»ΠΈΡ‚ΡŒ Π΄ΠΎ своих Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ.

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Однако я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ для сСбя. Π’Π΅Π΄ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π˜Ρ‚Π°ΠΊ:

ВынСситС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ эскиза ($max_thumb_size) ΠΈ большого изобраТСния ($max_size) ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² настройки Ρ„Π°ΠΉΠ»Π°.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ повысит ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции.

ΠŸΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ограничиваСтся ΠΏΠΎ большСй сторонС, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρ„Π°ΠΉΠ» Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ ΠΈ исходный. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ gif, Ρ‚ΠΎ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½Π°Ρ копия Π±ΡƒΠ΄Π΅Ρ‚ gif.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ эскиз ΠΈ большой Ρ„Π°ΠΉΠ» Π·Π° ΠΎΠ΄Π½Ρƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ «водяной Π·Π½Π°ΠΊΒ».

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ бонусный ΠΊΠΎΠ΄, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Ρ„ΠΎΡ€ΠΌΡƒ Π²Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠ° ΠΎΠ±Ρ€Π΅Π·ΠΊΠΈ – квадратная ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ для сайта RootHelp.ru

ΠœΡ‹ являСмся Π²Π΅Π± рСсурсом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ прСдоставляСт качСствСнныС скрипты для сайта, с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ дальнСйшСй ΠΈΡ… ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

На нашСм сайтС Π’Ρ‹ смоТСтС Π½Π°ΠΉΡ‚ΠΈ, большоС количСство скриптов для сайта, ΡƒΡ€ΠΎΠΊΠΎΠ² ΠΏΠΎ Π²Π΅Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΈ Ρ‚.ΠΏ. Как Π’Ρ‹ поняли ΡƒΠΆΠ΅ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ сказанного, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ базируСмся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Π²Π΅Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ пытаСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для Вас Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, смоТСт ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π’Π°ΠΌ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ своих идСях ΠΏΠΎ созданию сайта.

Для изучСния ΡƒΡ€ΠΎΠΊΠΎΠ², Π½Π° сайтС прСдоставлСна ΠΊΠ°ΠΊ тСкстовая информация, Ρ‚Π°ΠΊ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡ€ΠΎΠΊΠ°Ρ… ΠΈ Π²ΠΈΠ΄Π΅ΠΎ информация. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π΄Π΅ΠΌΠΎ Ρ€Π΅ΠΆΠΈΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ скрипт ΠΈ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ сСбС исходник Π½Π° свой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° локальном сСрвСрС ΠΈΠ»ΠΈ сразу ΠΆΠ΅ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² свой сайт.

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

ПослС Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ обновлСния сайта, Π±Ρ‹Π»ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² структуру сайта нововвСдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ смогут ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΈ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π’Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈ ясно ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌ. НапримСр:

  • βœ” Π‘Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция кроссбраузСрности скриптов. Π’ основном, ΠΎΠ½Π° примСняСтся Π² катСгориях: JavaScript, JQuery ΠΈ CSS. Π’ Π½Π΅ΠΉ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ: Internet Explorer, Mozilla Firefox, Google Chrome, Opera ΠΈ Safari. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΈΠΊΠΎΠ½ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΊΡ€ΠΎΡΡΠ±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ скрипта.
  • βœ” Появилась удобная сортировка скриптов ΠΈ ΡƒΡ€ΠΎΠΊΠΎΠ², которая позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ, Π°Π²Ρ‚ΠΎΡ€Π°, количСство записСй Π½Π° страницС ΠΈΠ»ΠΈ просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ поиском, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡ‰Π΅Ρ‚ ΠΏΠΎ названию.
  • βœ” Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠΈΠΌΠΎ рСгистрации, ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° постоянныС выпуски скриптов ΠΈ ΡƒΡ€ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ кстати, Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ особСнными ΠΈ интСрСсными для постоянных Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π’Ρ‹ смоТСтС Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Выпуски Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π° Π² мСсяц.
  • βœ” РСгистрация ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ измСнилась ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ постСпСнно ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒΡΡ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ…, ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π»Π°ΠΉΠΊΠΈ, ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± Π°Π²Ρ‚ΠΎΡ€Π°Ρ…, Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΡΡ‚Π°Ρ‚ΡŒ самим Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ адрСс своСго сайта Π² настройках ΠΈ ссылка Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΊΠ°Π·Π°Ρ‚ΡŒ ΡƒΡ€ΠΎΠΊ ΠΈ ΠΌΡ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π΅ рассмотрим Π² блиТайшСС врСмя.

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΌΡ‹ полноцСнная ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ· Ρ‚Ρ€Π΅Ρ… постоянных Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ ΠΈ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ Вас своими ΡƒΡ€ΠΎΠΊΠ°ΠΌΠΈ ΠΈ скриптами!

WordPress. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ². Π§Π°ΡΡ‚ΡŒ 1. ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ: Web-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° β€’ CMS WoprdPress

Π’ WordPress Π΅ΡΡ‚ΡŒ мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². Π‘Ρ€Π°Π·Ρƒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Π½ΠΈΡ… Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ β€” названия ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» часто дублируСтся. Рассмотрим ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° сСрвСр сначала Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ части сайта. Для этого создадим ΠΏΠ»Π°Π³ΠΈΠ½ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π΅Π³ΠΎ постСпСнно ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС возмоТности WordPress ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ².

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния

ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС ΠΏΠ»Π°Π³ΠΈΠ½ просто Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ (year/month) Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /wp-content/uploads. Π—Π°ΠΏΠΈΡΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… wp_posts ΠΏΡ€ΠΈ этом Π½Π΅ добавляСтся, Ρ‚. Π΅. этот Ρ„Π°ΠΉΠ» Π½Π΅ являСтся Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ нСдоступСн для просмотра Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΌΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ΡΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π° выполняСт функция wp_handle_upload(), которая являСтся ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΎΠΉ для Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ php-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ move_uploaded_file().

<?php
/*
 * Plugin name: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²
 * Description: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния
 */

/*
 * ДобавляСм страницу ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния
 */
add_action('admin_menu', function () {
    add_menu_page(
        // содСрТимоС Ρ‚Π΅Π³Π° title этой страницы
        'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²',
        // Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню для этой страницы
        'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²',
        // ΠΏΡ€Π°Π²Π° доступа, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π» ΠΏΠΎΠΊΠ°Π·Π°Π½ этот ΠΏΡƒΠ½ΠΊΡ‚ мСню
        'upload_files',
        // ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ мСню (страницы)
        'tokmakov_upload_page',
        // функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС этой страницы
        function () {
            ?>
            <div>
                <h2>Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²</h2>
                <p>
                    Плагин позволяСт Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ <code>/wp-content/uploads</code>. 
                    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹, это Π½Π΅ влоТСния (attachments).
                    Записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ <code>wp_posts</code> Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ, поэтому Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅
                    ΠΌΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»ΠΎΠ² эти Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹.
                </p>
                <?php if (isset($_SESSION['tokmakov_upload_file'])): ?>
                    <p><?= $_SESSION['tokmakov_upload_file']; ?></p>
                    <?php unset($_SESSION['tokmakov_upload_file']); ?>
                <?php endif; ?>
                <?php
                $action = admin_url('admin-post.php');
                $redirect = $_SERVER['REQUEST_URI'];
                ?>
                <form action="<?= $action; ?>" method="post" enctype="multipart/form-data">
                    <?php wp_nonce_field('tokmakov_upload_file'); ?>
                    <input type="hidden" name="action" value="tokmakov_upload_file" />
                    <input type="hidden" name="redirect" value="<?= $redirect ?>" />
                    <input type="file" name="tokmakov_upload_file" required />
                    <input type="submit" value="Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»" />
                </form>
            </div>
            <?php
        },
        // ΠΈΠΊΠΎΠ½ΠΊΠ° для страницы настроСк ΠΏΠ»Π°Π³ΠΈΠ½Π°
        'dashicons-upload',
        // позиция страницы, Π² ΠΊΠΎΠ½Ρ†Π΅ списка
        90
    );
});

/*
 * ЗапускаСм сСссию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сообщСниС ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅
 * ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы
 */
add_action('init', function () {
    if (session_id() == '') {
        session_start();
    }
});

/*
 * ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи
 */
add_action('admin_post_tokmakov_upload_file', function () {
    // провСряСм Π·Π°Ρ‰ΠΈΡ‚Ρƒ nonce ΠΈ ΠΏΡ€Π°Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
    $check1 = wp_verify_nonce(
        $_POST['_wpnonce'],
        'tokmakov_upload_file'
    );
    $check2 = current_user_can('upload_files');
    ob_start();
    if ($check1 && $check2) {
        // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π°, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»
        $overrides = ['test_form' => false];
        $result = wp_handle_upload(
            $_FILES['tokmakov_upload_file'],
            $overrides
        );
        // ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°
        if (isset($result['error'])) {
            echo 'Ошибка ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π°';
        } else {
            echo 'Π€Π°ΠΉΠ» Π±Ρ‹Π» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½';
        }
    } else {
        echo 'ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π°, Ρ„Π°ΠΉΠ» Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½';
    }
    $_SESSION['tokmakov_upload_file'] = ob_get_clean();
    // послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ
    // ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ страницу
    $redirect = home_url();
    if (isset($_POST['redirect'])) {
        $redirect = $_POST['redirect'];
        $redirect = wp_validate_redirect($redirect, home_url());
    }
    wp_redirect($redirect);
    die();
});

Массив $_FILES, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅:

Array (
    [tokmakov_upload_file] => Array (
            [name] => sunrise. jpg
            [type] => image/jpeg
            [tmp_name] => D:\work\temp\phpED8F.tmp
            [error] => 0
            [size] => 490815
        )
)

И массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция wp_handle_upload() Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°:

Array
(
    [file] => D:/work/localhost24/www/wp-content/uploads/2019/08/sunrise.jpg
    [url] => http://www.host24.ru/wp-content/uploads/2019/08/sunrise.jpg
    [type] => image/jpeg
)

Если Ρ„Π°ΠΉΠ» Π½Π΅ Π±Ρ‹Π» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС:

Array
(
    [error] => Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, этот Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° нСдопустим ΠΏΠΎ сообраТСниям бСзопасности.
)

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ влоТСния (attachment)

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ„Π°ΠΉΠ» Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΌΡ‹ ΡƒΠΌΠ΅Π΅ΠΌ, посмотрим, ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Для этого достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ media_handle_upload() ΠΊΠ»ΡŽΡ‡ массива $_FILES, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. И функция сама Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ uploads ΠΈ создаст запись ΠΎ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ wp_posts Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

<?php
/*
 * Plugin name: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²
 * Description: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния
 */

/*
 * ДобавляСм страницу ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния
 */
add_action('admin_menu', function () {
    add_menu_page(
    // содСрТимоС Ρ‚Π΅Π³Π° title этой страницы
        'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²',
        // Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню для этой страницы
        'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²',
        // ΠΏΡ€Π°Π²Π° доступа, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π» ΠΏΠΎΠΊΠ°Π·Π°Π½ этот ΠΏΡƒΠ½ΠΊΡ‚ мСню
        'upload_files',
        // ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ мСню (страницы)
        'tokmakov_upload_page',
        // функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС этой страницы
        function () {
            ?>
            <div>
                <h2>Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²</h2>
                <p>
                    Плагин позволяСт Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ <code>/wp-content/uploads</code>.
                    ΠŸΡ€ΠΈ этом ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π‘Π” <code>wp_posts</code>, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹
                    ΡΠ²Π»ΡΡŽΡ‚ΡΡ влоТСниями ΠΈ доступны для просмотра Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΌΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»ΠΎΠ². 
                </p>
                <?php if (isset($_SESSION['tokmakov_upload_file'])): ?>
                    <p><?= $_SESSION['tokmakov_upload_file']; ?></p>
                    <?php unset($_SESSION['tokmakov_upload_file']); ?>
                <?php endif; ?>
                <?php
                $action = admin_url('admin-post.php');
                $redirect = $_SERVER['REQUEST_URI'];
                ?>
                <form action="<?= $action; ?>" method="post" enctype="multipart/form-data">
                    <?php wp_nonce_field('tokmakov_upload_file'); ?>
                    <input type="hidden" name="action" value="tokmakov_upload_file" />
                    <input type="hidden" name="redirect" value="<?= $redirect ?>" />
                    <input type="file" name="tokmakov_upload_file" required />
                    <input type="submit" value="Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»" />
                </form>
            </div>
            <?php
        },
        // ΠΈΠΊΠΎΠ½ΠΊΠ° для страницы настроСк ΠΏΠ»Π°Π³ΠΈΠ½Π°
        'dashicons-upload',
        // позиция страницы, Π² ΠΊΠΎΠ½Ρ†Π΅ списка
        90
    );
});

/*
 * ЗапускаСм сСссию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сообщСниС ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅
 * ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы
 */
add_action('init', function () {
    if (session_id() == '') {
        session_start();
    }
});

/*
 * ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи
 */
add_action('admin_post_tokmakov_upload_file', function () {
    // провСряСм Π·Π°Ρ‰ΠΈΡ‚Ρƒ nonce ΠΈ ΠΏΡ€Π°Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
    $check1 = wp_verify_nonce(
        $_POST['_wpnonce'],
        'tokmakov_upload_file'
    );
    $check2 = current_user_can('upload_files');
    ob_start();
    if ($check1 && $check2) {
        // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π°, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»
        $result = media_handle_upload('tokmakov_upload_file', 0);
        if (is_wp_error($result)) {
            echo 'Ошибка ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π°', PHP_EOL;
        } else {
            echo 'Π€Π°ΠΉΠ» Π±Ρ‹Π» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½', PHP_EOL;
        }
    } else {
        echo 'ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π°, Ρ„Π°ΠΉΠ» Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½';
    }
    $_SESSION['tokmakov_upload_file'] = ob_get_clean();
    // послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ
    // ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ страницу
    $redirect = home_url();
    if (isset($_POST['redirect'])) {
        $redirect = $_POST['redirect'];
        $redirect = wp_validate_redirect($redirect, home_url());
    }
    wp_redirect($redirect);
    die();
});

ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ². Для этого Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ multiple для элСмСнта Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Β«ΡΠΊΠ°Ρ€ΠΌΠ»ΠΈΠ²Π°Ρ‚ΡŒΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ wp_handle_upload() ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ Π·Π° Ρ€Π°Π·:

<?php
/*
 * Plugin name: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²
 * Description: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния
 */

/*
 * ДобавляСм страницу ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния
 */
add_action('admin_menu', function () {
    add_menu_page(
    // содСрТимоС Ρ‚Π΅Π³Π° title этой страницы
        'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²',
        // Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню для этой страницы
        'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²',
        // ΠΏΡ€Π°Π²Π° доступа, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π» ΠΏΠΎΠΊΠ°Π·Π°Π½ этот ΠΏΡƒΠ½ΠΊΡ‚ мСню
        'upload_files',
        // ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ мСню (страницы)
        'tokmakov_upload_page',
        // функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС этой страницы
        function () {
            ?>
            <div>
                <h2>Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²</h2>
                <p>
                    Плагин позволяСт Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ <code>/wp-content/uploads</code>. 
                    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹, это Π½Π΅ влоТСния (attachments).
                    Записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ <code>wp_posts</code> Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ, поэтому Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅
                    ΠΌΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»ΠΎΠ² эти Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹.
                </p>
                <?php if (isset($_SESSION['tokmakov_upload_file'])): ?>
                    <ul>
                    <?php foreach ($_SESSION['tokmakov_upload_file'] as $message): ?>
                        <li><?= $message; ?></li>
                    <?php endforeach; ?>
                    </ul>
                    <?php unset($_SESSION['tokmakov_upload_file']); ?>
                <?php endif; ?>
                <?php
                $action = admin_url('admin-post.php');
                $redirect = $_SERVER['REQUEST_URI'];
                ?>
                <form action="<?= $action; ?>" method="post" enctype="multipart/form-data">
                    <?php wp_nonce_field('tokmakov_upload_file'); ?>
                    <input type="hidden" name="action" value="tokmakov_upload_file" />
                    <input type="hidden" name="redirect" value="<?= $redirect ?>" />
                    <input type="file" name="tokmakov_upload_file[]" multiple required />
                    <input type="submit" value="Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹" />
                </form>
            </div>
            <?php
        },
        // ΠΈΠΊΠΎΠ½ΠΊΠ° для страницы настроСк ΠΏΠ»Π°Π³ΠΈΠ½Π°
        'dashicons-upload',
        // позиция страницы, Π² ΠΊΠΎΠ½Ρ†Π΅ списка
        90
    );
});

/*
 * ЗапускаСм сСссию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сообщСниС ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅
 * ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы
 */
add_action('init', function () {
    if (session_id() == '') {
        session_start();
    }
});

/*
 * ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи
 */
add_action('admin_post_tokmakov_upload_file', function () {
    // провСряСм Π·Π°Ρ‰ΠΈΡ‚Ρƒ nonce ΠΈ ΠΏΡ€Π°Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
    $check1 = wp_verify_nonce(
        $_POST['_wpnonce'],
        'tokmakov_upload_file'
    );
    $check2 = current_user_can('upload_files');
    if ($check1 && $check2) {
        // ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ
        $messages = [];
        $overrides = ['test_form' => false];
        foreach ($_FILES['tokmakov_upload_file']['name'] as $i => $v) {
            $file = [
                'name' => $_FILES['tokmakov_upload_file']['name'][$i],
                'type' => $_FILES['tokmakov_upload_file']['type'][$i],
                'tmp_name' => $_FILES['tokmakov_upload_file']['tmp_name'][$i],
                'error' => $_FILES['tokmakov_upload_file']['error'][$i],
                'size' => $_FILES['tokmakov_upload_file']['size'][$i],
            ];
            // Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ uploads
            $result = wp_handle_upload($file, $overrides);
            // ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°
            if (isset($result['error'])) {
                $messages[] = 'Ошибка ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π° ' .  $file['name'];
            } else {
                $messages[] = 'Π€Π°ΠΉΠ» ' . $file['name'] . ' ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½';
            }
        }
    } else {
        $messages[] = 'ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π°, Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹';
    }
    $_SESSION['tokmakov_upload_file'] = $messages;
    // послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ
    // ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ страницу
    $redirect = home_url();
    if (isset($_POST['redirect'])) {
        $redirect = $_POST['redirect'];
        $redirect = wp_validate_redirect($redirect, home_url());
    }
    wp_redirect($redirect);
    die();
});

Массив $_FILES, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…:

Array (
    [tokmakov_upload_file] => Array (
            [name] => Array (
                    [0] => sunrise-1.jpg
                    [1] => sunrise-2.jpg
                    [2] => sunrise-3.jpg
                )
            [type] => Array (
                    [0] => image/jpeg
                    [1] => image/jpeg
                    [2] => image/jpeg
                )
            [tmp_name] => Array (
                    [0] => D:\work\temp\phpC9BC. tmp
                    [1] => D:\work\temp\phpC9CC.tmp
                    [2] => D:\work\temp\phpC9CD.tmp
                )
            [error] => Array (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                )
            [size] => Array (
                    [0] => 490815
                    [1] => 161294
                    [2] => 207875
                )
        )
)

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ (attachments)

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ media_handle_upload() ΡƒΠΆΠ΅ Π½Π΅ получится. Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с массивом $_FILES ΠΈ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ индСкс массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π΅. ΠŸΡ€ΠΈ этом функция Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нСсколькими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π—Π΄Π΅ΡΡŒ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ функция media_handle_sideload(). Π‘ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈ Β«ΡΠΊΠ°Ρ€ΠΌΠ»ΠΈΠ²Π°Ρ‚ΡŒΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ media_handle_sideload() ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ.

<?php
/*
 * Plugin name: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²
 * Description: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния
 */

/*
 * ДобавляСм страницу ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния
 */
add_action('admin_menu', function () {
    add_menu_page(
    // содСрТимоС Ρ‚Π΅Π³Π° title этой страницы
        'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²',
        // Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню для этой страницы
        'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²',
        // ΠΏΡ€Π°Π²Π° доступа, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π» ΠΏΠΎΠΊΠ°Π·Π°Π½ этот ΠΏΡƒΠ½ΠΊΡ‚ мСню
        'upload_files',
        // ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ мСню (страницы)
        'tokmakov_upload_page',
        // функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС этой страницы
        function () {
            ?>
            <div>
                <h2>Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²</h2>
                <p>
                    Плагин позволяСт Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ <code>/wp-content/uploads</code>.
                    ΠŸΡ€ΠΈ этом ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π‘Π” <code>wp_posts</code>, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹
                    ΡΠ²Π»ΡΡŽΡ‚ΡΡ влоТСниями ΠΈ доступны для просмотра Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΌΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»ΠΎΠ². 
                </p>
                <?php if (isset($_SESSION['tokmakov_upload_file'])): ?>
                    <ul>
                    <?php foreach ($_SESSION['tokmakov_upload_file'] as $message): ?>
                        <li><?= $message; ?></li>
                    <?php endforeach; ?>
                    </ul>
                    <?php unset($_SESSION['tokmakov_upload_file']); ?>
                <?php endif; ?>
                <?php
                $action = admin_url('admin-post.php');
                $redirect = $_SERVER['REQUEST_URI'];
                ?>
                <form action="<?= $action; ?>" method="post" enctype="multipart/form-data">
                    <?php wp_nonce_field('tokmakov_upload_file'); ?>
                    <input type="hidden" name="action" value="tokmakov_upload_file" />
                    <input type="hidden" name="redirect" value="<?= $redirect ?>" />
                    <input type="file" name="tokmakov_upload_file[]" multiple required />
                    <input type="submit" value="Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹" />
                </form>
            </div>
            <?php
        },
        // ΠΈΠΊΠΎΠ½ΠΊΠ° для страницы настроСк ΠΏΠ»Π°Π³ΠΈΠ½Π°
        'dashicons-upload',
        // позиция страницы, Π² ΠΊΠΎΠ½Ρ†Π΅ списка
        90
    );
});

/*
 * ЗапускаСм сСссию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сообщСниС ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅
 * ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы
 */
add_action('init', function () {
    if (session_id() == '') {
        session_start();
    }
});

/*
 * ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи
 */
add_action('admin_post_tokmakov_upload_file', function () {
    // провСряСм Π·Π°Ρ‰ΠΈΡ‚Ρƒ nonce ΠΈ ΠΏΡ€Π°Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
    $check1 = wp_verify_nonce(
        $_POST['_wpnonce'],
        'tokmakov_upload_file'
    );
    $check2 = current_user_can('upload_files');
    if ($check1 && $check2) {
        // ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ
        $messages = [];
        foreach ($_FILES['tokmakov_upload_file']['name'] as $i => $v) {
            $file = [
                'name' => $_FILES['tokmakov_upload_file']['name'][$i],
                'type' => $_FILES['tokmakov_upload_file']['type'][$i],
                'tmp_name' => $_FILES['tokmakov_upload_file']['tmp_name'][$i],
                'error' => $_FILES['tokmakov_upload_file']['error'][$i],
                'size' => $_FILES['tokmakov_upload_file']['size'][$i],
            ];
            // Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ uploads
            $result = media_handle_sideload($file, 0);
            // ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°
            if (is_wp_error($result)) {
                $messages[] = 'Ошибка ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π° ' .  $file['name'];
            } else {
                $messages[] = 'Π€Π°ΠΉΠ» ' . $file['name'] . ' ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½';
            }
        }
    } else {
        $messages[] = 'ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π°, Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹';
    }
    $_SESSION['tokmakov_upload_file'] = $messages;
    // послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ
    // ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ страницу
    $redirect = home_url();
    if (isset($_POST['redirect'])) {
        $redirect = $_POST['redirect'];
        $redirect = wp_validate_redirect($redirect, home_url());
    }
    wp_redirect($redirect);
    die();
});

Π’ случаС ошибки ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π° функция media_handle_sideload() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

WP_Error Object (
    [errors] => Array (
            [upload_error] => Array
                (
                    [0] => Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, этот Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° нСдопустим ΠΏΠΎ сообраТСниям бСзопасности.
                )
        )
    [error_data] => Array ()
)

Если Ρ„Π°ΠΉΠ» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ влоТСния.

Поиск: Web-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Β β€’ WordPressΒ β€’ Π€Π°ΠΉΠ»Β β€’ Π€ΠΎΡ€ΠΌΠ°Β β€’ Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°Β β€’ UploadΒ β€’ FileΒ β€’ wp_handle_uploadΒ β€’ media_handle_uploadΒ β€’ CMSΒ β€’ POST

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² β€” ДокумСнтация Flask (русский ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄) 0.10.1

Ну Π΄Π°, старая добрая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². Основная ΠΌΡ‹ΡΠ»ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΡ‡Π΅Π½ΡŒ проста. Π’ ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ:

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Начнём с ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Π’ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΎ нашСго прилоТСния:

import os
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename

UPLOAD_FOLDER = '/path/to/the/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ΅Ρ€ΠΈΡŽ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ². Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ понятна, werkzeug.secure_filename() рассматриваСтся Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅. UPLOAD_FOLDER — это ΠΏΡƒΡ‚ΡŒ, ΠΊΡƒΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Ρ„Π°ΠΉΠ»Ρ‹, Π° ALLOWED_EXTENSIONS — это Π½Π°Π±ΠΎΡ€ допустимых Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ для URL. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ, Π½ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это сСйчас? ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π΅Π±-сСрвСр (ΠΈΠ»ΠΈ наш сСрвСр прилоТСния) ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° для связывания URL с этими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΈ список допустимых Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ? НавСрноС Π²Π°ΠΌ совсСм Π½Π΅ хочСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Ссли сСрвСр Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ отправляСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ загрузят Ρ„Π°ΠΉΠ»Ρ‹ HTML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ XSS (см. Cross-Site Scripting (xss) — мСТсайтовый скриптинг). Π’Π°ΠΊΠΆΠ΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .php, Ссли сСрвСр ΠΈΡ… выполняСт. ΠŸΡ€Π°Π²Π΄Π°, ΠΊΠΎΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ PHP Π½Π° сСрвСрС? πŸ™‚

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция провСряСт, Ρ‡Ρ‚ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° допустимо, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΈ пСрСнаправляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° URL с Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ:

def allowed_file(filename):
    return '. ' in filename and \
           filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('uploaded_file',
                                    filename=filename))
    return '''
    <!doctype html>
    <title>Upload new File</title>
    <h2>Upload new File</h2>
    <form action="" method=post enctype=multipart/form-data>
      <p><input type=file name=file>
         <input type=submit value=Upload>
    </form>
    '''

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ функция secure_filename()? ΠœΡ‹ исходим ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Β«Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ довСряй Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Π²Ρ‘Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΒ». Π­Ρ‚ΠΎ справСдливо ΠΈ для ΠΈΠΌΠ΅Π½ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ВсС ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ имя Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. БСйчас Π³Π»Π°Π²Π½ΠΎΠ΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ: всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для получСния бСзопасного ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, Ссли ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» прямо Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ для ΠΏΡ€ΠΎΡ„ΠΈ

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π°ΠΌ интСрСсно, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ функция secure_filename() ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ нСльзя ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· Π΅Ρ‘ использования? ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°:

filename = "../../../../home/username/.bashrc"

Если ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ../ — это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΈ соСдинСнии этого ΠΈΠΌΠ΅Π½ΠΈ с UPLOAD_FOLDER, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС сСрвСра Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. НуТно Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² устройствС вашСго прилоТСния, Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΌΠ½Π΅, Ρ…Π°ΠΊΠ΅Ρ€Ρ‹ настойчивы πŸ™‚

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция:

>>> secure_filename('. ./../../../home/username/.bashrc')
'home_username_.bashrc'

ΠžΡΡ‚Π°Π»Π°ΡΡŒ послСдняя Π²Π΅Ρ‰ΡŒ: обслуТиваниС Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Начиная с Flask 0.5 для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

from flask import send_from_directory

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename)

Другая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ — Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ uploaded_file с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π°Π²ΠΈΠ»Π° build_only ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ SharedDataMiddleware. Π’Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ старых вСрсиях Flask:

from werkzeug import SharedDataMiddleware
app.add_url_rule('/uploads/<filename>', 'uploaded_file',
                 build_only=True)
app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
    '/uploads':  app.config['UPLOAD_FOLDER']
})

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, всё Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ.

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² вСрсии 0. 6.

Как Π½Π° самом Π΄Π΅Π»Π΅ Flask ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ? Если Ρ„Π°ΠΉΠ» достаточно ΠΌΠ°Π», ΠΎΠ½ сохраняСтся Π² памяти Π²Π΅Π±-сСрвСра. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ помСщаСтся Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ мСсто (Ρ‚ΡƒΠ΄Π°, ΠΊΡƒΠ΄Π° ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ tempfile.gettempdir()). Но ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π°? По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Flask Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ настройкой ΠΊΠ»ΡŽΡ‡Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ MAX_CONTENT_LENGTH:

from flask import Flask, Request

app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024

Код Π²Ρ‹ΡˆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° 16 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°ΠΌΠΈ. Если ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» окаТСтся большС, Flask сгСнСрируСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ RequestEntityTooLarge.

Π­Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎ Flask 0.6, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ наслСдовании ΠΎΡ‚ класса request. Π—Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Werkzeug ΠΎΠ± ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ².

Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ процСсса Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΌΠ΅Π»ΠΊΠΈΠΌΠΈ частями, ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ JavaScript ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ сСрвСра ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 5 сСкунд, сколько ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ. ΠŸΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΈ ΠΈΡ€ΠΎΠ½ΠΈΡŽ ситуации? ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ сСрвСра ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ ΠΈ Ρ‚Π°ΠΊ Π·Π½Π°Π΅Ρ‚.

БСйчас ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ способы ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹. Π’ послСднСС врСмя Π² Π²Π΅Π±Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ измСнилось ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HTML5, Java, Silverlight ΠΈΠ»ΠΈ Flash, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ со стороны ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ для этого:

Π‘Π»ΠΎΠ³ web-мастСра Β» Архив сайта Β» Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСр с использованиСм CURL

22 Π‘Π΅Π½Ρ‚ΡΠ±Ρ€ΡŒ 2008, 12:46

Для HTTP запроса Ρ‚ΠΈΠΏΠ° POST сущСствуСт Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ· HTML Ρ„ΠΎΡ€ΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ application/x-www-form-urlencoded ΠΈ multipart/form-data. Алгоритм ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° создавался Π΄Π°Π²Π½Ρ‹ΠΌ-Π΄Π°Π²Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π² языкС HTML Π΅Ρ‰Π΅ Π½Π΅ прСдусматривали Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· HTML Ρ„ΠΎΡ€ΠΌΡ‹.

Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΡ‚ΡΡ‹Π»Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹. Π’ΠΎΠ³Π΄Π° консорциум W3C взялся Π·Π° Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° POST запроса. К Ρ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡƒΠΆΠ΅ достаточно ΡˆΠΈΡ€ΠΎΠΊΠΎ примСнялся Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ MIME (Multipurpose Internet Mail Extensions β€” ΠΌΠ½ΠΎΠ³ΠΎΡ†Π΅Π»Π΅Π²Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° для формирования Mail сообщСний), поэтому, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ вСлосипСд Π·Π°Π½ΠΎΠ²ΠΎ, Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° формирования сообщСний для создания POST запросов Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ HTTP.

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ multipart/form-data ΠΎΡ‚ application/x-www-form-urlencoded Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Π»ΠΎ запроса Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ (boundary). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свой собствСнный Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ для описания Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π΅ΠΌ хранятся, Ρ‚.Π΅. Π² ΠΎΠ΄Π½ΠΎΠΌ запросС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (ΠΊΠ°ΠΊ Π² Ρ‚Π΅Π»Π΅ письма ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с тСкстом ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹).

Π­Ρ‚ΠΎ тСория. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ CURL ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π° сСрвСр POST-запрос Ρ‚ΠΈΠΏΠ° multipart/form-data:

<?php
$upload = ‘image.gif’;
$postdata = array( ‘name’ => ‘evgenijj’,
Β  Β  Β  Β  Β  Β  Β  Β  Β  Β ’email’ => ‘evgenijj@mail. ru’,
Β  Β  Β  Β  Β  Β  Β  Β  Β  Β ‘message’ => ‘КакоС-Ρ‚ΠΎ сообщСниС ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ evgenijj’,
Β  Β  Β  Β  Β  Β  Β  Β  Β  Β ‘upload’ => «@».$upload );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, ‘http://server.com/getfile.php’);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_exec($ch);
curl_close($ch);
?>

Π€Π°ΠΉΠ» getfile.php Π½Π° сСрвСрС http://server.com:

<?php
print_r( $_POST );
print_r( $_FILES );
move_uploaded_file ( $_FILES[‘upload’][‘tmp_name’], ‘image.gif’ );
?>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

Array
(
Β  Β  [name] => evgenijj
Β  Β  [email] => [email protected]
Β  Β  [message] => КакоС-Ρ‚ΠΎ сообщСниС ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ evgenijj
)
Array
(
Β  Β  [upload] => Array
Β  Β  Β  Β  (
Β  Β  Β  Β  Β  Β  [name] => image. gif
Β  Β  Β  Β  Β  Β  [type] => image/gif
Β  Β  Β  Β  Β  Β  [tmp_name] => C:\WINDOWS\TEMP\php71.tmp
Β  Β  Β  Β  Β  Β  [error] => 0
Β  Β  Β  Β  Β  Β  [size] => 100405
Β  Β  Β  Β  )

)
Array
(
Β  Β  [url] => http://localhost1/getfile.php
Β  Β  [content_type] => text/html
Β  Β  [http_code] => 200
Β  Β  [header_size] => 193
Β  Β  [request_size] => 193
Β  Β  [filetime] => -1
Β  Β  [ssl_verify_result] => 0
Β  Β  [redirect_count] => 0
Β  Β  [total_time] => 2.063
Β  Β  [namelookup_time] => 0
Β  Β  [connect_time] => 0
Β  Β  [pretransfer_time] => 0
Β  Β  [size_upload] => 100943
Β  Β  [size_download] => 349
Β  Β  [speed_download] => 169
Β  Β  [speed_upload] => 48930
Β  Β  [download_content_length] => 349
Β  Β  [upload_content_length] => 100943
Β  Β  [starttransfer_time] => 2
Β  Β  [redirect_time] => 0
)

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚: Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ΅ PHPCLUB.RU встСтил ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Ρ„Π°ΠΉΠ»Π° β€” ΠΈΠ½Π°Ρ‡Π΅ CURL Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ failed creating formpost data.

Бсылки ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅:

PHP: ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² — Руководство

Если «Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 50 ΠΈΠ»ΠΈ 100 ΠœΠ‘) Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ вашС исходящСС соСдинСниС с сСрвСром Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ, ΠΈ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΡ‚Π΅Ρ‡ΡŒ Π½Π΅ «Π²Ρ€Π΅ΠΌΡ выполнСния», Π° «Π²Ρ€Π΅ΠΌΡ Π²Π²ΠΎΠ΄Π°», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² нашСй систСмС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 60 сСкунд. Π’ нашСм случаС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° большого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ 1-2 часа.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρƒ нас Π±Ρ‹Π»ΠΈ «настройки сСанса», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

1) Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ эти ini-записи:

* session.gc_maxlifetime
* max_input_time
* max_execution_time
* upload_max_filesize
* post_max_size

2) По-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ удаСтся? ΠžΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎ, Π½Π΅ всС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ· самого скрипта. ini_set () ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ здСсь:
http://www.php.net/manual/es/ini.list.php

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ «upload_max_filesize» срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ — это PHP_INI_PERDIR, Π° Π½Π΅ PHP_INI_ALL. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ использованиС ini_set ():
http://www.php.net/manual/en/configuration.changes.modes.php

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ вмСсто Π½Π΅Π³ΠΎ .htaccess.

3) По-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ?. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ «.htaccess», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ настройки php. Π­Ρ‚ΠΎ сдСлано Π² Ρ„Π°ΠΉΠ»Π΅ apache. Π’Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ AllowOverride.

Π‘ΠΌ. Π—Π΄Π΅ΡΡŒ:
http://www.php.net/manual/en/configuration.changes.php

Π’Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ это Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ссли ваши мастСр-Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ с AllowOverride None.

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

Π’ зависимости ΠΎΡ‚ систСмы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ «Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²», Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π²Π²Π΅Ρ€Ρ… ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ apache.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²:

Они Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ для мСня, для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ 100 ΠœΠ‘, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ 2 часа:

Π’ apache-virtual-host:
——————— —————————————

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ AllowOverride

—————————————— ——————

In . htaccess:
————————— ———————————
php_value session.gc_maxlifetime 10800
php_value max_input_time 10800
php_value max_execution_time 10800
php_value upload_max_filesize 110M
php_value post_max_size 120M
——————————————— —————

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅
— Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 1-2 часов я даю 3 часа (3600×3)
— ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ 100 ΠœΠ‘, я Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽ Π²ΠΎΠ·Π΄ΡƒΡ… Π²Ρ‹ΡˆΠ΅ для Ρ„Π°ΠΉΠ» (110M) ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС для всСго сообщСния (120M).

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ изобраТСния Π² ΠΌΠ΅Π΄ΠΈΠ°Ρ‚Π΅ΠΊΡƒ WordPress послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² PHP

Когда Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· административной области WordPress, ΠΎΠ½ΠΈ автоматичСски ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² МСдиа> Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Но Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для посСтитСлСй вашСго сайта?

Π£ΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ изобраТСния ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ° WordPress ΠΏΡ€ΠΎΡ‰Π΅.
ВсС Ρ„ΠΎΡ‚ΠΎ Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ сдСланы ΠΌΠ½ΠΎΠΉ Π½Π° ΠΊΡƒΡ€ΠΎΡ€Ρ‚Π΅ Π ΠΎΠ·Π° Π₯ΡƒΡ‚ΠΎΡ€.

Π¨Π°Π³ 1.

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с HTML-Ρ„ΠΎΡ€ΠΌΡ‹
 
Π’Π°ΡˆΠ° фотография:

Π§Ρ‚ΠΎ здСсь Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ?

  • Π― помСстил Ρ„Π°ΠΉΠ» PHP process_upload.php Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ‚Π΅ΠΌΡ‹, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ внСсти измСнСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° Π² строкС 4 (я имСю Π² Π²ΠΈΠ΄Ρƒ ΠΊΠΎΠ΄ Π½Π° шагС 2).
  • Π€ΠΎΡ€ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ enctype = "multipart / form-data" .МногиС ΠΎΠ± этом Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡˆΠΎΡ€Ρ‚ΠΊΠΎΠ΄ для этой Ρ„ΠΎΡ€ΠΌΡ‹, просто Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ» functions.php :

 add_shortcode ('misha_uploader', 'misha_uploader_callback');

function misha_uploader_callback () {
return '
'/process_upload.php" method = "post" enctype = "multipart / form-data"> Π’Π°ΡˆΠ° фотография:
'; }

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ [misha_uploader] Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅.

Π¨Π°Π³ 2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² PHP ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… WordPress.

Π­Ρ‚ΠΎ Ρ„Π°ΠΉΠ» process_upload.php , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Ρ€Π΅ΡˆΠΈΠ» ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² ΠΌΠΎΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ‚Π΅ΠΌ.

  '/'. $ profilepicture ['имя'];
$ new_file_mime = mime_content_type ($ profilepicture ['tmp_name']);

Ссли (пусто ($ profilepicture))
die ('Π€Π°ΠΉΠ» Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½.');

if ($ profilepicture ['ошибка'])
die ($ profilepicture ['ошибка']);

Ссли ($ profilepicture ['Ρ€Π°Π·ΠΌΠ΅Ρ€']> wp_max_upload_size ())
die («Оно слишком Π²Π΅Π»ΠΈΠΊΠΎ, Ρ‡Π΅ΠΌ оТидалось.Β»);

Ссли (! in_array ($ new_file_mime, get_allowed_mime_types ()))
die ('WordPress Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ этот Ρ‚ΠΈΠΏ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.');

while (file_exists ($ new_file_path)) {
$ i ++;
$ new_file_path = $ wordpress_upload_dir ['ΠΏΡƒΡ‚ΡŒ']..] + $ / ',' ', $ profilepicture [' name ']),
'post_content' => '',
'post_status' => 'Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ'
), $ new_file_path);

// wp_generate_attachment_metadata () Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ этот Ρ„Π°ΠΉΠ»
require_once (ABSPATH. 'wp-admin / includes / image.php');

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ сохранСниС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… влоТСния Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…
wp_update_attachment_metadata ($ upload_id, wp_generate_attachment_metadata ($ upload_id, $ new_file_path));

// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅
wp_redirect ($ wordpress_upload_dir ['url']. '/'. базовоС имя ($ new_file_path));

} 

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wp_insert_attachment () Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ поста ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ этого поста с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ set_post_thumbnail () .

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ сообщСния

Миша Рудрастых

Π― ΠΎΡ‡Π΅Π½ΡŒ люблю WordPress, WooCommerce ΠΈ Gutenberg. 12 Π»Π΅Ρ‚ ΠΎΠΏΡ‹Ρ‚Π°.

НуТна ΠΏΠΎΠΌΠΎΡ‰ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°? Π‘Π²ΡΠ·Π°Ρ‚ΡŒΡΡ

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ скорости Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сайта | Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΎΠΏΡ‹Ρ‚Π°

Π­Ρ‚ΠΎ гостСвой пост, прСдоставлСнный Cloudinary, ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌ сСрвисом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт комплСксноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для управлСния изобраТСниями ΠΈ Π²ΠΈΠ΄Π΅ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, администрированиС, ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ доставку.Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎΠ± ΠΈΡ… возмоТностях Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ PHP здСсь.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, особСнно Π² большом ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нСэффСктивна, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Компании ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π΅Π»ΠΎ с большим количСством ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° своих Π²Π΅Π±-сайтах, особСнно ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ элСктронной ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠΈ, ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. НСбольшиС Π²Π΅Π±-сайты с нСбольшим количСством ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π½ΠΎ Π²Π°ΠΌ стоит ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ структуры кодирования для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

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

БущСствуСт нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ PHP, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ создаСт ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Π°ΠΌ просто Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π·Π° Ρ€Π°Π· Π² Ρ„ΠΎΡ€ΠΌΡƒ, которая выполняСт сцСнарий PHP для автоматичСского Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ изобраТСния Π½Π° свой сайт.

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ваш сайт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ изобраТСниями всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… совСтов ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ большого количСства ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° ваш Π²Π΅Π±-сайт. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ эти ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π²Π΅Π±-сайта.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСти доставки ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

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

Одна ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для управлСния изобраТСниями, — это Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° хостинг Π² сСти доставки ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° (CDN). CDN — это, ΠΏΠΎ сути, глобально распрСдСлСнная ΡΠ΅Ρ‚ΡŒ сСрвСров. Когда ΠΊΡ‚ΠΎ-Ρ‚ΠΎ просматриваСт ваш сайт, CDN направляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° блиТайший ΠΊ Π½Π΅ΠΌΡƒ сСрвСр, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… страниц Π·Π° счСт ускорСния доставки ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ ΠΏΠ°Π»ΡŒΡ†Π΅Π² ΠΊ URL-адрСсам ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ сохраняСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ копию ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° вашСм сайтС Π² Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… посСтитСлСй, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… посСщСниях. МногиС Π²Π΅Π±-мастСра остороТно подходят ΠΊ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ·-Π·Π° опасСний, Ρ‡Ρ‚ΠΎ Ссли ΠΎΠ½ΠΈ обновят свои изобраТСния, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ старыС изобраТСния вмСсто ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ….

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ эту ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ вашСго Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° автоматичСски Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ…ΡΡˆ MD5 всСх Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΊ ΠΈΡ… URL-адрСсам ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.MD5 — это, ΠΏΠΎ сути, ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ ΠΏΠ°Π»ΡŒΡ†Π° изобраТСния. Когда ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ измСняСтся, Ρ‚ΠΎ ΠΆΠ΅ самоС происходит с MD5 ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, с URL-адрСсом изобраТСния, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ обновляСтС изобраТСния, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π‘Π΄Π΅Π»Π°Π² этот нСбольшой шаг, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ срок хранСния кэша ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΡ‡Π΅Π½ΡŒ ΠΎΡ‚Π΄Π°Π»Π΅Π½Π½ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ изобраТСния ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ посСщСнии, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ быстроС врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с использованиСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ слуТат ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ цСлям Π½Π° вашСм сайтС — Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ взаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ лишнюю ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ваши дСньги.

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ PNG ΠΊΠ°ΠΊ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² качСствС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠ΅ΠΉ JPEG ΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠ΅ΠΉ PNG, Π½ΠΎ послСдний Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ изобраТСниям с ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тратят ΠΌΠ½ΠΎΠ³ΠΎ пропускной способности. ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ PNG Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠΎΠ², Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ.

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π²Π΅Π±-сайта увСличиваСтся, Ссли Π²Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подходящиС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ для всСх Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.ВсСгда ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы.

ЭкспСримСнт со стандартами качСства изобраТСния

НСсмотря Π½Π° Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ прСдоставлСния посСтитСлям Π²Π΅Π±-сайта ΠΊΡ€ΠΈΡΡ‚Π°Π»ΡŒΠ½ΠΎ чистых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π²Π°ΠΌ всС ΠΆΠ΅ слСдуСт ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ качСства, особСнно ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ JPEG. Часто сущСствуСт нСбольшая Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ JPEG с качСством 95% ΠΈ 75%, Π½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: ΠŸΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ИспользованиС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ со слишком высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ качСства ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ эффСкту, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌΡƒ Ρ‚ΠΎΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ взаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ваш сайт замСдляСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ высококачСствСнныС изобраТСния ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ. НСбольшоС сниТСниС качСства Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ изобраТСния часто стоит прСимущСства ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π΅Π±-сайта.

Π—Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ свой PHP Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ PHP Π½Π° ваш сайт ΠΈΠ»ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ — ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ способ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ большого количСства ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ остороТны с ΡƒΠ³Ρ€ΠΎΠ·Π°ΠΌΠΈ бСзопасности.Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… способов ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ PHP:

  • Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ jpg, jpeg, gif ΠΈ png.
  • УстановитС ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ PHP.
  • Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² слишком ΠΌΠ°Π», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΠΊΠΈΠ±Π΅Ρ€Π°Ρ‚Π°ΠΊΠΈ.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ сцСнарий бСзопасной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ PHP, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ этот Π½Π° Github.

Установка максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π° Ρ‚Π°ΠΊΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ случайно Π½Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ большиС изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Π±-сайта.НапримСр, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° страницы с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 25 ΠœΠ‘ Π² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ‡Π΅Ρ€Π΅Π· 3G-соСдинСниС Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ (срСдняя ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ 4,3 ΠœΠ±ΠΈΡ‚ / с).

Π‘ΠΆΠ°Ρ‚ΡŒ Π”ΠΎ Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ

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

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ качСства, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ сТатиС с потСрями сниТаСт качСство.Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сТатия ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ: большСС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния ΠΈ Π±ΠΎΠ»Π΅Π΅ высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сайта ΠΈΠ·-Π·Π° сТатия с потСрями ΠΈΠ»ΠΈ нСбольшоС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сайта Π±Π΅Π· сниТСния качСства изобраТСния ΠΈΠ·-Π·Π° сТатия Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ.

Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСния ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅

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

ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Π°ΡˆΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ‚Π΅Π³ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, ΠΈ Π²Ρ‹ смоТСтС ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ всСм ΠΏΠΎΡΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Π½Π΅ трСбуя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эти Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ выясняли, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ваши Π²Π΅Π±-страницы. ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ простого сообщСния Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° вашСм сайтС являСтся ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр:

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ изобраТСниями, Ссли:

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ΅Ρ‚ΡŒ доставки ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° для ΠΏΠΎΠΊΠ°Π·Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ вмСсто ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ сСрвСр, Ρ‡Ρ‚ΠΎ ΠΈ ваш сайт.
  2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ ΠΏΠ°Π»ΡŒΡ†Π΅Π² Π² URL ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Π½Π΅Π΅ остороТными настройками ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
  3. ВсСгда Π·Π°Π³Ρ€ΡƒΠΆΠ°ΠΉΡ‚Π΅ изобраТСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.
  4. ΠŸΠΎΠ½ΠΈΠ·ΡŒΡ‚Π΅ стандарты качСства изобраТСния ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ.
  5. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΡŒΡ‚Π΅ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ своих сцСнариСв Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ PHP.

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Catchpoint с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тСст-Π΄Ρ€Π°ΠΉΠ²Π° с инструктором.

Ошибка ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ изобраТСния | WordPress.org

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

Π•ΡΡ‚ΡŒ нСсколько Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ PHP 7.3 ΠΈ WordPress 5.3? Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° PHP 7.2.

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ памяти вашСго сайта. https://haydenjames.io/understanding-php-memory_limit/

Если Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· этих дСйствий Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это.

1. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΌΠ΅Π΄ΠΈΠ°Ρ‚Π΅ΠΊΡƒ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ. НаТмитС Edit ΠΈ посмотритС, Π³Π΄Π΅ находится ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ это ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅.

2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ сСрвСру Ρ‡Π΅Ρ€Π΅Π· FTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² эту ΠΏΠ°ΠΏΠΊΡƒ, Π³Π΄Π΅ хранятся ваши изобраТСния. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π² эту ΠΏΠ°ΠΏΠΊΡƒ свои большиС Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ.

3. Π˜Ρ… ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ Π² вашСй ΠΌΠ΅Π΄ΠΈΠ°Ρ‚Π΅ΠΊΠ΅. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ с сСрвСра». Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΈ установитС / Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ (ΠΎΡ‚ Dion Hulse).

4. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию вашСй установки WordPress (Π½Π° всякий случай).

5. НаконСц, Π½Π°Π²Π΅Π΄ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π½Π° МСдиа ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ ΠΎΠΏΡ†ΠΈΡŽ = Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ с сСрвСра

6. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ свою Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ΅Π΄ΠΈΠ°Ρ‚Π΅ΠΊΡƒ (хотя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹, Ссли допуститС ΠΎΡˆΠΈΠ±ΠΊΡƒ).

7. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ «ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ», потрСбуСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Π½ΠΎ Π½Π΅ отмСняйтС Π΅Π³ΠΎ ΠΈ Π½Π΅ обновляйтС страницу. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ экранС, ΠΊΠΎΠ³Π΄Π° это Π±ΡƒΠ΄Π΅Ρ‚ сдСлано. ВмСстС с Π½ΠΎΠ²Ρ‹ΠΌ списком ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ссли ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ).

8. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ваши Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π² вашСй ΠΌΠ΅Π΄ΠΈΠ°Ρ‚Π΅ΠΊΠ΅ с ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Β«ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΎΒ» Π² ΠΊΠΎΠ½Ρ†Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² своих сообщСниях, ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π―
Π€Π°ΠΉΠ»Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΡƒΠ΄Π°, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π²Ρ‹ ΠΈΡ… Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ помСстили ΠΈΡ… Π² Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΡƒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ изобраТСния, ΠŸΠ Π•Π–Π”Π• Ρ‡Π΅ΠΌ ΠΈΡ… ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ΠΈ появятся Π² ΠΌΠ΅Π΄ΠΈΠ°Ρ‚Π΅ΠΊΠ΅, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° вашСм Π²Π΅Π±-сайтС (ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ это).

Π― Π±Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ 10-15 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π·Π° Ρ€Π°Π·, Ссли ΠΎΠ½ΠΈ большиС. Π‘ΠΎΠ»ΡŒΡˆΠ΅, ΠΈ Π²Ρ‹ рискуСтС Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· вашСй cPanel ΠΈΠ·-Π·Π° бСздСйствия, ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ установку (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ рСзСрвная копия).

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ эту Π²Π΅Ρ‚ΠΊΡƒ wordpress.org, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ обсуТдаСтся мноТСство Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. https://wordpress.org/support/topic/unable-to-upload-images-67/page/5/

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚Π΅ ΠΌΠ½Π΅, Ссли это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚!

Android Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PHP MySQL ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ изобраТСния Π² ListView

package net. simpleifiedcoding.imageuploadsample;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.app.ProgressDialog;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.content.Context;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.content.Intent;

import android.database.Cursor;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.graphics.Bitmap;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.net.Uri;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.os.AsyncTask;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.provider.MediaStore;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.support.v7.app.AppCompatActivity;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.os.Bundle;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.util.Base64;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.util.Log;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.view.Menu;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.view.MenuItem;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.view.View;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.widget.Button;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.widget.ImageView;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ android.widget.Toast;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ java.io.ByteArrayOutputStream;

import java.io.IOException;

ΠΈΠΌΠΏΠΎΡ€Ρ‚ java.util.HashMap;

ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ класс MainActivity Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ AppCompatActivity, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ View.OnClickListener {

общСдоступная статичСская конСчная строка UPLOAD_URL = «http://simplifiedcoding. 16mb.com/PhotoUpload/upload.php»;

общСдоступный статичСский Ρ„ΠΈΠ½Π°Π» String UPLOAD_KEY = «image»;

частный int PICK_IMAGE_REQUEST = 1;

приватная Кнопка buttonChoose;

приватная ΠΊΠ½ΠΎΠΏΠΊΠ° buttonUpload;

частная ΠΊΠ½ΠΎΠΏΠΊΠ° buttonView;

частный ImageView imageView;

частноС растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Bitmap;

частный Uri filePath;

@Override

protected void onCreate (Bundle savedInstanceState) {

super.onCreate (savedInstanceState);

setContentView (R.layout.activity_main);

buttonChoose = (Кнопка) findViewById (R.id.buttonChoose);

buttonUpload = (Кнопка) findViewById (R.id.buttonUpload);

buttonView = (Кнопка) findViewById (R.id.buttonViewImage);

imageView = (ImageView) findViewById (R.id.imageView);

buttonChoose.setOnClickListener (это);

ΠΊΠ½ΠΎΠΏΠΊΠ° Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ.setOnClickListener (это);

buttonView. setOnClickListener (это);

}

private void showFileChooser () {

Intent intent = new Intent ();

intent.setType («ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ / *»);

intent.setAction (Intent.ACTION_GET_CONTENT);

startActivityForResult (Intent.createChooser (Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅, Β«Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β»), PICK_IMAGE_REQUEST);

}

@Override

protected void onActivityResult (int requestCode, int resultCode, Intent data) {

super.onActivityResult (ΠΊΠΎΠ΄ запроса, ΠΊΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π΄Π°Π½Π½Ρ‹Π΅);

if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data! = Null && data.getData ()! = Null) {

filePath = data.getData ();

ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ {

bitmap = MediaStore.Images.Media.getBitmap (getContentResolver (), filePath);

imageView.setImageBitmap (растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅);

} catch (IOException e) {

e.printStackTrace ();

}

}

}

общСдоступная строка getStringImage (Bitmap bmp) {

ByteArrayOutputStream baos = new ByteArrayOutputStream ();

bmp. compress (Bitmap.CompressFormat.JPEG, 100, baos);

Π±Π°ΠΉΡ‚ [] imageBytes = baos.toByteArray ();

String encodedImage = Base64.encodeToString (imageBytes, Base64.DEFAULT);

return encodedImage;

}

private void uploadImage () {

class UploadImage Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ AsyncTask {

ProgressDialog loading;

RequestHandler rh = Π½ΠΎΠ²Ρ‹ΠΉ RequestHandler ();

@Override

protected void onPreExecute () {

super.onPreExecute ();

Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° = ProgressDialog.show (MainActivity.this, Β«Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° …Β», null, true, true);

}

@Override

protected void onPostExecute (String s) {

super.onPostExecute (s);

loading.dismiss ();

Toast.makeText (getApplicationContext (), s, Toast.LENGTH_LONG) .show ();

}

@Override

защищСнная строка doInBackground (Bitmap… params) {

Bitmap bitmap = params [0];

Π‘Ρ‚Ρ€ΠΎΠΊΠ° uploadImage = getStringImage (растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅);

HashMap data = new HashMap <> ();

data. put (UPLOAD_KEY, uploadImage);

String result = rh.sendPostRequest (UPLOAD_URL, Π΄Π°Π½Π½Ρ‹Π΅);

Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

}

}

UploadImage ui = new UploadImage ();

ui.Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ (растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅);

}

@Override

public void onClick (View v) {

if (v == buttonChoose) {

showFileChooser ();

}

if (v == buttonUpload) {

uploadImage ();

}

if (v == buttonView) {

viewImage ();

}

}

private void viewImage () {

startActivity (Π½ΠΎΠ²Ρ‹ΠΉ Intent (this, ImageListView.ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ класс));

}

}

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PHP ~ Learn Infinity

function resizeImage ($ resourceType, $ image_width, $ image_height) {

$ resizeWidth = 100;

$ resizeHeight = 100;

$ imageLayer = imagecreatetruecolor ($ resizeWidth, $ resizeHeight);

imagecopyresampled ($ imageLayer, $ resourceType, 0,0,0,0, $ resizeWidth, $ resizeHeight, $ image_width, $ image_height);

return $ imageLayer;

}

if (isset ($ _ POST [«form_submit»])) {

$ imageProcess = 0;

if (is_array ($ _ FILES)) {

$ fileName = $ _FILES [‘upload_image’] [‘tmp_name’];

$ sourceProperties = getimagesize ($ fileName);

$ resizeFileName = врСмя ();

$ uploadPath = «. / uploads / «;

$ fileExt = pathinfo ($ _ FILES [‘upload_image’] [‘name’], PATHINFO_EXTENSION);

$ uploadImageType = $ sourceProperties [2];

$ sourceImageWidth = $ sourceProperties [0];

$ sourceImageHeight = $ sourceProperties [1];

ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ ($ uploadImageType) {

case IMAGETYPE_JPEG:

$ resourceType = imagecreatefromjpeg ($ fileName);

$ imageLayer = );

imagejpeg ($ imageLayer, $ uploadPath.»thump _». $ resizeFileName. ‘.’. $ fileExt);

ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²;

case IMAGETYPE_GIF:

$ resourceType = imagecreatefromgif ($ fileName);

$ imageLayer = resizeImage ($ resourceType, $ sourceImageWidth, $ sourceImageHeight);

imagegif ($ imageLayer, $ uploadPath. «Thump _». $ ResizeFileName. ‘.’. $ FileExt);

ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²;

case IMAGETYPE_PNG:

$ resourceType = imagecreatefrompng ($ fileName);

$ imageLayer = resizeImage ($ resourceType, $ sourceImageWidth, $ sourceImageHeight);

imagepng ($ imageLayer, $ uploadPath.