PrestaShop 9 klaidos
Cannot write images for this type: products, perkuriant miniatiūras PrestaShop 9
Miniatiūrų perkūrimas sustoja su pranešimu apie aplanko teises. PrestaShop 9 tą patį pranešimą rodo, kai bet kuris vienas paveikslėlis nepavyksta dėl bet kokios priežasties, todėl teisės – tik viena iš galimų priežasčių.
- Klaida
Cannot write images for this type: products. Please check the /img/p/ folder's writing permissions.- Pasirodo
- Dizainas > Paveikslėlių nustatymai > Perkurti miniatiūras (9.x)
- Dažniausiai randama
- Didelės originalios nuotraukos, img/p aplankų savininkai, PHP memory_limit
Kas nutiko
Perkuriant miniatiūras, PrestaShop 9 pereina kiekvieną prekės paveikslėlį, kiekvieną paveikslėlio tipą ir kiekvieną įjungtą formatą (JPEG, o jei pasirinkta – dar WebP ar AVIF). Kiekviena nesėkmė prideda tikslų pranešimą, pavyzdžiui, Original image is corrupt (…) for product ID 12 or bad permission on folder. Tačiau komandos tvarkyklė tą sąrašą išmeta ir parodo vieną bendrą sakinį apie rašymo teises.
Taigi užtenka vieno blogo paveikslėlio iš tūkstančių. Patikrinome 9.2 kodą, o mūsų bandomojoje 9.2 parduotuvėje mažinimas nepavyko su šiuo pranešimu tokiais atvejais:
- Originalas per didelis PHP atminties ribai. Prieš mažindamas PrestaShop įvertina, kiek atminties reikės (plotis × aukštis × spalvų kanalai, padauginta iš 1,8), ir atsisako, jei netilptų į
memory_limit. 48 megapikselių nuotrauka (8000 × 6000) sumemory_limit = 256Matmesta, o su1Gsumažinta. Daug telefonų dabar fotografuoja 48 MP. - Kuris nors
img/ppoaplankis neįrašomas PHP vartotojui, pavyzdžiui, sukurtas root, kito FTP vartotojo ar perkeliant parduotuvę. Pagrindinis aplankas su 755 gali atrodyti tvarkingas, o vienas poaplankis priklauso kitam. - Originalus failas neegzistuoja arba tuščias.
Sprendimas: raskite nepavykstantį paveikslėlį
Pradėkite nuo didelių originalų. Failo dydis tik užuomina, svarbu pikselių skaičius:
find img/p -regex '.*/[0-9]+\.jpg' -size +5M
php -r 'print_r(getimagesize("img/p/1/2/12.jpg"));'
Radę labai didelę nuotrauką, arba sumažinkite originalą, arba perkūrimo metu padidinkite memory_limit (pavyzdžiui, iki 1G) ir po to grąžinkite.
Tada savininkai ir tušti failai (vietoj www-data įrašykite savo svetainės serverio vartotoją):
find img/p ! -user www-data | head
find img/p -regex '.*/[0-9]+\.jpg' -size 0
Perkurkite po vieną paveikslėlio tipą, išjungę Ištrinti ankstesnius paveikslėlius. PrestaShop praleidžia jau esamas miniatiūras, todėl kiekvienas paleidimas tęsia nuo ten, kur sustojo, ir probleminį paveikslėlį lengviau pastebėti.
Kur dar pasitaiko
Jei paveikslėlių formatuose pasirinktas AVIF, o serverio GD jo nepalaiko, mažinimas nebaigiamas tvarkingai: jis baigiasi klaida Call to undefined function imageavif(). Nustatymų puslapis paprastai AVIF išjungia, kai jis nepalaikomas. Tai pasirodo perkėlus parduotuvę į serverį, kurio PHP jo neturi. Išjunkite AVIF (Dizainas > Paveikslėlių nustatymai) arba paprašykite hostingo įmonės GD su AVIF palaikymu.