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 부터 처리
이런식으로 처리해 두어도 된다.