Sınıf sfconfig Redeclare

5 Cevap php

Windows XP üzerinde PHP Sürüm 5.2.11 ile Symfony (1.2.9) çalıştırıyorum.

Ben APC (Version 3.0.19) yüklü

Ben apc (işleri) düzgün çalıştığını kanıtlamak için bir PHP komut dosyası çalıştırabilirsiniz. Ben APC symfony eylem çağrıları kullanmaya çalıştığınızda Ancak, ben (apache error.log dosyasında) bu hatayı alıyorum:

[Apc-hata] sınıf sfconfig Redeclare

Hangi derhal Apache çöker.

Ben Symfony sfAPCCache sarıcı kullanarak çalıştı, ve sonra doğrudan apc_ * işlevleri çağıran - sonuç aynıdır. Bu neden oluyor biliyor mu?

5 Cevap

Ive APC ilgisi önce bu hatayı vardı ve her zaman önbelleği çalıştırmak için değil, sadece yardımcı oldu: açık ama aynı zamanda kontrol ve tüm dosyaları önbellek dir silinen emin olmak için.

I was living the same situation on my development windows system with php 5.2.11 and several apc versions. Same situation as described, with stat=0 everything works, but when I set stat=1, apache crashes with error "cannot redeclare class [some class]". The code is working on a different windows system, beside it is live on a heavily loaded linux production server for months. I'm %100 sure there is no bug related to apc. It started on my machine after I reinstalled my OS.

I spent some time commenting out some class includes and realized that it works with some include files but not with specific ones. I checked my code there is no noticeable difference on the class differences.

Then I saved all of my include files with adding some additional whitespaces with Zend Studio's editor. It looks stupid I know but it works!!! I'm working on the project with several people and using svn and everybody uses different text editors like notepad++, editplus etc...

However I couldn't reproduce the error by trying save the file with some different editors with different configs like ansi, utf8 with/without byte-mark ordering etc. But I'm sure my problem is something related to file format (encoding, pc/unix mode). I'd like to reproduce the error and want to give more detailed info but I tried my solution on another project with same problem, it works either.

Ben konuya başka bir bakış açısı verebilir umuyoruz.

Benim için bu çözülmesi emin benim aynı yolu vardı gerektirir yapım oldu.

For example, the error I got was:
[apc-error] Cannot redeclare class someClass

In file A I had the following:
require_once '/path/to/someClass.php';

In file B which resides in the same directory as someClass.php I had the following:
require_once 'someClass.php';

Ben yolu bir değil, diğeri için belirtilen çünkü APC önbelleğe onlar aynı dosya olduğunu anlamadı inanıyorum.

Bugün bu hata da, bana oldu, ve ben (diğer olası nedenler arasında) bu olabilir neden haberdar oldu.

APC doğru sınıfları ad içeren bir tam adı, her sınıfı tanımlar. Ne yazık ki çeşitli isimler ile aynı sınıfa atıfta sonunda olabilir.

Örneğin:

Ben bir isim alanı içinde olmuştu sanki olmayan bir isim alanlı sınıf ithal, benim kodunda yanlış bir "kullanım" ifadesi vardı.

Sınıfı, "Sınıfım" ad oldu "\", onun doğru ve tam adı "\ Sınıfım" olduğunu anlamına söylüyorlar.

Bir noktada sınıfın vasıfsız adıyla "Sınıfım" ile sevk edildi ve özdevinimli var. Başka bir dosyada I (yanlış) bir kullanım açıklamada bir ad alanı öneki ile sınıf anılacaktır, "\ SomeNamespace \ Sınıfım kullanın;" söylüyorlar. Sonuç sınıfı (yine) benim küresel __ autoload () yöntemine iletilen oldu, ama farklı bir isimle. Bunu yapmak için kötü, autoload yöntem zaten sınıf bulmak için yeterince akıllı.

Anında, Apache Web Sunucusu error.log içine "... [APC-hata] sınıfı Redeclare" benim komut dosyası çalışmayı durdurdu ve oldu ki tüm APC yazı oldu. Benim sayfaları artık kullanılabilir.

Bu APC olursa olsun hata, ama sadece doğru davranış değildir.

(Benim komut ne olursa olsun çatışmanın çalıştırmak olacağını böylece) Benim durumumda geçici APC devre dışı bırakmak için yardımcı oldu ve geçti parametrelerin listesini üreten benim __ özdevinimli_yükle işlevi içine bir echo deyimi kanca. Yanlış adıyla yüklenen sınıfı çabucak gösterecek, ve ben o ve yeniden etkinleştirmek APC düzeltmek olabilir.

Bu kimse yardımcı olur umarım.