Imagemagick : PNG 실패 변환 PHP를 통해 Bash Shell을 통해 작동합니다.
-
06-07-2019 - |
문제
아직 해결책을 찾지 못하는 매우 이상한 버그가 있습니다. 업데이트 아래 솔루션을 참조하십시오
내가하려는 것은 전체 크기 사진을 160x120 썸네일로 변환하는 것입니다. 그것은 모든 크기의 JPG 및 JPEG 파일에서 잘 작동하지만 PNG는 아닙니다.
imagemagick 명령 :
/opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'
PHP 기능 (단축)
...
$cmd = "/opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'";
exec($cmd, $output, $retval);
$errors += $retval;
if ($errors > 0) {
die(print_r($output));
}
이 함수가 $ retval 동일 1을 실행하는 경우 1은 Convert 명령이 실패 함을 의미합니다 (썸네일이 생성되지 않음).
내 껍질에서 똑같은 명령을 실행하면 흥미로운 곳입니다.
wedbook:~ wedix$ /opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'
wedbook:~ wedix$
System, Passthru와 같은 다른 PHP 기능을 사용해 보았지만 작동하지 않았습니다. 여기 누군가가 해결책을 알고 있다고 생각했을 것입니다.
사용 중입니다
MAMP 1.7.2
Apache/2.0.59
PHP/5.2.6
감사!
업데이트
다음의 종속성을 업데이트했습니다
libpng from 1.2.35 to 1.2.37
libiconv from 1.12_2 to 1.13_0
ImageMagick 6.5.2-4_1 to 6.5.2-9_0
그러나 내 문제를 해결하지 못했습니다.
두 번째 업데이트
마침내 기능이 실행될 때 도움이 될 수있는 것을 발견했습니다. 이것은 Apache 로그에서 인쇄됩니다.
dyld: Library not loaded: /opt/local/lib/libiconv.2.dylib
Referenced from: /opt/local/bin/convert
Reason: Incompatible library version: convert requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0
세 번째 업데이트
libiconv.2.dylib는 버전 8.0.0입니다 ...
bash-3.2$ otool -L /opt/local/lib/libiconv.2.dylib
/opt/local/lib/libiconv.2.dylib:
/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
네 번째 업데이트
문제는 MAMP와 관련이 있습니다. 아래 솔루션을 참조하십시오
해결책
해결했습니다!
환경 변수가 밝혀졌습니다 DYLD_LIBRARY_PATH
제대로 설정되지 않았습니다.
Mac OS X Leopard는 Libiconv 7.0.0과 함께 제공되지만 변환은 8.0.0이 필요합니다 (위의 두 번째 업데이트 참조)
bash-3.2$ otool -L /usr/lib/libiconv.2.dylib
/usr/lib/libiconv.2.dylib:
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)
Imagemagick 및 모든 의존성은 MacPorts Under와 함께 설치되었습니다 /opt/local
. 경로/opt/local/lib를 수동으로 추가해야합니다. DYLD_LIBRARY_PATH
.
경로를 추가하면 /opt/local/lib
에게 DYLD_LIBRARY_PATH
Mac OS X Leopard에서 apachectl
Envvers 파일 /usr/sbin/envvars
작동하지 않습니다. 왜요? Mac OS X Leopard의 Apache를 사용하지 않기 때문에 Mamp를 사용합니다.
맘 자체가 있습니다 apachecectl 스크립트 그리고 그것은 자신의 것입니다 Envvers 파일.
나는 길을 추가했다 /opt/local/lib
에게 DYLD_LIBRARY_PATH
MAMP에서 apachectl
Envvers 파일 /Applications/MAMP/Library/bin/envvars
DYLD_LIBRARY_PATH="/opt/local/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
이제 내 PNG 썸네일이 생성되고 Apache 오류 로그에서 오류가 발생하지 않습니다!
이것이 누군가에게 도움이되기를 바랍니다. 다음에 도움을 요청하기 전에 모든 로그 파일을 확인하는 것을 기억합니다!
필
다른 팁
내 길은/opt/local/bin 이었지만 Dyld_library_path에 그것을 추가하는 것도 작동하지 않았습니다. 마지막으로 평범한 올레 경로를 변경했을 때 PHP를 통해 작동했습니다.
;작동하지 않았다...
; dyld_library_path = "/opt/local/bin :/applications/mamp/library/lib : $ dyld_library_path"
; dyld_library_path 내보내기
; 이것은 작동합니다!
내보내기 경로 = "$ path :/opt/local/bin"
PHP 코드를 실행하는 사용자가 파일 및 디렉토리에 대해 동일한 권한이 있는지 확인하십시오.
이것들은 분명해야하지만 PHP Safe Mode, Open_basedir 및와 같은 것을 확인해야합니다. exec
비활성화되었습니다.