Autor Zpráva
chvostik
Profil
Zdravím, nedaří se mi absolutně nainstalovat APC funkce do XAMPPu. Potřebuju to kvůli funkci apc_fetch, která mi bude zobrazovat průběh uploadování dat jak je popsáno v http://php.vrana.cz/zobrazeni-prubehu-uploadu-prakticky.php. Stáhl jsem si knihovnu, dal ji do příslušné složky a v php.ini připsal extension=php_apc.dll ale prostě to nefunguje.
Davex
Profil
chvostik:
prostě to nefunguje
Máš to rozbité.

Restartoval jsi Apache?
Zobrazuje se APC ve výpisu phpinfo()?
Je stažená knihovna php_apc.dll zkompilována pro správnou verzi PHP, respektive PHP API?
Je nějaká chyba v záznamu chyb Apache - error.log?
Je zapnuté apc.rfc1867?
chvostik
Profil
Mno právěže v phpinfu APC není, ale háže to chybu PHP Fatal error: Call to undefined function apc_fetch(). Zapnuté apc.rfc1867 jeste není, ale dokud nejde zbytek je to zatím jedno si myslím. A co se týče verze tak tam je odchylka, že mám verzi XAMPPU 3.1.0 a v popisu je 3.1.10. Takže jedině, že bych skusil stahnout novější verzi XAMPPu ale php verze by měla bejt dobrá.


nepomohlo, mám tendle příkaz extension=php_apc.dll; dát někam přesně do php.ini nebo to je jedno?
Davex
Profil
chvostik:
Mno právěže v phpinfu APC není
Často se dělá chyba v tom, že se upravuje špatný soubor php.ini. Doporučuji upravovat ten uvedený ve výpisu phpinfo() - Loaded Configuration File. Pokud se knihovna z nějakého důvodu nenahraje při spuštění Apache, tak by měla být zaznamenána chyba v error.log.

mám tendle příkaz extension=php_apc.dll; dát někam přesně do php.ini nebo to je jedno?
Vhodné je dát ho hned skupinu ostatních direktiv extension=.
Krakatoa
Profil
Teď jsem si s tím hrál a bez problému mi funguje:
windows 8.1 64 bit
apache 2.4.6 (64 bit, apachelounge.com)
php 5.5.6 (64 bit, oficiální)
php_apcu.dll (64 bit, apachelounge.com, z php 5.5.6 64 bit, verze apcu 4.0.2)

php.ini:
[apcu]
extension=php_apcu.dll
apc.rfc1867=On
+ kvůli testování s velkými soubory na localhostu:
[PHP]
post_max_size = 2000M
upload_max_filesize = 2000M


index.php
<?php
$id = uniqid();
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Odeslání souboru</title>
<script type="text/javascript">
function progress() {
    var xmlhttp;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET","progress.php?id=<?php echo $id; ?>",false);
    xmlhttp.send();
    document.getElementById("progress").innerHTML=xmlhttp.responseText;
    window.setTimeout(progress, 1000);
}
</script>
</head>

<body>
<form action="" method="post" enctype="multipart/form-data">
    <input type="hidden" name="APC_UPLOAD_PROGRESS" value="<?php echo $id; ?>">
    <input type="file" name="fupload"><br>
    <input type="submit" onclick="window.setTimeout(progress, 1000);">
    <span id="progress"></span>
</form>

<?php
if (isset($_FILES['fupload'])) {
    print "název: ".           $_FILES['fupload']['name']       ."<br>";
    print "velikost: ".        $_FILES['fupload']['size'] ." bajtů<br>";
    print "dočasné umístění: ".$_FILES['fupload']['tmp_name']   ."<br>";
    print "typ:  ".            $_FILES['fupload']['type']       ."<br>";
    print "chyba: ".           $_FILES['fupload']['error']      ."<br>";

    move_uploaded_file($_FILES['fupload']['tmp_name'], $_FILES['fupload']['name']);
}
?>
</body>
</html>

progress.php
<?php
$progress = apc_fetch("upload_$_GET[id]");
echo ($progress ? number_format(100 * $progress["current"] / $progress["total"], 2) . "%" : "");
?>

Edit: Co se týče skriptu, bez problému funguje pouze ve firefoxu :-(, v IE11 pouze první vteřina, v google chrome vůbec (ale google ukazuje dole hodnotu i bez apcu). Původní skript z http://php.vrana.cz/zobrazeni-prubehu-uploadu-prakticky.php mi nefunguje ani v jednom prohlížeči. Kdyby někdo věděl jakej skript použít, aby fungoval přes apcu v IE 11, FF 25 a Chrome 31, tak poraďte.
Jan Tvrdík
Profil
Doplním, že alternativně lze od PHP verze 5.4.0 použít ke sledování průběhu uploadu i sessions. Viz php.net/manual/en/session.upload-progress.php.
chvostik
Profil
Díky, ale ta instalace se mi pořád nepovedla upravuju tendle soubor: D:\xampp\php\php.ini.

[apcu]
;apc.rfc1867=On
;apc_extension="D:\xampp\php\ext\php_apc.dll"

[PHP]
;post_max_size = 2000M
;upload_max_filesize = 2000M

Hodil jsem tam todle + přidal ještě k ostatním extension=. extension=php_apc.dll a stejně furt nic. Taky jsem zkusil asi 4 ruzné php_apc.dll (ts,nts). Nemůže mi někdo ten soubor php.ini poslat? Fakt jste tam nepřidali ještě něco navíc? Jinak zkoušel jsem samozřejmě i vypnout apache i vypnout celyho xammpa a zapnout znova pro restart.
juriad
Profil
Odstraň ty středníky na začátcích řádků. Středník v .ini souboru značí komentář.


Na začátku php.ini je popis:

; The syntax of the file is extremely simple. Whitespace and lines
; beginning with a semicolon are silently ignored (as you probably guessed).
chvostik
Profil
Hurá, funguje :D, ale ten extension=php_apc.dll jsem zkoušel i bez středníku předtim a nic, ale možna jsem tam mel zrovna špatnej soubor nebo tak něco no :-). Tak ted snad jeste rozchodím ten skript :-p
Krakatoa
Profil
chvostik:
Kdyby ti skript přes apcu fungoval v IE 11, FF 25 a Chrome 31, tak dej vědět jaký, mně se zatím nepodařilo vytvořit takový, aby mi fungoval ve všech třech prohlížečích.
chvostik
Profil
Mno právěže co se týče javascriptu tak jsem začátečník celkem takže s tím dost bojuju :-) zatím mi to nejde v tom firefoxu.
chvostik
Profil
Mno tak už to cosi děla, ale spokojen nejsem :D. Jednak mi to vypíše rovnou 100% a taky jen pro jeden soubor (uploaduju jich víc). Dá se to nějak upravit pro více souboru? A jakej je rozdíl mezi tím tvojím skriptem:

function progress() {
    var xmlhttp;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET","progress.php?id=<?php echo $id; ?>",false);
    xmlhttp.send();
    document.getElementById("progress").innerHTML=xmlhttp.responseText;
    window.setTimeout(progress, 1000);
}

a

function progress_update(xmlhttp) {
    if (xmlhttp.readyState == 4) {
        document.getElementById('progress').innerHTML = xmlhttp.responseText;
        window.setTimeout(progress_send, 1000);
    }
}
function progress_send() {
    send_xmlhttprequest(progress_update, 'GET', 'progress.php?id=<?php echo $id; ?>');
}

Ten druhý mi ani nefunguje, ale nevím proč a nevím jestli nemá dělat něco navíc :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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