본문 바로가기

Story/php

Warning: Unexpected character in input: '\' (ASCII=92) state=1 오류문제

반응형
Warning: Unexpected character in input: '\' (ASCII=92) state=1 이런 오류가 발생할경우 원인과 해결방법

 

얼마전 네이버 스마트 에디터를 사용하려 하는대 다음과 같은 오류가 발생했다.

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /path/filename.php on line xxx

 

한참을 뒤지다 구글링을 통해서 원인을 찾았다.

 

smarteditor2/photo_uploader/popup/php/UploadHandler.php 에서 Warning: Unexpected character in input: '\' (ASCII=92) state=1 이러한 오류들이 여러곳에서 발생했는대

 

php 5.3 이상에서 지원되는 네임스페이스가 원인이었다.

 

참고

네임스페이스 개요 

(PHP 5 >= 5.3.0, PHP 7)

네임스페이스란 무엇일까요? 넓은 의미로 볼 때 네임스페이스는 내용을 캡슐화 하는 방법중 하나입니다. 이것은 다양한 관점에서 추상적인 개념으로 볼 수 있습니다. 예를 들면 운영체제에서 디렉토리는 관련된 파일들의 그룹을 담당하고, 그 안에 있는 파일들의 네임스페이스 역할을 합니다. 구체적인 예로, 파일 foo.txt는 디렉토리/home/greg  /home/other에 각각 존재 할 수 있습니다. 하지만, foo.txt라는 두개의 사본은 동일한 디렉토리에 동시에 존재할 수는 없습니다. 게다가 /home/greg 디렉토리 바깥에서 foo.txt 파일에 접근하려면, 디렉토리 구분자와 함께 파일 이름 앞에 디렉토리 이름을 붙여서 /home/greg/foo.txt 처럼 접근해야 합니다. 이와 같은 원칙은 프로그래밍 세계에서 네임스페이스로 확장됩니다.

 

 

Example #1 Namespace syntax example

 

<?php
namespace my\name// see "Defining Namespaces" section

class MyClass {}
function 
myfunction() {}
const 
MYCONST 1;

$a = new MyClass;
$c = new \my\name\MyClass// see "Global Space" section

$a strlen('hi'); // see "Using namespaces: fallback to global
                   // function/constant" section

$d = namespace\MYCONST// see "namespace operator and __NAMESPACE__
                        // constant" section
$d __NAMESPACE__ '\MYCONST';
echo 
constant($d); // see "Namespaces and dynamic language features" section
?>
 

 

http://php.net/manual/kr/language.namespaces.rationale.php

 

 

 

오류가 발생한 서버의 php 버전은 5.2대였다.

 

해결은 UploadHandler.php 에서

 

\stdClass(), \Imagick(), \ImagickPixel, \imagick, \Imagick() 들을 찾아서 앞의 \ 를 지워주는것으로 해결을 했다.

 

if (version_compare(phpversion(), '5.3', '<')) // namespace는 5.3.0 이상부터 지원
   // 5.3 이하 처리
else
   // 5.3 부터 처리 

 

이런식으로 처리해 두어도 된다.

 

 

 

 

 

 

 

 

 

 

 

반응형