DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   APC Upload Problem (http://www.devprotalk.com/showthread.php?t=9334)

vladapopster 10. 11. 2010. 13:04

APC Upload Problem
 
Imam problem vezan za progres bar pri ajax uploadu fajlova.
Na test serveru sve radi kako treba, dok isti kod prebacen na live server ne radi, tacnije vraca false.

HTML
Kôd:

<form target="hiddenframe" enctype="multipart/form-data" name="form1" id="uploadform" style="margin-left:6px;" action="" method="POST">
                                <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="{$upl_id}" />
                                <input type="file" id="numlist" size="25" name="filefieldname" {literal}onchange="fandl_simple_sms(this.id,Array('numbers','choiceG','numlist'));"{/literal}/>
                            </form>
                            <input type="hidden" id="filename" value=""/>
                            <iframe name="hiddenframe" style="display:none" >Loading...</iframe>

Javascript
Kôd:

var params = { upl_id: upl_id        };
                new Ajax.Request(
                        '/cust/klase/upload_progress.php',
                        {
                                'parameters':        params,
                                onSuccess: function(transport)
                                {
                                        var resp = transport.responseText;
                                        var odgovor;
                                        eval('odgovor = ' + resp);
                                       
                                        if(odgovor.status == "OK")
                                        { 
                                                $('uploadedfile').update("Uploaded "+odgovor.trenutno+"kb from "+odgovor.total+"kb");
                                               
                                                if(odgovor.procenat!=100)
                                                        setTimeout("waitUpload('"+upl_id+"')",300);
                                        }
                                        else if (odgovor.status == 'LARGE')
                                        {
                                                $('uploadedfile').update(odgovor.message);
                                                return;
                                        }
                                }
                        }
                );

PHP skripta koja obradjuje velicinu obradjenog dela fajla
Kôd:

if(isset($_REQUEST['upl_id']))
{
    $status = apc_fetch('upload_'.$_REQUEST['upl_id']);
    if($status['total']>10000000)
    {
        echo json_encode(Array('status' => 'LARGE','message' => 'File is larger then 10 MB'));
        return;
    }
    $procenat=round($status['current']/$status['total']*100);

    echo json_encode(Array('status' => 'OK','procenat' => $procenat, 'total'  => round($status['total']/1000), 'trenutno' => round($status['current']/1000)));
}

E sad problem je sto to sve na development serveru radi kako treba, dok na live serveru apc_fetch vraca false ili nista.
Da li je neko imao ranije neko iskustvo sa APC kesiranjem i progres barom za upload fajlova.

Hvala unapred.

LiquidBrain 10. 11. 2010. 13:35

Koja verzija APC-a je na serveru, u 3.1.5 je ispravljen bug koji je bio zasluzan za dupliranje kljuceva u APC-u, tako da cache ne radi kako treba...

vladapopster 10. 11. 2010. 13:42

Apc
 
PHP Version 5.3.1

APC Version 3.1.5-dev

Sa podesavanjima:
Kôd:

Directive        Local Value        Master Value
apc.cache_by_default        On        On
apc.canonicalize        On        On
apc.coredump_unmap        Off        Off
apc.enable_cli        Off        Off
apc.enabled        On        On
apc.file_md5        Off        Off
apc.file_update_protection        2        2
apc.filters        no value        no value
apc.gc_ttl        3600        3600
apc.include_once_override        Off        Off
apc.lazy_classes        Off        Off
apc.lazy_functions        Off        Off
apc.max_file_size        1M        1M
apc.mmap_file_mask        no value        no value
apc.num_files_hint        1000        1000
apc.preload_path        no value        no value
apc.report_autofilter        Off        Off
apc.rfc1867        On        On
apc.rfc1867_freq        0        0
apc.rfc1867_name        APC_UPLOAD_PROGRESS        APC_UPLOAD_PROGRESS
apc.rfc1867_prefix        upload_        upload_
apc.rfc1867_ttl        3600        3600
apc.shm_segments        1        1
apc.shm_size        30M        30M
apc.slam_defense        Off        Off
apc.stat        On        On
apc.stat_ctime        Off        Off
apc.ttl        7200        7200
apc.use_request_time        On        On
apc.user_entries_hint        4096        4096
apc.user_ttl        7200        7200
apc.write_lock        On        On


LiquidBrain 10. 11. 2010. 15:29

hm... pogresan kljuc pokusavash da izvadish...

ovo ti ne valja...
Kôd:

    $status = apc_fetch('upload_'.$_REQUEST['upl_id']);

treba da bude
Kôd:

$status = apc_fetch('upload_'.$_REQUEST['APC_UPLOAD_PROGRESS']);
Pozz

vladapopster 10. 11. 2010. 17:16

Apc
 
Probao sam i sa APC_UPLOAD_PROGRESS, ali javlja sada i na devu gde je radilo:
PHP Notice: Undefined index: APC_UPLOAD_PROGRESS in upload_progress.php on line 10
i apc_fetch: false

A u:
Kôd:

<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="{$upl_id}" />
Vrednost koja se smesta u apc_store APC_UPLOAD_PROGRESS je value="{$upl_id}

Tako da je
Kôd:

$status = apc_fetch('upload_'.$_REQUEST['upl_id']);
mislim ok, posto vec radi.

Nego posle nekog istrazivanja i testiranja, moguce da je problem u verziji apc-a, koja je 3.1.5-dev, koja cini mi se nije jos stable, pa baguje, a na dev serveru je 3.0.19 i sve radi kako treba.

LiquidBrain 10. 11. 2010. 19:59

Hm... da, sorry, moja greshka...

3.0.19 je poslednji stable, sve ove bete imaju neki problem... Iako je mozda neki novi bug u ovim novim verzijama, meni 3.1.5 radi...

probaj da nakon file uploada ili josh bolje za vreme istog, istampash sve cache entrije sa apc_cache_info().

mozda tako vidish sta i dal uopste setuje nesto...

Pozz

vladapopster 11. 11. 2010. 10:26

Apc
 
Da, videcu sa administratorima da instaliraju 3.0.19, koji je stable i koji radi na drugom serveru.
Plus, ova verzija filuje php error log sa gomilom gresaka tipa "PHP Warning: include() [function.include]: Unable to allocate memory for pool. in /index_dispatcher.php on line 5
".

Takodje ima jos jedan problem, svaki HTTP request je hendlovan od php procesa (istog ili razlicitog, zavisi od konfiguracije), ukoliko jedan proces hendluje sam upload i u njemu se izvrsava move_uploaded_file, a ajaxom gadjate drugu skriptu u kojoj fetchujete apc (apc_fetch), ako je taj drugi http request hendlovan od strane drugog PHP procesa (sto se moze proveriti sa getmypid() ), apc nece moci da ih fetchuje jer nema mogucnost da se sheruje kroz razlicite procese, tako da cete dobiti false, iako je apc_cache_info() vratio:

Kôd:

num_slots | 1031
[11-Nov-2010 09:12:23] ttl | 7200
[11-Nov-2010 09:12:23] num_hits | 72772
[11-Nov-2010 09:12:23] num_misses | 2084
[11-Nov-2010 09:12:23] num_inserts | 3086
[11-Nov-2010 09:12:23] expunges | 1184
[11-Nov-2010 09:12:23] start_time | 1289407704
[11-Nov-2010 09:12:23] mem_size | 31048032
[11-Nov-2010 09:12:23] num_entries | 244
[11-Nov-2010 09:12:23] file_upload_progress | 1
[11-Nov-2010 09:12:23] memory_type | mmap
[11-Nov-2010 09:12:23] locking_type | pthread mutex
[11-Nov-2010 09:12:23] cache_list | Array
[11-Nov-2010 09:12:23] deleted_list | Array



Vreme je GMT +2. Trenutno vreme je 13:54.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.