문제

아직 해결책을 찾지 못하는 매우 이상한 버그가 있습니다. 업데이트 아래 솔루션을 참조하십시오

내가하려는 것은 전체 크기 사진을 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 기능을 사용해 보았지만 작동하지 않았습니다. 여기 누군가가 해결책을 알고 있다고 생각했을 것입니다.

사용 중입니다

  1. MAMP 1.7.2
    • Apache/2.0.59
    • PHP/5.2.6

감사!

업데이트

다음의 종속성을 업데이트했습니다

  1. libpng from 1.2.35 to 1.2.37
  2. libiconv from 1.12_2 to 1.13_0
  3. 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 비활성화되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top