2009-06-19 32 views
5

Tôi có một lỗi rất lạ mà tôi chưa tìm được giải pháp. CẬP NHẬT xem giải pháp bên dướiImageMagick: chuyển đổi png không thành công qua PHP và hoạt động qua bash shell

Điều tôi đang cố gắng thực hiện là chuyển đổi ảnh có kích thước đầy đủ thành hình thu nhỏ 160x120. Nó hoạt động tốt với các tệp jpg và jpeg có kích thước bất kỳ nhưng không phải với png.

lệnh 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 function (rút ngắn)

... 
$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)); 
} 

Khi chức năng này chạy $ retval bằng 1 có nghĩa là lệnh chuyển đổi thất bại (thumbnail không được tạo ra).

Đây là nơi nó trở nên thú vị, nếu tôi chạy chính xác cùng một lệnh trong trình bao của tôi, nó hoạt động.

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$ 

Tôi đã thử sử dụng chức năng PHP khác như hệ thống, passthru nhưng không hoạt động. Tôi nghĩ có lẽ ai đó ở đây biết giải pháp.

Tôi đang sử dụng

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

Cảm ơn!

CẬP NHẬT

tôi cập nhật các phụ thuộc sau

  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

Tuy nhiên, nó không khắc phục được probl của tôi em.

CẬP NHẬT 2

cuối cùng tôi đã tìm thấy một cái gì đó mà có thể giúp đỡ, khi các chức năng chạy này là những gì được in bằng các bản ghi 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 

3 CẬP NHẬT

libiconv .2.dylib là phiên bản 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) 

CẬP NHẬT 4 Vấn đề

có liên quan đến MAMP, xem giải pháp dưới đây

+1

Cảm ơn bạn rất nhiều! –

Trả lời

7

Giải quyết!

Hóa ra biến môi trường DYLD_LIBRARY_PATH không được đặt đúng.

Mac OS X Leopard đi kèm với libiconv 7.0.0 nhưng chuyển đổi đòi hỏi 8.0.0 (xem CẬP NHẬT 2 ở trên)

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 và tất cả phụ thuộc đã được cài đặt với MacPorts dưới /opt/local. Điều này yêu cầu phải thêm đường dẫn/opt/local/lib theo cách thủ công vào DYLD_LIBRARY_PATH.

Nếu tôi thêm đường dẫn /opt/local/lib vào DYLD_LIBRARY_PATH trong Mac OS X Leopard apachectl tập tin envvars /usr/sbin/envvars nó không hoạt động. Tại sao? Đó là bởi vì tôi không sử dụng apache từ Mac OS X Leopard, tôi sử dụng MAMP.

MAMP tập lệnh apachectl riêng và tệp riêng của mình là envvars.

tôi thêm con đường /opt/local/lib-DYLD_LIBRARY_PATH trong MAMP apachectl envvars nộp /Applications/MAMP/Library/bin/envvars

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

Bây giờ thumbnails PNG tôi đang được tạo ra và không có lỗi được tạo ra trong nhật ký lỗi apache!

Tôi hy vọng điều này sẽ giúp ai đó và lần sau tôi sẽ nhớ kiểm tra mọi tệp nhật ký trước khi yêu cầu trợ giúp!

Phil

+0

Đã được đề nghị đây là một vấn đề cụ thể Leopard sau khi đọc về vấn đề COMMAND_MODE. Làm việc tốt đẹp :) – defines

+0

người đàn ông này không làm việc cho tôi và tôi kéo tóc của tôi ở đây ... bất kỳ hướng dẫn khác không được đề cập ở đây bạn có thể đã làm? – mga

+0

hi ... Tôi có thể tạo "hello world" như 'exec (" convert logo: logo.gif ")' và nó hoạt động tốt ... tuy nhiên, một chuyển đổi phức tạp hơn sẽ làm việc trong shell nhưng không phải trong exec() : '/ opt/local/bin/convert -size 758x185 /Applications/MAMP/htdocs/recetas/img/photo/old.tmp -crop 470x185 + 142 + 0! -quality 100 + profile "*"/Ứng dụng/MAMP/htdocs/recetas/img/photo/new.jpg' ... Tôi đang tạo logo.gif trong cùng một thư mục như old.tmp nên nó không phải là vấn đề đường dẫn (Ngoài ra, điều này hoạt động nếu tôi sao chép/dán lệnh trong bash hoặc sh. Lỗi trong apache (không có lỗi php) là 'sh: command_here: Không có tệp hoặc thư mục nào như vậy ' – mga

1

Hãy chắc chắn rằng người dùng chạy đoạn code php có các quyền như nhau trên các tập tin và thư mục.

+0

Có, cả thư mục hình ảnh và ngón tay cái cũng có thể ghi trên thế giới. – philhq

0

Đây phải là điều hiển nhiên, nhưng hãy đảm bảo bạn kiểm tra những thứ như chế độ an toàn PHP, open_basedir và liệu exec có bị vô hiệu hay không.

+0

Chúng không được tắt, tôi có thể tạo hình thu nhỏ từ các tệp JPG và JPEG nhưng không tạo được tệp PNG.Xem giải pháp dưới đây – philhq

5

Đường dẫn của tôi là/opt/local/bin, nhưng thậm chí thêm đường dẫn đó vào DYLD_LIBRARY_PATH không hoạt động. Cuối cùng, khi tôi thay đổi PATH thuần túy, nó đã hoạt động thông qua PHP.

; Không làm việc ...

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

; xuất khẩu DYLD_LIBRARY_PATH

; Những công việc này!

xuất PATH = "$ PATH:/opt/local/bin"

+0

Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn! đã giúp tôi giải quyết vấn đề :) – Stiropor

+0

Cảm ơn! Tôi biết rằng những lời cảm ơn "cảm ơn" này không được khuyến khích, nhưng điều này đã kết thúc một trận chiến dài, khó hiểu đối với tôi. –

Các vấn đề liên quan