2011-08-18 3 views
0

내가 PHP에서 웹 응용 프로그램을 쓰고 있어요, 나는 단지 구글 크롬에서 다음과 같은 경고 납니다 :Chrome에 PHP 경고가 표시되지만 다른 브라우저에서는 표시되지 않는 이유는 무엇입니까?

경고 :M에 배열로 스칼라 값을 사용할 수 없습니다 : \ XAMPP \ htdocs를 \ MyProjectTitle 라인에서의 PHP \의 classes.php \ 18

배경 : 웹 응용 프로그램은 내가 (파이어 폭스, 크롬, IE)를 테스트 한 모든 브라우저에서 잘 작동 있습니다 만 크롬에 나타나는 경고가 저를 도망칩니다.

참고 : Chrome을 다시 시작하고 Chrome 캐시를 지우려고했습니다. 컴퓨터를 다시 시작하려고했습니다. FF와 IE에서 소스 코드를 검색해 보았습니다. 경고가 숨겨져 있었는지 알 수는 없었습니다. 경고는 Google 크롬에서만 나타납니다. 그 이유는 모르겠습니다.

업데이트 : Safari에서도 WebKit을 사용하지만 PHP 경고를 표시하지 않습니다. 어떤 이유로 Chrome은 PHP 경고가있는 유일한 브라우저입니다. 이상한 물건들!

업데이트 :

class Presenter { 
    public function includeFile($filePath) { 
     if (is_readable($filePath)) { 
      include $filePath; 
     } else { 
      echo '<p><strong>ERROR 404</strong></p>'; 
      echo '<p>The resource you requested could not be located.</p>'; 
     } 
    } 

    public function sanitize($string) { 
     return preg_replace("/\s/","_",$string); 
    } 

    public function set($varname,$value) { 
     $this->$varname = $value; 
     $_SESSION[$this->name][$varname] = $value; 

     return $this; // enables chaining! 
    } 

    // And there's more code after this, but I have cut it out here. 
} 

주 : 다음 코드의 제 21 행의 상기 코드는 PHP 클래스 안에.

업데이트 : Chrome에서 경고의 원인이되는 코드 줄을 정확히 알고 있습니다 (Chrome이 경고를 표시하는 유일한 브라우저인지 아직 알 수는 없지만). Chrome의 경고에도 불구하고 webapp이 완벽하게 작동하기 때문에 Chrome의 경고를 표시하지 않으려면 @을 사용했습니다. 나중에 경고를 해결할 예정입니다.

+1

'M : \ xampp \ htdocs \ MyProjectTitle \ php \ classes.php' 코드를 게시하십시오. – J0HN

+0

CTRL 키를 누른 상태에서 F5 키를 눌러 캐시가 새로 고쳐 졌습니까? PHP가 서버 측이기 때문에 Chrome이 이상한 헤더 나 뭔가를 보내지 않는 한 어떤 문제가 발생할 수 있는지 잘 모르겠습니다. – Devator

+0

@ JOHN하지만 코드가 많이 있습니다. PHP가 크롬에서만 경고를내는 것이 왜 가능한지에 대한 설명을 찾고 있습니다. :) – Titus

답변

1

업데이트 : Chrome에서 경고를 표시하는 코드 줄을 정확히 알고 있습니다. (크롬이 경고를 표시하는 유일한 브라우저인지 아직 모르지만 ... 알고 계시면 알려주세요.).Chrome의 경고에도 불구하고 webapp이 완벽하게 작동하기 때문에 나중에 실제 문제를 해결할 때까지 임시 수정으로 경고를 표시하지 않기 위해 @을 사용했습니다.

0

아마도 다른 브라우저에서 ctr + f5를 수행하거나 다시 시작해야하기 때문일 수 있습니다. 캐시 된 페이지의 이전 버전이 Internet Explorer 8에서 나에게 많이 발생했습니다.

+0

@ Tim Fennis의 제안에 감사드립니다. 그러나 나는 그것을 시도했지만 (컴퓨터를 다시 시작한) 아무 소용이 없습니다. 경고는 Google 크롬에서만 지속적으로 나타납니다. – Titus

1

Chrome에서 다른 데이터를 서버로 보내므로이 오류가 발생합니다. $ _POST 데이터 또는 $ _GET 데이터가있는 경우 다른 브라우저에서 보내는 데이터로 확인하십시오. 선택한 내용을 print_r() 또는 var_dump()으로 쉽게 표시 할 수 있습니다.

1

이 보통 일이 당신이 뭔가 브라우저 별을하기 때문에 (아마도 당신이 무언가 IE 특정하고, firerfox 별 다른 브라우저에 대한 "기본"케이스를 추가하는 것을 잊었다?)

+1

** 서버 코드 **에서 * 브라우저 특정 *을 어떻게 수행한다고 생각하십니까? $ _SERVER [ 'user-agent'] ...를 사용하여 – J0HN

+2

... – Quamis

+0

왜 "-"? ... – Quamis

4

는 대부분의 경우 그것은이있다 :

$_SESSION[$this->name][$varname] = $value; 

$_SESSION[$this->name]이 배열 이전으로 정의되지 않은 경우, 당신은 "스칼라를 사용할 수 없습니다 배열로"오류가 발생합니다. 예 : 그럴 경우

$_SESSION[$this->name] = 42; 
$_SESSION[$this->name][$varname] = 'will not work'; 

오류가 발생합니다.

1

기본적으로 UNDEFINED 변수 (또는 변수를 설정하지 않음)에 액세스하려고하기 때문에이 문제가 발생합니다.

PHP는 일반적인 프로그래밍 실수를 생략하고 다른 언어에서는 허용하지 않습니다.

좋아 당신은 같이 프로그램을 시작하는 경우 :

<?php if(eregi("hi",$hello)) { echo "hi"; } ?> 

이 "메시지" 통지를 받게됩니다 : 정의되지 않은 변수 : 안녕하세요 C에서 : 라인 \ var에 \ www가 \의 test.php를 1

당신은 그것을 미리 정의 된 sould : <?php $hello = "hello"; if(eregi("hi",$hello)) { echo "hi"; } ?>

아니면 이전 값의 제거를 방지하기 위해 조건 : $hello = isset($hello) ? $hello : null;

,691을

이 코드는 더 이상 사용되지 않는 함수 메시지를 보냅니다. 이 메시지는 서버의 php.ini의 구성에 의해 발생하는 이유는이 같은했기 때문에

는,이 일어나고있다 :

display_error = ON을; error_reporting = E_ALL;

할 sould 뭔가 같은 :

display_error =에; 는 error_reporting = E_ALL & ~ E_NOTICE & ~ E_STRICT

이, 당신은 사용되지 않는 메시지를받을 경우 또한 ~ E_DEPRECATED 추가 할 수

방법 지금까지이 메시지를 받고, 수단을 모든 통지 메시지를 제거하고 PHP보다 permisive 것 당신은 좀 더 정교한 프로그래머가되어야합니다! 그렇습니다. 더 많은 테디 우스가 있지만 어떤 사람들은 그것을 만들어야합니다!

관련 문제