2012-06-06 2 views
0

CodeIgniter 2.1을 사용하고 프로덕션 서버를 PHP 5.4.3-1로 업데이트했으며 phpactiverecord를 사용하는 페이지는 아무 것도 표시하지 않으며 표시하지 않습니다. 어떤 오류.치명적인 오류 : PHP 버전 업그레이드 후 '카테고리'클래스가 없습니다.

내 테스트 서버에서 5.3.6이 정상적으로 작동합니다.

2012 년 5 월 야간 빌드 버전을 사용합니다. 이전 버전 및 안정 버전을 사용해 봅니다.

php-activerecord는 PHP 5.4.3에서 제대로 작동하지 않습니까?


편집 : 내 새로운 서버 나던가 displays_errors = ON을 가지고 있음을 발견했다. 후 내가 오류를 참조 활성화 :

Fatal error: Class 'Category' not found in /srv/www/framework/application/controllers/categories.php on line 26 

라인 26 :

$data["categories"] = Category::findby($parent_id); 

categories.php는 /srv/www/framework/application/controllers/에 존재하고 이것은 PHP 5.3.6에서 잘 작동합니다.

더 많은 것을 호출해야하거나 다른 방식으로 전화해야합니까?

+0

해당 줄이 네임 스페이스가있는 파일에 있습니까? 클래스가 네임 스페이스가있는 파일에 정의되어 있습니까? – Nanne

+1

오토로더에 문제가있는 것 같습니다. CodeIgniter에서 이것이 어떻게 작동하는지 모르지만 디버깅 할 수있는 PHP입니다. 나는 5.4.x가있는 새로운 가상 서버를 설정하고 문제를 로컬로 복제함으로써 시작하겠다. 또한 알려진 문제 일 경우 CI 메일 링리스트를 확인하십시오. – halfer

+0

또한'Category'는 모델 클래스입니까? – halfer

답변

0

해결책을 찾았습니다.

이 솔루션은 최신 SPARKS 버전의 php-activerecord 용입니다.

autoload_function을 디버깅하면서, 모델 파일은 첫 번째 글자가 대문자로 시작되고, PHP 5.4.3에서만, 5.3.x에서는로드되지 않았으며, 파일은로드되지 않았습니다.

yourfolder/sparks/php-activerecord/0.0.0.2/vendor/php-activerecord 

에서 함수 ActiveRecord.php 검색 찾기 :

activerecord_autoload($class_name) 

라인을 49 변화 :

$file = $root.DS.$file_name; 

$file = $root.DS.strtolower($file_name); 
에 대한

그리고 이제 작동합니다!

p.d. 이 문제를 해결하기 전에 PHP 5.4.3에서 또 다른 이상한 사례를 발견했습니다. parse_url() 함수는 데이터베이스 비밀번호의 문자열에 '/'가 있으면 false를 반환합니다. 이 때문에 php-activerecord는 file : yourfolder/sparks/php-activerecord/0.0.0.2/vendor/php-activerecord/lib/connection.php 파일의 데이터베이스에 연결할 수 없습니다 : file parse_connection_url().

PHP 5.3에서는 올바른 배열을 반환합니다.

관련 문제