Maris-S Posted June 3, 2009 Report Share Posted June 3, 2009 Sakonfigurēju php ar php_apc.dll, lai varētu izveidot uploada progress baru. Viss smuki sanāca, bet reālais projekts, kur to vajag, ir sataisīts ar zend framework. Problēma tā ka ja es mēģinu ielādēt uz zenda izveidoto lapu, tad uzkarās apache, logos parādās šāda kļūda: [apc-error] Cannot redeclare class zend_controller_action_helperbroker Vai ir iespējams šo apc moduli darbināt ar zend frameworku, varbūt kāds ir saskāries ar līdzīgu problēmu un sanācis viņu atrisināt? Quote Link to comment Share on other sites More sharing options...
torrentz Posted June 5, 2009 Report Share Posted June 5, 2009 cik sapratu, tad kaut kur klase zend_controller_action_helperbroker ir ievietota 2reiz. jāatrod un jāizdzēs lieko šīs klases dubultnieku Quote Link to comment Share on other sites More sharing options...
Maris-S Posted June 8, 2009 Author Report Share Posted June 8, 2009 (edited) Ar vien vairāk sāk izskatīties ka pie dažādiem nosacījumiem apc modulis varētu nestrādāt ar lapu, kas saprogrammēta OOP, neesmu par to pārliecināts, bet tāda aizdoma. Divas reizes klase nav ievietota, disablojot apc kods smuki sāk strādāt. Edited June 8, 2009 by Maris-S Quote Link to comment Share on other sites More sharing options...
v3rb0 Posted June 8, 2009 Report Share Posted June 8, 2009 Tur nav kaut kas ar to bloat'oto ZF veidu faila includošanai? Pamēģini kaut kur pielikt parastu require_once('zend/controller/action/helperbroker.php') vai arī failā zend/controller/action/helperbroker.php esošo kodu ielikt if(class_exists('Zend_Controller_Action_Helperbroker') == false) { ... } Quote Link to comment Share on other sites More sharing options...
Maris-S Posted June 9, 2009 Author Report Share Posted June 9, 2009 Bišku veicu dažāduz mēģinājumus ar apc. Jo vairāk es viņu pētu, jo vairāk nesaprotu. Izskatās ka ar OOP nav nekāda sakara, var viņš strādāt ar php klasēm mierīgi. Mēģinot atrast kļūdas komentēju koda daļas, lai atrastu atbilstošās vietas, kurās ir kļūdas. Pēc vairākiem komentāriem protams viss aizgāja. Pa bišķiņai komentārus samazinot nonācu līdz tam, ka atkomentēju visu atpakaļ un kods palika tāds kā viņam jābūt un kā par brīnumu viss sāka strādāt, kaut gan pēc loģikas nevajadzētu tā būt. Izmēģinot tālāk atklājās, ka tomēr dažas sadaļas turpināja nestrādāt, lai salabotu arī tās vajadzēja vienkārši atbilstošajos failos veikt kaut kādu izmaiņu (kaut vai tukšu rindiņu pievienot) un sāka strādāt arī viņas. Secinājums ir tāds, ka apc jau izveidotos failus vai nu sakešo nepareizi, vai arī vispār nekešo (nu vismaz dažreiz). Pēc noklusētiem uzstādījumiem apc sakešo failus, kuros ir izmaiņas. Loģiski jau būtu ka jaunu kodu, kuru viņš nav redzējis vispār, arī kešotu pilnībā. Gan jau ka viņš to dara, bet izskatās ka nevisai pareizi. Vēl dīvaini ir tas ka ne visos failos veicu izmaiņas, lai viņus sakešo, daži (lielākā daļa) aizgāja bez izmaiņām, pārsvarā vajadzēja mainīt klašu failus un tikai dažus vienkāršus php kodiņa failus. Quote Link to comment Share on other sites More sharing options...
Maris-S Posted June 9, 2009 Author Report Share Posted June 9, 2009 Visumā sapratu ka kešošanai šis modulis galīgi neder. Nomainīju visiem failiem date modified un vispār pārstāja strādāt. Tomēr, galvenais mērķis man ir iegūt failu augšupielādes progresa rādītāju, tāpēc koncentrējos uz šo padarīšanu. Varbūt ja kādam interesē risinājums, tad php.ini failā jāatslēdz apc.cache_by_default: apc.cache_by_default = Off Noklusēti ir ieslēgta, ja viņu atslēdz, tad kešošana notiek pēc filtriem (nav ne jausmas kas viņi ir), bet visumā sanāk ka viņš neko vairs nekešo kamēr to filtru nav un augšupielādes progresa rādīšanai tā pietiek. Quote Link to comment Share on other sites More sharing options...
marrtins Posted June 9, 2009 Report Share Posted June 9, 2009 Visumā sapratu ka kešošanai šis modulis galīgi neder. Tāda abominācija... No bez maksas pieejamiem PHP opcode cachiem šis tomēr ir vislabākais. Plus arī user cache API strādā lieliski. Pagaidām nav bijušas problēmas ar APC. Vabūt tomēr esi atradis bugu? Pamēģini kārtīgi izdebugot un atrast kurš tieši koda gabals rada problēmas... Quote Link to comment Share on other sites More sharing options...
Maris-S Posted June 10, 2009 Author Report Share Posted June 10, 2009 Tur jau tā lieta ka nav tāda konkrēta koda gabala, kā jau teicu, sākumā, kamēr nenomainīju failiem modificēšanas datumu, vajadzēja vienkārši ielikt kaut kādu izmaiņu, kaut vai tukšu rindiņu, vienalga ko, lai būtu izmaiņa, vēlāk noņemot viņu arī turpināja strādāt (gala rezultātā kods bez izmaiņām), vēl pamanīju, ka funkcija apc_cache_info() atgriež problemātiskos failus deleted_list masīvā, ko viņš nozīmē es nezinu, dokumentācijā neatradu, pēc loģikas spriežot vajadzētu tā kā būt failam, kurus viņš negrib sakešot vai kaut kā tam līdzīgi. Pie tam kā deleted viņi parādījās tikai tad, kad tā lapa daudz maz aizgāja, jo pirms tam (arī tagad pēc failu modifikācijas datuma nomaiņas) vienkārši nobrūk apache logos ierakstot kļūdu par kādas klases pārdefinēšanu: [Tue Jun 09 16:58:27 2009] [apc-error] Cannot redeclare class zend_registry in D:\web\agora\Zend\Loader.php on line 178. [Tue Jun 09 16:58:32 2009] [crit] Parent: child process exited with status 2 -- Aborting. Pirms es nomainīju failu modificēšanas datumus vismaz sanāca panākt, ka apache nenobrūk, vienīgi faili, kas izraisīja problēmas, vienkārši nenolasījās, tā koda daļa vienkārši nebija (dažiem failiem man ir vienkārši includoti valodu mainīgi, tāpēc sapratu ka koda daļa iztrūkst), apache error logos sekojošs paziņojums: [Tue Jun 09 13:09:05 2009] [notice] Apache/2.2.11 (Win32) PHP/5.2.9-2 configured -- resuming normal operations [Tue Jun 09 13:09:05 2009] [notice] Server built: Dec 10 2008 00:10:06 [Tue Jun 09 13:09:05 2009] [notice] Parent: Created child process 640 [Tue Jun 09 13:09:05 2009] [notice] Child 640: Child process is running [Tue Jun 09 13:09:05 2009] [notice] Child 640: Acquired the start mutex. [Tue Jun 09 13:09:05 2009] [notice] Child 640: Starting 64 worker threads. [Tue Jun 09 13:09:05 2009] [notice] Child 640: Starting thread to listen on port 80. Iespējams ka modulim nav ne vainas, vienīgi nezinu kāpēc viņš negrib strādāt, iespējams, ka viņš tā uzvedās pie konkrētiem nosacījumiem, jo uz maza atsevišķa koda man nesanāca atkārtot problēmu. Ja kļūdu paziņojumā ieraksta ka tiek pārdefinēta klase, iespējams ka sakešotu kodu kāda iemesla pēc izpilda divas reizes, kaut gan diezvai. Vēl ko pamanīju, ir tā ka problemātiskie failiem (pārsvarā, ne visiem) modificēšanas datums bija janvārī, tātad pus gadu neaiztikti, diezvai tas kaut ko ietekmē, visdrīzāk sakritība. Quote Link to comment Share on other sites More sharing options...
marrtins Posted June 10, 2009 Report Share Posted June 10, 2009 Parādi apache configu un php.ini, kas attiecas uz apc.* Quote Link to comment Share on other sites More sharing options...
Maris-S Posted June 10, 2009 Author Report Share Posted June 10, 2009 Apache configā neko neesmu licis saistībā ar apc, php.ini sekojošs: [APC] apc.rfc1867 = On apc.max_file_size = 500M apc.include_once_override = On apc.cache_by_default = Off apc.rfc1867_freq = 1k extension=php_apc.dll Šajā gadījumā ir apc.cache_by_default = Off, sākumā protams nebij šīs rindiņas. Iespējams ka gļukojas lapa kā tāda. Tur ir diezgan daudz includes un arī zend frameworkā taisītie kontrolieri samērā palieli. Vispār tā lapa ir pasmaga, man uzreiz likās ka labāk ar zendu viņu neprogramēt, arī te forumos izteicās ka veiktspējas ziņā zend frameworks lielākām lapām nevisai spīdošs. Tagad ir tā, ka manā lokālajā kompī ātri refrešojot lapu var nobrucināt apache (pieaug apache procesam izmantotā operatīvā atmiņa un pārstartē servisu), pēc sistēmas pārinstalēšanas arī tas pats. Nu vismaz serverus, kur šī lapa stāv, nevar uzkarināt. Uz serveriem apc nemēģināju likt, negribās eksperimentēt uz strādājošas sistēmas. Webs darbojās uz os windows. Quote Link to comment Share on other sites More sharing options...
marrtins Posted June 11, 2009 Report Share Posted June 11, 2009 No par apache es bi domājis uzmest aci, vai tur nav ierubīts kāds threading modelis. Kā zināms, PHP nav thread-safe :( Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.