Laravel의 tinker로 일본어를 입력 할 수 없어 곤란했지만 어떻게 든 이야기
5128 단어 AmazonLinux2라라벨PHP7centos7PSysh
TL;DR
Amazon Linux 2 또는 CentOS 7에서 손(?).
Laravel 의 tinker 1 포함하는 psysh 2 이나 PHP 의 대화 쉘 3 등으로 일본어 입력을 할 수 없었다.
libedit를 새로운 것으로 바꿔서 해소했다.
끝
환경
환경 1(CentOS7)
$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
$ php -v
PHP 7.2.10 (cli) (built: Sep 11 2018 11:22:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.10, Copyright (c) 1999-2018, by Zend Technologies
$ php artisan --version
Laravel Framework 5.5.44
환경 2(AmazonLinux2)
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)
$ php -v
PHP 7.2.15 (cli) (built: Feb 7 2019 20:10:03) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.15, Copyright (c) 1999-2018, by Zend Technologies
$ php artisan --version
Laravel Framework 5.5.44
발생 이벤트
echo '日清どん兵衛';
를 실행하고 싶지만,입력해도, 복사&붙여넣어도 일본어 문자열이 사라져 버린다.
대화 쉘
$ php -a
Interactive shell
php > echo '';
psysh
$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.2.14 — cli) by Justin Hileman
>>> echo '';
탭 보완이나 히스토리는 기능한다.
터미널이나 php.ini 설정을 의심했지만 특별한 문제는 없었습니다.
조사
$ php artisan tinker --quiet
>>> readline_info();
=> [
"line_buffer" => "readline_info();\n",
"point" => 0,
"end" => 0,
"library_version" => "EditLine wrapper",
"readline_name" => "",
"attempted_completion_over" => 0,
]
$ yum info -q libedit.x86_64
# 略
$ ldd `which php` | perl -nwlE'/(.*libedit\.so.\d+)/&&say$1'
libedit.so.0 => /lib64/libedit.so.0
$ file /lib64/libedit.so.0
/lib64/libedit.so.0: symbolic link to `libedit.so.0.0.42'
(´・ω・`)
libedit 업데이트
설치하지 않은 경우 먼저
gcc
또는 ncurses-devel
4을 도입하십시오.$ sudo yum install -y gcc.x86_64
$ sudo yum install -y ncurses-devel.x86_64
Editline Library (libedit) 에서 소스 코드를 얻고 컴파일한다.
$ curl https://www.thrysoee.dk/editline/libedit-20190324-3.1.tar.gz -O
$ tar zxvf libedit-20190324-3.1.tar.gz
$ cd libedit-20190324-3.1/
$ ./configure
$ make
$ sudo cp -i ./src/.libs/libedit.so.0.0.60 /lib64/
루트로 작업 (잡)
# cd /lib64/
# unlink libedit.so.0
# ln -s libedit.so.0.0.60 libedit.so.0
확인
대화 쉘
$ php -a
Interactive shell
php > echo '日清どん兵衛';
日清どん兵衛
psysh
$ php artisan tinker -q
>>> echo '日清どん兵衛';
日清どん兵衛⏎
(๑•̀ㅂ•́)و✧
완주한 감상
Google 선생님에게 물어도 비슷한 사건으로 어려움을 겪고있는 사람은 없으며,
낡은 버젼의 PHP나, mbstring 이나 readline 가 없다고 하는 것, Windows 로의 이야기나 터미널의 설정의 이야기등이 많이 히트해, 정답에 도착하지 않고 곤란했습니다.
참고 및 주석
Laravel 5.5 Artisan 콘솔 ↩
psysh ↩
PHP 매뉴얼 > 기능 > 명령줄 사용법 ↩
Error configuring libedit #3751 ↩
Reference
이 문제에 관하여(Laravel의 tinker로 일본어를 입력 할 수 없어 곤란했지만 어떻게 든 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/B73W56H84/items/a9152ec00cd7996f6573텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)