{"id":29474,"date":"2021-06-15T14:31:00","date_gmt":"2021-06-15T11:31:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29474"},"modified":"2021-10-18T03:32:14","modified_gmt":"2021-10-18T00:32:14","slug":"przeslij-obraz-za-pomoca-bulletproof-library-w-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/przeslij-obraz-za-pomoca-bulletproof-library-w-php\/","title":{"rendered":"Prze\u015blij obraz za pomoc\u0105 Bulletproof Library w PHP"},"content":{"rendered":"<p>Wgrywanie obrazu na serwer jest cz\u0119stym zadaniem programist\u00f3w. Mo\u017cna to zrobi\u0107 setki razy. Podczas tego procesu przesy\u0142ania programi\u015bci musz\u0105 zadba\u0107 o nast\u0119puj\u0105ce rzeczy.<\/p>\n<ul>\n<li>Sprawd\u017a, czy przes\u0142any plik jest obrazem<\/li>\n<li>Utw\u00f3rz katalog, w kt\u00f3rym b\u0119d\u0105 przechowywane obrazy<\/li>\n<li>Wygeneruj unikaln\u0105 nazw\u0119 dla ka\u017cdego obrazu, aby nie zast\u0119powa\u0142 istniej\u0105cego o tej samej nazwie.<\/li>\n<li>Opcjonalnie dodaj weryfikacj\u0119 wymiaru obrazu. Je\u015bli przes\u0142any obraz ma wi\u0119kszy wymiar ni\u017c okre\u015blony, zg\u0142o\u015b b\u0142\u0105d.<\/li>\n<\/ul>\n<p>S\u0105 to zalecane kontrole, kt\u00f3re programista powinien wykona\u0107 podczas pisania kodu. W kodzie mo\u017cna napisa\u0107 warunki dla wszystkich tych krok\u00f3w. Ale zajmie to troch\u0119 pracy, a kod stanie si\u0119 d\u0142ugi.<\/p>\n<p>Polecam korzystanie z biblioteki <a href=\"https:\/\/github.com\/samayo\/bulletproof\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Bulletproof,<\/a> kt\u00f3ra obs\u0142uguje wszystkie te kroki pod mask\u0105. Oszcz\u0119dza to czas na dodawanie logiki dla ka\u017cdego kroku i zmniejszenie liczby linii kodu.<\/p>\n<p>Bulletproof to bezpieczny program do przesy\u0142ania obraz\u00f3w PHP z \u0142adnym interfejsem API. Wypr\u00f3bowali\u015bmy t\u0119 bibliotek\u0119 w naszym projekcie i jeste\u015bmy ca\u0142kiem zadowoleni z efektu ko\u0144cowego. Dlatego postanowi\u0142em podzieli\u0107 si\u0119 z naszymi czytelnikami s\u0142owem o tej bibliotece.<\/p>\n<p>Biblioteka Bulletproof ma w swoim rdzeniu nast\u0119puj\u0105ce funkcje, dzi\u0119ki czemu jest bezpieczniejsza.<\/p>\n<ul>\n<li>U\u017cywa exif_imagetype(), aby uzyska\u0107 prawdziwy mime obrazu (.extension)<\/li>\n<li>U\u017cywa getimagesize() do sprawdzenia, czy obrazek ma prawid\u0142ow\u0105 wysoko\u015b\u0107\/szeroko\u015b\u0107 w pikselach.<\/li>\n<li>Oczyszczone nazwy obraz\u00f3w, \u015bcis\u0142e uprawnienia do folder\u00f3w i nie tylko\u2026<\/li>\n<\/ul>\n<p>Bior\u0105c to pod uwag\u0119, przyjrzyjmy si\u0119, jak przesy\u0142a\u0107 obrazy w PHP za pomoc\u0105 biblioteki Bulletproof.<\/p>\n<h3>Pierwsze kroki<\/h3>\n<p>Aby rozpocz\u0105\u0107 korzystanie z biblioteki Bulletproof, zainstaluj j\u0105 za pomoc\u0105 poni\u017cszego polecenia Composer. Upewnij si\u0119, \u017ce masz zainstalowany <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> w systemie.<\/p>\n<pre><code>composer require samayo\/bulletproof:4.0.*<\/code><\/pre>\n<p>Nast\u0119pnie utw\u00f3rz prosty formularz HTML z wej\u015bciem pliku i przyciskiem prze\u015blij.<\/p>\n<pre><code>&lt;form method=\"POST\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"image\" accept=\"image\/*\" required \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Upload\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<h3>Prze\u015blij obraz za pomoc\u0105 Biblioteki kuloodpornej<\/h3>\n<p>Jeste\u015bmy przygotowani z bibliotek\u0105 i formularzem HTML. Dodajmy teraz kod dostarczony przez bibliotek\u0119, kt\u00f3ra przesy\u0142a obraz na serwer.<\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$file = new BulletproofImage($_FILES);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$file-&gt;setLocation('uploads');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if ($file[\"image\"]) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$upload = $file-&gt;upload();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($upload) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $upload-&gt;getFullPath();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $file-&gt;getError();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;<\/code><\/pre>\n<p>Sko\u0144czy\u0142e\u015b. \u015amia\u0142o i przetestuj to. Zobaczysz swoje obrazy przechowywane w folderze \u201eprzes\u0142ane&quot; o unikalnej nazwie. U\u017cytkownik mo\u017ce zmieni\u0107 t\u0119 lokalizacj\u0119 na co\u015b innego.<\/p>\n<p>Je\u015bli spr\u00f3bujesz przes\u0142a\u0107 pliki inne ni\u017c obrazy, pojawi si\u0119 b\u0142\u0105d. Na wszelki wypadek, je\u015bli chcesz ustawi\u0107 r\u00f3wnie\u017c wymiar, dodaj poni\u017csz\u0105 instrukcj\u0119 w powy\u017cszym kodzie.<\/p>\n<pre><code>$file-&gt;setDimension(600, 400);<\/code><\/pre>\n<p>Tutaj \u201e600&#8243; to szeroko\u015b\u0107 obrazu, a \u201e400&#8243; to wysoko\u015b\u0107 obrazu. Dostosuj warto\u015bci zgodnie ze swoimi wymaganiami.<\/p>\n<h3>Prze\u015blij wiele obraz\u00f3w za pomoc\u0105 kuloodpornej biblioteki<\/h3>\n<p>Mo\u017cesz przes\u0142a\u0107 wiele obraz\u00f3w na serwer za pomoc\u0105 tej biblioteki. Wymaga to niewielkiej zmiany w powy\u017cszym kodzie. Musisz doda\u0107 atrybut \u201ewiele&#8221; do pliku wej\u015bciowego. U\u017cyj r\u00f3wnie\u017c formatu tablicy dla nazwy pliku wej\u015bciowego. Nast\u0119pnie przejdziemy przez ka\u017cdy obraz i prze\u015blemy go na serwer w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\u00a0\u00a0\u00a0for($i = 0; $i &lt; count($_FILES['image']['name']); $i++) {\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_file = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\" =&gt; $_FILES['image']['name'][$i],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\" =&gt; $_FILES['image']['type'][$i],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"tmp_name\" =&gt; $_FILES['image']['tmp_name'][$i],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"error\" =&gt; $_FILES['image']['error'][$i],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"size\" =&gt; $_FILES['image']['size'][$i],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$file = new BulletproofImage($arr_file);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$file-&gt;setLocation('uploads');\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$upload = $file-&gt;upload();\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;\n&lt;form method=\"POST\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"image[]\" accept=\"image\/*\" multiple required \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Upload\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Ot\u00f3\u017c \u200b\u200bto! Mam nadziej\u0119, \u017ce rozumiesz, jak przes\u0142a\u0107 obraz za po\u015brednictwem biblioteki Bulletproof. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przesylac-i-kompresowac-obrazy-w-laravel\/\" title=\"Przewodnik po przesy\u0142aniu i kompresowaniu obraz\u00f3w w Laravel\">Przewodnik po przesy\u0142aniu i kompresowaniu obraz\u00f3w w Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-zoptymalizowac-obraz-podczas-przesylania-w-php\/\" title=\"Jak zoptymalizowa\u0107 obraz podczas przesy\u0142ania w PHP\">Jak zoptymalizowa\u0107 obraz podczas przesy\u0142ania w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/zmien-rozmiar-obrazu-w-php-za-pomoca-tinypng\/\" title=\"Zmie\u0144 rozmiar obrazu w PHP za pomoc\u0105 TinyPNG\">Zmie\u0144 rozmiar obrazu w PHP za pomoc\u0105 TinyPNG<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bulletproof to biblioteka s\u0142u\u017c\u0105ca do przesy\u0142ania obraz\u00f3w w PHP z bezpiecze\u0144stwem. W tym artykule dowiemy si\u0119, jak zainstalowa\u0107 i korzysta\u0107 z tej biblioteki w naszej aplikacji<\/p>\n","protected":false},"author":1,"featured_media":21621,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[277],"tags":[847],"class_list":["post-29474","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=29474"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29474\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21621"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=29474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}