Autor Zpráva
pk11
Profil
Zdravím, načítám v url adresu .../wp-admin/admin.php?page=custompage, modul s názvem DataTables mi vyhodí DataTables warning: table id=priklad - Ajax error, v konzoli v Network zjišťuju, že je to admin-ajax.php, HTTP kód je 500. K error.log serveru přístup nemám, je to na hostingu. Po nějaké době na konzoli naskáčou u admin-ajax.php kódy 200, to dělá wp-auth-check...
Můžete mi někdo poradit, kde mám pátrat? Díky!
Tomášeek
Profil
pk11:
500 je server error. Bez kodu tezko tipovat, kde muze byt chyba.
Keeehi
Profil
Ano, nez chyby se dá jen těžko radit. Začal bych s Nejčastější potíže s PHP (FAQ) » Zapnutí výpisu všech chyb a varování
Kajman
Profil
Požádejte hosting o error log.
pk11
Profil
Tomášeek, Keeehi, Kajman: všem třem děkuji za odpověď!

Tomášeek: Jaký "kód" přesně mám hledat? Ve kterých souborech?

Keeehi: V logu wp-content/debug.log je toto:
[30-Dec-2018 00:02:46 UTC] PHP Notice:  Undefined index: post_type in /data/www/.../wp-content/themes/blank/functions.php on line 303
[30-Dec-2018 00:02:48 UTC] PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 82 bytes) in /data/www/.../wp-includes/meta.php on line 843

Kajman:
Požádám. Děkuju.
Tomášeek
Profil
pk11:
Jaký "kód" přesně mám hledat? Ve kterých souborech?
Pravděpodobně v těch, kde nastává chyba :-)

Logy serveru už nepotřebuješ, meta.php, řádek 843. Chybu hledej tam, proč ti přetéká paměť. Asi něco zacykleného.
pk11
Profil
Tomášeek:
Pravděpodobně v těch, kde nastává chyba :-)
Chytrému napověz a ... a dál už to neumim :)

Obsah meta.php na GitHub, tam je to ale řádek 946!

Není to můj web. Dnes jsem ho viděl poprvé. Skript evidentně zpracovává data z tabulky wp-metadata, ta má 61009 řádků a values jsou z velké části serializované, jestli mi rozumíte: a:1:{s:5:"sizes";a:4:{s:9:"thumbnail";a:4:{s:4:"file";s:22:"ML1368-pdf-106x150.jpg";s:5:"width";i:10...

Nechá se už z tohoto usuzovat, že to způsobuje tu "pětistovku"?
Keeehi
Profil
pk11:
Nechá se už z tohoto usuzovat, že to způsobuje tu "pětistovku"?
Nechá. Tedy zrovna v tomhle případě to spadlo tady. Což může být dané tím, že to načítá spoustu záznamů a z nich si pak vytváří v paměti pole.

Problém však může být i v nějaké jiné části. Může se stát že nějaká jiné část aplikace je neefektivní a zabere třeba 250MB, což je těsně pod limitem a když aplikace dojde zrovna do této části a potřebovala by paměti jen trochu, už i to málo překročí limit a proto to spadne.
Mělo by to jít ale celkem snadno ověřit.
Za řádek 876 (tedy na začátek funkce) bych na zkoušku dal:
echo "start: " . memory_get_usage() . "\n";
A za řádky 879, 884, 910, 926 a 960 (tedy před return) bych vložil:
echo "end: " . memory_get_usage() . "\n";
Čísla řádků jsou dle Githubu.

Ta funkce update_meta_cache může být volaná vícekrát a takto zjistíš, kolik paměti pokaždé zabere. Z toho se pak dá usoudit, jestli za většinu obsazené paměti může tato funkce nebo něco jiného a tedy tato funkce není pravým viníkem.
Je potřeba donutit aplikaci k zobrazení těch hodnot, i když pak následně spadne. Což by mělo jít právě tím zapnutím vypisování chybových hlášek.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0