                                          {"id":4481,"date":"2026-01-29T23:18:22","date_gmt":"2026-01-29T23:18:22","guid":{"rendered":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/?page_id=4481"},"modified":"2026-02-26T09:25:04","modified_gmt":"2026-02-26T09:25:04","slug":"tehnicki-zahtevi","status":"publish","type":"page","link":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/tehnicki-zahtevi\/","title":{"rendered":"Tehni\u010dki zahtevi"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Minimalno (da radi)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>WordPress:<\/strong> 6.8+<\/li>\n\n\n\n<li><strong>WooCommerce (ako je WC plugin):<\/strong>  8.0+<\/li>\n\n\n\n<li><strong>PHP:<\/strong>  <strong>8.1+<\/strong>, idealno 8.2\/8.3<\/li>\n\n\n\n<li><strong>MySQL:<\/strong> 8.0+ ili <strong>MariaDB 10.3+<\/strong><\/li>\n\n\n\n<li><strong>HTTPS:<\/strong> obavezno (Let\u2019s Encrypt ili sli\u010dno)<\/li>\n\n\n\n<li><strong>Outbound SMTP ili WP mail radi<\/strong> (server mora da mo\u017ee da \u0161alje mail: <code>wp_mail()<\/code>), ili da korisnik ima SMTP plugin<\/li>\n\n\n\n<li><strong>Cron \/ WP-Cron:<\/strong> uklju\u010den<\/li>\n\n\n\n<li><strong>PHPBolt Loader PHP ekstenzija<\/strong> mora biti instalirana i u\u010ditana za PHP verziju na kojoj radi sajt.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Preporu\u010deno<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PHP memory_limit:<\/strong> 256MB+ (minimum 128MB)<\/li>\n\n\n\n<li><strong>max_execution_time:<\/strong> 60s+ (minimum 30s)<\/li>\n\n\n\n<li><strong>upload_max_filesize \/ post_max_size:<\/strong> 32MB+ (minimum 16MB)<\/li>\n\n\n\n<li><strong>allow_url_fopen:<\/strong> On (ako plugin vu\u010de remote fajlove)<\/li>\n\n\n\n<li><strong>cURL extension:<\/strong> obavezno<\/li>\n\n\n\n<li><strong>OpenSSL extension:<\/strong> obavezno (HTTPS\/TLS)<\/li>\n\n\n\n<li><strong>JSON extension:<\/strong> obavezno<\/li>\n\n\n\n<li><strong>mbstring:<\/strong> preporu\u010deno (srpski, unicode, normalno parsiranje)<\/li>\n\n\n\n<li><strong>DOM\/XML:<\/strong> preporu\u010deno (ako ima XML\/HTML parsiranje)<\/li>\n\n\n\n<li><strong>Intl:<\/strong> preporu\u010deno (formatiranje valuta\/datuma, lokalizacija)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Debug<\/h2>\n\n\n\n<p>Ako niste sigurni da li vam podrzava hosting, otvorite fajl nazvan info.php i ubacite sledeci sadrzaj ispod i sacuvajte potom otvorite vasdomen.tld\/info.php<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\ndeclare(strict_types=1);\n\nheader('Content-Type: text\/plain; charset=utf-8');\n\nfunction bytes_from_ini(string $val): int {\n    $val = trim($val);\n    if ($val === '' || $val === '-1') return -1; \/\/ unlimited\n    $last = strtolower($val&#91;strlen($val)-1]);\n    $num = (float)$val;\n\n    switch ($last) {\n        case 'g': return (int)($num * 1024 * 1024 * 1024);\n        case 'm': return (int)($num * 1024 * 1024);\n        case 'k': return (int)($num * 1024);\n        default:  return (int)$num;\n    }\n}\n\nfunction fmt_bytes(int $b): string {\n    if ($b &lt; 0) return 'unlimited';\n    $units = &#91;'B','KB','MB','GB','TB'];\n    $i = 0;\n    $v = (float)$b;\n    while ($v >= 1024 &amp;&amp; $i &lt; count($units)-1) {\n        $v \/= 1024;\n        $i++;\n    }\n    return rtrim(rtrim(number_format($v, 2, '.', ''), '0'), '.') . $units&#91;$i];\n}\n\nfunction ok(bool $pass): string {\n    return $pass ? 'OK' : 'FAIL';\n}\n\necho \"=== PHP Environment Check ===\\n\";\necho \"PHP_VERSION=\" . PHP_VERSION . \"\\n\";\necho \"SAPI=\" . php_sapi_name() . \"\\n\";\necho \"Loaded php.ini=\" . (php_ini_loaded_file() ?: 'NONE') . \"\\n\";\necho \"Scanned INIs=\" . (php_ini_scanned_files() ?: 'NONE') . \"\\n\\n\";\n\n\/** Requirements *\/\n$req = &#91;\n    &#91;\n        'name' => 'memory_limit',\n        'type' => 'ini_bytes',\n        'min'  => 128 * 1024 * 1024,\n        'good' => 256 * 1024 * 1024,\n        'note' => 'PHP memory_limit: 256MB+ (minimum 128MB)',\n    ],\n    &#91;\n        'name' => 'max_execution_time',\n        'type' => 'ini_int',\n        'min'  => 30,\n        'good' => 60,\n        'note' => 'max_execution_time: 60s+ (minimum 30s)',\n    ],\n    &#91;\n        'name' => 'upload_max_filesize',\n        'type' => 'ini_bytes',\n        'min'  => 16 * 1024 * 1024,\n        'good' => 32 * 1024 * 1024,\n        'note' => 'upload_max_filesize: 32MB+ (minimum 16MB)',\n    ],\n    &#91;\n        'name' => 'post_max_size',\n        'type' => 'ini_bytes',\n        'min'  => 16 * 1024 * 1024,\n        'good' => 32 * 1024 * 1024,\n        'note' => 'post_max_size: 32MB+ (minimum 16MB)',\n    ],\n    &#91;\n        'name' => 'allow_url_fopen',\n        'type' => 'ini_bool_on',\n        'min'  => true,\n        'good' => true,\n        'note' => 'allow_url_fopen: On (ako plugin vu\u010de remote fajlove)',\n    ],\n];\n\necho \"--- INI settings ---\\n\";\nforeach ($req as $r) {\n    $name = $r&#91;'name'];\n    $raw  = ini_get($name);\n\n    if ($r&#91;'type'] === 'ini_bytes') {\n        $val = bytes_from_ini((string)$raw);\n        $pass = ($val &lt; 0) ? true : ($val >= (int)$r&#91;'min']);\n        $isGood = ($val &lt; 0) ? true : ($val >= (int)$r&#91;'good']);\n        echo sprintf(\n            \"%-22s = %-10s  &#91;%s]  (%s)\\n\",\n            $name,\n            $raw === '' ? 'N\/A' : ($val &lt; 0 ? 'unlimited' : fmt_bytes($val)),\n            ok($pass),\n            $isGood ? \"preporuceno odgovara\" : \"nije u skladu sa preporukom\"\n        );\n        continue;\n    }\n\n    if ($r&#91;'type'] === 'ini_int') {\n        $val = (int)$raw;\n        $pass = ($val >= (int)$r&#91;'min']);\n        $isGood = ($val >= (int)$r&#91;'good']);\n        echo sprintf(\n            \"%-22s = %-10s  &#91;%s]  (%s)\\n\",\n            $name,\n            (string)$val,\n            ok($pass),\n            $isGood ? \"preporuceno odgovara\" : \"nije u skladu sa preporukom\"\n        );\n        continue;\n    }\n\n    if ($r&#91;'type'] === 'ini_bool_on') {\n        $val = filter_var($raw, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);\n        \/\/ ini_get sometimes returns \"1\"\/\"0\" or \"On\"\/\"Off\"\n        $val = ($raw === false) ? null : ($raw === '1' || strtolower((string)$raw) === 'on' ? true : ($raw === '0' || strtolower((string)$raw) === 'off' ? false : $val));\n        $pass = ($val === true);\n        echo sprintf(\n            \"%-22s = %-10s  &#91;%s]\\n\",\n            $name,\n            ($val === null ? 'N\/A' : ($val ? 'On' : 'Off')),\n            ok($pass)\n        );\n        continue;\n    }\n}\necho \"\\n\";\n\n\/** Extensions *\/\n$extensions = &#91;\n    &#91;'name' => 'curl',      'required' => true,  'note' => 'cURL extension: obavezno'],\n    &#91;'name' => 'openssl',   'required' => true,  'note' => 'OpenSSL extension: obavezno (HTTPS\/TLS)'],\n    &#91;'name' => 'json',      'required' => true,  'note' => 'JSON extension: obavezno'],\n    &#91;'name' => 'mbstring',  'required' => false, 'note' => 'mbstring: preporu\u010deno'],\n    &#91;'name' => 'dom',       'required' => false, 'note' => 'DOM\/XML: preporu\u010deno (DOM)'],\n    &#91;'name' => 'xml',       'required' => false, 'note' => 'DOM\/XML: preporu\u010deno (XML)'],\n    &#91;'name' => 'intl',      'required' => false, 'note' => 'Intl: preporu\u010deno'],\n];\n\necho \"--- Extensions ---\\n\";\nforeach ($extensions as $e) {\n    $loaded = extension_loaded($e&#91;'name']);\n    $status = $loaded ? 'OK' : ($e&#91;'required'] ? 'FAIL' : 'WARN');\n    echo sprintf(\"%-10s : %-4s  (%s)\\n\", $e&#91;'name'], $status, $e&#91;'note']);\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Minimalno (da radi) Preporu\u010deno Debug Ako niste sigurni da li vam podrzava hosting, otvorite fajl nazvan info.php i ubacite sledeci sadrzaj ispod i sacuvajte potom otvorite vasdomen.tld\/info.php<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-4481","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/wp-json\/wp\/v2\/pages\/4481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/wp-json\/wp\/v2\/comments?post=4481"}],"version-history":[{"count":4,"href":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/wp-json\/wp\/v2\/pages\/4481\/revisions"}],"predecessor-version":[{"id":4675,"href":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/wp-json\/wp\/v2\/pages\/4481\/revisions\/4675"}],"wp:attachment":[{"href":"https:\/\/besplatansajt.in.rs\/sajt\/demo\/wp-json\/wp\/v2\/media?parent=4481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}