2010-12-17 7 views
1

사용자에게 페이지를 표시하기 위해 XML 파일을 구문 분석하는 트래픽이 많은 사이트에서 작업하고 있습니다. gzip, 캐시 제어 등 기존 코드를 최대한 최적화하는 과정을 거치고 있습니다. simplexml_load_file을 사용하여 서버에 불필요한 스트레스를 가할 수 있습니다.동일한 서버에있을 때 HTTP를 통한 PHP simplexml_load_file?

사용자가 도메인 (http://xml.domain.com/)에서 페이지를로드하고 같은 물리적 서버의 하위 도메인 (http://xml.domain.com/)에서 XML을 검색합니다. 나는 현재 simplexml_load_file 사용하고 결과 $ 정보 나 필요한 출력과 같이 특정 당겨 수 있습니다 : 이제

$url = "http://xml.domain.com/directory/file.xml"; 
$info = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA); 

이 XML 파일은 동일한 물리적 서버에있는 경우, 문제는, 이러한하지 할 수있다 http를 통해 전화? , PHP 버전 5.2.6 및 Plesk를 8.6.0을 제가 아파치/2.2.3 (CentOS는)를 실행하고있어

$url = "/var/www/vhosts/domain.com/subdomains/xml/httpdocs/directory/file.xml"; 

: 나는 아무 소용이 다양한 경로 변경을 시도했습니다. 나는 mediatemple (dv) 서버를 가지고 있습니다. 감사.

+0

우리 호스트는 PHP를 FastCGI로 실행하도록 권장하고 있습니다. http://wiki.mediatemple.net/w/DV:Run_PHP_as_FastCGI_and_resolve_Apache_permission_errors – willduder

답변

1

동일한 디스크에있는 경우 액세스 할 수 있습니다. PHP 파일에 XML 파일에 대한 액세스 권한이 있는지 확인하십시오. 무엇을 하든지 HTTP를 통해 호출하지 마십시오. 완전히 불필요한 시간 소비.

+0

PHP 파일 및 디렉토리는 777입니다. 어떤 권한에 대한 권장 사항이있을 수 있습니까? – willduder

+0

그게 문제가되지 않을 수도 있습니다. 당신은 "아무 소용이 없다"고 말합니다. 무슨 소리 야? "찾을 수 없음"오류가 발생합니까? – Jonah

+0

오류 없음, 단지 빈 변수. – willduder

3

xml 파일의 경로는 설정에 따라 다릅니다. http를 통해 전화를 걸지 않아도됩니다. 그러나 xml 파일에 PHP 코드가 포함되어 있으면 PHP 인터프리터를 통해 수동으로 실행해야합니다.

속도를 높이려면 각 요청에서이 xml 파일을 실제로 구문 분석해야하는 경우 다시 생각해 봐야합니다. 상황에 따라 약간 달라집니다. memcached와 같은 것을 사용하여 몇 초/분/시간 동안 출력물을 캐싱 할 수 있으며 http 호출 만 바꾸는 것보다 더 나은 결과를 얻을 수 있습니다.

+0

예, def는 XML을 구문 분석해야합니다. 내용은 매 분마다 업데이트되는 정적 XML 파일 (유효, PHP 없음)입니다. – willduder

0

개인적으로 필자는 SimpleXML에서 DOMDocument로 이동했습니다.

당신은

 
$xmldoc = new SimpleXMLElement(file_get_contents($file)); 
//or 
$xmldoc = new DOMDocument(); 
$xmldoc->loadXML(file_get_contents($file); 

권한 문제가 있습니다뿐만 아니라 감옥/suexec를-ED 경우로 사용할 수 있습니다.

0

파일 권한을 제외하고는 파일 시스템 경로를 사용할 수 없어야하는 이유가 없어야합니다.

+0

어떤 파일 권한이 잘못 될 수 있는지 알기 원하십니까? XML과 PHP 모두 777에서 테스트되었습니다. – willduder

0

XML에 구문 분석해야하는 PHP가없는 경우 (svens에서 설명한 것처럼) 코드를 잘 작성해야합니다. 또한 성공을 테스트하는 경우 ==과 반대로 완전 균등 연산자 ===을 사용해야합니다. 그것은 당신의 문제 일 수 있습니다.

+0

아니요, 테스트 결과 $ info가 비어 있다는 것을 보여줍니다. – willduder

+0

'simple_xml_load_file()'에 제공하는 것과 동일한 경로로'file_get_contents()'를 사용하면 어떻게 될까요? – prodigitalson

+0

동일한 것이 변수는 오류가보고되지 않고 비어 있습니다. – willduder