2009-03-04 2 views
1

좋아 어떤 종류를 얻을, 그래서 페이지의 몇 봤 다음과 같은 해결책을 마련했습니다나는 PHP 관련 오류

이 htaccess로 이 추가 의 .js 및 .CSS에 대한
#Active GZIP for php-files 
php_flag zlib.output_compression On 
php_value zlib.output_compression_level 5 

이 : PHP 스크립트로 .CSS뿐만 아니라의 .js를 실행합니다

AddHandler application/x-httpd-php .css .js 
php_value auto_prepend_file /Library/WebServer/Documents/blog/code/Helpers/ContentHeader.php 

.

<?php 
    $pathInfo = pathinfo($_SERVER['PHP_SELF']); 
    $extension = $pathInfo['extension']; 

    if($extension == "css") 
    { 
     header("Content-type: text/css"); 
    } 
    if($extension == "js") 
    { 
     header("Content-type: text/javascript"); 
    } 
?> 

자바 스크립트 파일에 파일 및 "텍스트/자바 스크립트".CSS하는 헤더 "텍스트/CSS를"보내드립니다 : 두 번째 행은 다음 페이지를 포함하고 있습니다. 여태까지는 그런대로 잘됐다.

<br /> 
<b>Parse error</b>: syntax error, unexpected ']' in <b>/Library/WebServer/Documents/blog/public/scripts/prettify/prettify.js</b> on line <b>18</b><br /> 

나 :

<br /> 
<b>Warning</b>: Unexpected character in input: '\' (ASCII=92) state=1 in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br /> 
<br /> 
<b>Parse error</b>: syntax error, unexpected '?' in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br /> 

그래서,이 일을 더 나은 방법이 문제는 그러나 내가 PHP 오류의 어떤 종류를 얻을 사용 축소 된 자바 스크립트의 부부와 함께 무엇입니까? 내가 얻을 수있는 유일한 옵션은 수동으로 .javascript 파일에 들어가서 PHP가 좋아하지 않는 "오류 수정"입니다. 그러나 쉬운 솔루션이되어서는 안됩니까?

답변

1

이 오류가 발생하는 이유는 스크립트에 <?이 포함되어 있기 때문입니다. 예를 들어, prettify.js이있다 : 즉 다시가는 PHP 엔진을 시작하고 예상치 못한 ]를 볼 수 있도록

/^[^<?]+/ 

당신은, PHP에이를 통과하고 있습니다.

@ jonstjohn의 방법으로 가거나 @ cletus의 경우 더 많은 제어가 필요합니다.

+0

참 참. 감사. 나는 그것에 대해 생각해 봤어야했다. mod_deflate가 활성화되어 있는지 내 호스트에 문의하겠습니다. – Fredrik

6

Apache Mod_Deflate을 사용하고 거기에 표시된 구성 예를 사용하십시오. PHP에서 해킹하지 않고도 훌륭하게 작동합니다.

+0

글쎄, 그 솔루션이 내 공유 호스트에서 작동하는지 모르겠습니다. 아니면 ...내가 아는 유일한 것은 내 공유 호스트에 zlib가 설치되어 있다는 것입니다. 그래서 PHP 확장을 사용하는 것을 선호합니다. – Fredrik

+0

Apache에서 mod_deflate도 사용합니다. – Powerlord

+0

확인. 하지만 이것이 내 공유 호스트에서 작동하는지 확신 할 수 없습니다. 따라서 zlib는 내 호스트에 설치되어있는 확장 기능을 사용하는 것을 선호합니다. – Fredrik

2

저는 실제로 PHP 스크립트에서 JS 파일을 제공합니다. 이 문제로 인해가 아니라 만료 헤더와 캐싱을 제어 할 수 있습니다. 일반적인 모델은 다음과 같습니다.

  • URL은 /script/blah.1234567890.js와 비슷합니다.
  • 해당 URL은 blah.js 파일의 mtime에서 생성됩니다.
  • 해당 URL은 .htaccess 파일의 다시 쓰기 규칙을 통해 js.php 스크립트로 전송됩니다.
  • 스크립트는 전달 된 mtime을 검사합니다. 캐시 된 버전의 mtime보다 이후 버전 인 경우 모든 JS 파일 (새 파일은 한 파일로 조합 된 다음 JSMin으로 축소)에서 새 캐시 된 버전을 생성합니다.
  • mtime이 스크립트보다 최신이 아닌 경우 캐시 된 버전이 제공됩니다.
  • 모든 경우 콘텐츠는 지금부터 1 년 후에 만료되도록 설정됩니다.

URL의 타임 스탬프는 스크립트 파일을 새로 고치는 것을 허용합니다.

이제 gzipping과 어떤 관련이 있습니까? 단순한. 내 js.php 스크립트의 상단에 : 클라이언트가 지원하는 경우 (뿐만 아니라 출력 버퍼링을 사용하는 등) gzip 압축 켜집니다

ob_start("ob_gzhandler") 

.

실제로 작동합니다.

정확히 하나의 JS와 하나의 CSS 파일로 시도하고 제한하십시오. 필요한 경우 그들을 결합하십시오. 나는 CSS 파일과 동일한 트릭을 수행한다.

이 솔루션의 장점은 mod_rewrite가 활성화되어 있어야한다는 것입니다. 다른 확장은 필요하지 않습니다 (ob_gzhandler는 PHP의 표준 부분입니다). 게다가 스크립트를 사용하여 파일을 결합해야합니다 (빌드 프로세스의 일부로 수행하지 않는 한,이 작업은 좀 지루한 작업입니다).

+0

그래, 나도 같은 종류의 버전 시스템을 사용한다. (거의) 그렇지만 PHP가 (또는 .js 파일) 위에 ob_start ("ob_gzhandler")를 추가하면 PHP가 여전히 문제가 될 것이므로 문제가 해결 될지 의심 스럽다. 질문에 언급 된 것과 같은 자바 스크립트 라인에 불평. 나는 그것을 시도 할 것이다. – Fredrik