2009-06-19 4 views
5

아직 솔루션을 찾을 수없는 매우 이상한 버그가 있습니다. 업데이트 아래 솔루션을 참조하십시오.ImageMagick : PHP를 통해 png가 실패하고 bash 쉘을 통해 작동합니다.

전체 크기의 그림을 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 동일 하나를 실행합니다.

내 셸에서 똑같은 명령을 실행하면 재미있는 부분입니다.

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$ 

나는 그런 시스템, 경유로 다른 PHP 기능을 사용하여 시도했지만 작동하지 않았다. 아마 여기 누군가가 해결책을 안다고 생각했습니다.

나는

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

감사를 사용하고 있습니다!

UPDATE

나는 다음과 같은 종속

  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

그러나, 내 probl가 해결되지 않은 업데이트 여자 이름.

2 UPDATE 기능이 아파치 로그에 인쇄됩니다 무엇을 실행

마침내 도움이 될 뭔가를 발견 :

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 

3 UPDATE에게

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) 

4 UPDATE

문제가 MAMP에 관한 한,

+1

정말 고마워요! –

답변

7

해결했습니다!

environement 변수가 DYLD_LIBRARY_PATH으로 잘못 설정되었습니다.

맥 OS X 레오파드 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이 모든 의존성이 /opt/local에서 MacPorts를 설치했다 (위의 2 UPDATE 참조)이 필요합니다. 이 경우 수동으로 경로/opt/local/lib를 DYLD_LIBRARY_PATH에 추가해야합니다.

/opt/local/lib ~ DYLD_LIBRARY_PATH을 Mac OS X Leopard apachectl envvars 파일 /usr/sbin/envvars에 추가하면 작동하지 않습니다. 왜? Mac OS X Leopard에서 아파치를 사용하지 않기 때문에 MAMP를 사용합니다.

MAMP 는 자신의 apachectl 스크립트의 과 자신의 envvars 파일이 있습니다.

나는 apachectl envvars 지금 내 PNG 축소판이 생성되고 있으며, 오류가 아파치 오류 로그에 생성되지 않습니다

DYLD_LIBRARY_PATH="/opt/local/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 

/Applications/MAMP/Library/bin/envvars을 파일 MAMP에 DYLD_LIBRARY_PATH의 경로 /opt/local/lib를 추가!

도움이 필요하시면 다음 번에 모든 로그 파일을 확인하는 것이 좋습니다.

+0

COMMAND_MODE 문제에 대해 읽어 본 후 이것이 레오파드 관련 문제 였다고 제안 할 것입니다. 좋은 직장 :) – defines

+0

남자 이것은 나를 위해 일하지 않고 여기에 내 머리카락을 당길거야 ... 여기에 언급하지 않은 다른 지시 사항을했을 수도 있습니다? – mga

+0

안녕하세요 ... 나는''hello world "를 exec ("convert logo : logo.gif ")'와 같이 만들 수 있지만 잘 작동하지만 더 복잡한 변환은 셸에서는 작동하지만 exec()에서는 작동하지 않습니다. :/opt/local/bin/convert -size 758x185/응용 프로그램 /MAMP/htdocs/recetas/img/photo/old.tmp -crop 470x185 + 142 + 0! -quality 100 + profile "*"/ Applications/MAMP/htdocs/recetas/img/photo/new.jpg' ... old.tmp와 같은 디렉토리에 logo.gif를 생성하고 있으므로 경로의 문제가 아닙니다. (게다가 bash 나 sh로 명령을 복사/붙여 넣기하면 그 일이 가능하다.) 아파치의 오류 (PHP 오류 없음)는'sh : command_here : No such file or directory'이다. – mga

1

아래 솔루션은 PHP 코드를 실행하는 사용자가 파일 및 디렉토리에 동일한 권한이 있는지 확인하십시오.

+0

예, 이미지와 엄지 손가락 폴더는 모두 세계에 쓸 수 있습니다. – philhq

0

이것은 분명해야하지만 PHP 안전 모드, open_basedir 및 exec이 비활성화되었는지 확인하십시오.

+0

그들은 사용할 수 없기 때문에 JPG 및 JPEG 파일에서 축소판을 생성 할 수 있었지만 PNG 파일에서는 축소판을 생성 할 수 없었습니다.아래의 솔루션을 참조하십시오. – philhq

5

내 경로/옵션/지방/빈,하지만 심지어 DYLD_LIBRARY_PATH이 작동하지 않은 것을 추가했다. 마지막으로 PATH를 변경했을 때 PHP를 통해 작동했습니다. ":/MAMP/라이브러리/lib 디렉토리/응용 프로그램 : $의 DYLD_LIBRARY_PATH/옵션/지방/빈"

, 수출 DYLD_LIBRARY_PATH

을,

는, DYLD_LIBRARY_PATH =; ...

작동하지 않았다 이 작품! "$ PATH :/opt/local/bin"

+0

감사합니다. 고맙습니다, 감사합니다! 내가 문제를 해결하는 데 도움 : – Stiropor

+0

고마워! 나는이 "고맙다"의견이 낙담한다는 것을 알고 있지만, 이것은 나를 위해 길고 혼란스러운 전투를 끝냈습니다. –