Pereiti prie turinio
← Visos PrestaShop 9 klaidos

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) su memory_limit = 256M atmesta, o su 1G sumažinta. Daug telefonų dabar fotografuoja 48 MP.
  • Kuris nors img/p poaplankis 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.

Vis tiek atnaujinate? Sužinokite, kas lūš toliau

Ši klaida kyla iš serverio ar paties atnaujinimo, ne iš modulių. Kitos dažniausiai kyla iš kodo: modulių, temos ir override failų, kurie vis dar kviečia tai, ką PrestaShop 8 ir 9 pašalino. Mūsų nemokama PrestaShop 9 parengties patikra parodo kiekvieną su failu ir eilute. Ji tik skaito, nieko nekeičia.

Gauti nemokamą patikrą

Nenorite atnaujinti patys? Parduotuves į PrestaShop 9 atnaujiname už fiksuotą kainą. Apie atnaujinimą