質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Q&A

解決済

2回答

2377閲覧

ImageMagickをさくらVPSのサーバーで使いたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

0グッド

1クリップ

投稿2016/06/23 06:46

編集2016/06/23 06:49

###前提・実現したいこと
さくらのVPSサーバーでImageMagickを使いたいです。
linuxを使いImageMagickを適用したい画像のディレクトリまで降りてconvertをすると適用されます。

# convert a.png b.png

↑適用される

実現したいことはフロントサイドのphpファイルに

<?php exec("/usr/bin/convert img/a.png img/b.png") ?> <img src="img/b.png">

と記入し機能させたいです。
現在画像が生成されません。

ImageMagickのバージョンは(Version: ImageMagick 6.7.2-7)です。
phpなどのバージョンはphp(Version 5.3.3),apache(2.2.15 (Unix))です。

error_logには
[error] [client ****] File does not exist: /var/www/html/img/mag04.jpg
と出ています。
php.iniにてdisplay_errorsをonにしていますが、エラーが表示されていません。

パスはlinuxで(which convert)とすると(usr/bin/convert)
と表示されるのであっていると思うのですが。。

お心当たりのある方、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

本題ではないかもしれませんが、「アクセスのたびに」convertコマンドを走らせる必要もないのではないのかなと思いました(もちろん、動作試験だとは思いますが)。

投稿2016/06/23 06:48

編集2016/06/23 06:55
maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/23 06:51

ご指摘ありがとうございます。 おっしゃる通りですね。今は動作確認を目的にしております。
guest

0

sh

1php exec("usr/bin/convert img/a.png img/b.png") ?>

sh

1php exec("/usr/bin/convert img/a.png img/b.png") ?>

あと、img/a.png img/b.png の部分は、絶対パスで書いたほうがいいですね。

php.iniにてdisplay_errorsをonにしていますが、エラーが表示されていません。

exec など外部プログラムの実行関数を利用していますから、PHPの世界の外でエラーが出ます。

exec() で返り値を受け取るには、第二引数を指定してください。
exec()


php

1<?php 2function h($str) { 3 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 4} 5exec("2>&1 /usr/bin/convert/ var/www/html/img/a.png var/www/html/img/b.png", $out, $status); 6?>

シンタックス機能使って見えたわ。

2>&1

の意味調べてください。

投稿2016/06/23 06:47

編集2016/06/23 07:23
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/23 06:50

ご指摘ありがとうございます。記入ミスでしたので訂正致しました。
退会済みユーザー

退会済みユーザー

2016/06/23 07:03 編集

ありがとうございます。 <?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } exec("2>&1 /usr/bin/convert/ var/www/html/img/a.png var/www/html/img/b.png", $out, $status); ?> <p style="color: red;"><?=h($status)?></p> <p style="white-space: pre; color: blue;"><?=h(implode("\n", $out))?></p> <img src="img/b.png"> としましたが、何も表示されません。
退会済みユーザー

退会済みユーザー

2016/06/23 07:06 編集

何も表示されないというより、何も表示していません。「変数のスコープ」を理解しましょう。 functionの外からfunction 内の変数にはアクセスできません。
sounisi5011

2016/06/23 07:06

/usr/bin/convert/ ではなく /usr/bin/convert では無いでしょうか?
退会済みユーザー

退会済みユーザー

2016/06/23 07:11 編集

> sounisi5011さん thx! やり取りを追っていただければ良いかと思うのですが、あえて、エラーが出るものをやっているとも取れるのであながち間違いではありません。
退会済みユーザー

退会済みユーザー

2016/06/23 07:18

お返事ありがとうございました。 変数のスコープがわかりません...エラーを表示させるにはどうしたらよいでしょうか? 勉強不足で申し訳ないです。
退会済みユーザー

退会済みユーザー

2016/06/23 07:24

ソースコード見間違ってました。先ほどの指摘は間違いです。 2>&1 で表示消しているではありませんか。
退会済みユーザー

退会済みユーザー

2016/06/23 07:33

すみません。2>&1を削除しました。 <?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } exec("/usr/bin/convert var/www/html/img/a.png var/www/html/img/b.png", $out, $status); ?> <p style="color: red;"><?=h($status)?></p> <p style="white-space: pre; color: blue;"><?=h(implode("\n", $out))?></p> <img src="img/b.png"> これでも表示されません。。
退会済みユーザー

退会済みユーザー

2016/06/23 07:37

どのように何が表示されると思ってこの記述を書きましたか?
退会済みユーザー

退会済みユーザー

2016/06/23 07:46

以前teratailにてお教えいただいたコードです。 私はバックエンドエンジニアではありませんので、理解できていませんが、以前はこれで問題解決したので使用しました。
退会済みユーザー

退会済みユーザー

2016/06/23 08:01 編集

execのような外部実行を利用せず、imagick を使えばいいんじゃない? そもそもexecなんてあまり利用するべき関数ではありませんから。理解せずに利用するほど怖いものはありません。 http://php.net/manual/ja/imagick.installation.php
退会済みユーザー

退会済みユーザー

2016/06/23 08:48

https://teratail.com/questions/17482 の質問を参考にしました。 PHP、PHP-DEVEL, php-pear, ImageMagick, pecl-imagickインストールできていますが、 php.iniにimagickと記載してある部分がありません。 phpinfoを見るとimagickのバージョンを確認することができるのですが。。 php.iniにて有効にしていないことが原因かと考えましたがどうでしょうか..
退会済みユーザー

退会済みユーザー

2016/06/23 09:33

new Imagick(); でアラーが出ないのなら使えるということですね。phpinfo()の内容を目を皿にして読み込めば php.ini だけが設定ファイルじゃないことに気づけると思います。
退会済みユーザー

退会済みユーザー

2016/06/23 10:09

つまりどういうことですか?
退会済みユーザー

退会済みユーザー

2016/06/23 10:10

書いたとおりで、これ以上まとめようがありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問