purazumakoiの[はてなブログ]

技術メモから最近はライフログも増えてきてます。

Fatal error: Uncaught exception 'ImagickException' with message 'Postscript delegate failed

Fatal error: Uncaught exception 'ImagickException' with message 'Postscript delegate failed 
〜〜
No such file or directory @ error/pdf.c/ReadPDFImage/664

といったようなエラーがでる。 これはphpのimage

$pdf = new imagick( 'name.pdf[0]' ); 

ってやったらでました。

可能性

664ってとこから、どうもGhostScriptが見つかってないっぽい。

ということで phpから

$results = shell_exec('/usr/bin/convert /usr/home/html/a.pdf /usr/home/html/b.png >/tmp/err.txt 2>&1');
echo "<pre>$results</pre>";

で /tmp/err.txt にエラーが出てるので確認。こんなのが出た

convert: Postscript delegate failed `/usr/home/html/a.pdf': No such file or directory @ error/pdf.c/ReadPDFImage/664.
convert: missing an image filename `/usr/home/html/b.png ' @ error/convert.c/ConvertImageCommand/3015.

解決策1(解決になってないけど)

「vi /etc/sudoers」に


#sorry, you must have a tty to run sudoというエラーがでるので↓をコメントアウト #Defaults requiretty # 末尾に追加 %username ALL=NOPASSWD: /usr/bin/convert

phpの実行ユーザ名で許可する

参考

こんな感じのコードでテストしました。

<?php 

#sudo してpdf → png変換
$results = shell_exec('/usr/bin/sudo /usr/bin/convert /usr/home/chz3005002/html/test/1/b.pdf /usr/home/chz3005002/html/test/1/bdesuyo.png >/tmp/err.txt 2>&1');
echo "<pre>$results</pre>";


# phpの実行ユーザ名は /tmp/whoami.txt に出力
$results = shell_exec('/usr/bin/whoami >/tmp/whoami.txt 2>&1');
echo "<pre>$results</pre>";

こうすることで、そもそもphpからのconvertが出来ない件は一応解決。つまり権限の問題だったっぽい。 ※phpのバージョンを複数いれてるからその辺りが関係あるのかな。

ただこれだと結局imagick関数は使えないのでその場合のは未解決

suPHP環境にphp7.0.2を入れる

こんな感じの方法でPHPを複数バージョンで利用してるのですが 64bitCentOS6.2にsuPHPで複数バージョンのPHPを入れた際ハマったこと | ハサミできって貼ってみた

ハマったところ

その1

WARNING: unrecognized options: --with-mysql

PHP7ではmysqlコマンドが削除になったからですかね? コンフィグオプションから「--with-mysql」の部分を削除で対応。

その2

こんな感じのエラー

/usr/local/src/php-7.0.0/ext/pcre/php_pcre.c: In function 'zm_info_pcre':
/usr/local/src/php-7.0.0/ext/pcre/php_pcre.c:153: error: 'PCRE_CONFIG_JIT' undeclared (first use in this function)
/usr/local/src/php-7.0.0/ext/pcre/php_pcre.c:153: error: (Each undeclared identifier is reported only once
/usr/local/src/php-7.0.0/ext/pcre/php_pcre.c:153: error: for each function it appears in.)
make: *** [ext/pcre/php_pcre.lo] Error 1

–with-pcre-regex=/usr のコンフィグオプションを削除

PHP Warning: PHP Startup: imagick: Unable to initialize module Module compiled with module API=20100525 PHP compiled with module API=20121212 というエラーの対処法

こんな感じの方法でPHPを複数バージョンで利用してるのですが 64bitCentOS6.2にsuPHPで複数バージョンのPHPを入れた際ハマったこと | ハサミできって貼ってみた

なんかImageMagickPHPから使うためのモジュールで「imagick」というものがあって、それを入れて、要はphpinfoにこうやって出てくるようにしてくれといわれました。 imagick

で、色々がんばって入れてみるんですけど、なんか色々調べてインストールしてみてphp.iniに

extension=imagick.so

を追加してphpinfoを見たらページの最後の方に

PHP Warning: PHP Startup: imagick: Unable to initialize module Module compiled with module API=20100525 PHP compiled with module API=20121212

と書いてある

これはどうも、「PHP5.5系 → API=20121212」でうごかしてるけどimagickが「PHP5.4系 → API=20100525」だと言っている感じ

要するにこうして解決した

# 各バージョン用のimagickモジュール マイナーバージョンごとに1つあれば良い

mkdir /usr/local/src/php5.4
cd /usr/local/src/php5.4
git clone -b phpseven --depth 1 https://github.com/mkoppanen/imagick
cd /usr/local/src/php5.4/imagick
./configure --with-php-config=/usr/local/bin/php-config-5.4.39
make
make install

mkdir /usr/local/src/php5.5
cd /usr/local/src/php5.5
git clone -b phpseven --depth 1 https://github.com/mkoppanen/imagick
cd /usr/local/src/php5.5/imagick
/usr/local/bin/phpize-5.5.23
./configure --with-php-config=/usr/local/bin/php-config-5.5.23
make
make install

mkdir /usr/local/src/php5.6
cd /usr/local/src/php5.6
git clone -b phpseven --depth 1 https://github.com/mkoppanen/imagick
cd /usr/local/src/php5.6/imagick
/usr/local/bin/phpize-5.6.7
./configure --with-php-config=/usr/local/bin/php-config-5.6.7
make
make install

解説

  • 各バージョンごとのソース置き場を作り
  • git cloneでソースをDL
  • それぞれのversionのphpizeを実行して
  • インストール

.htaccessで特定のディレクトリ内に来たらリダイレクトさせる(直下のindex.html以外)

要件

http://exsample.com/hoge/index.html → そのまま
http://exsample.com/hoge/fuga1/以下 → http://exsample.com/piyo/
http://exsample.com/hoge/fuga2/以下 → http://exsample.com/piyo/
http://exsample.com/hoge/fuga3/以下 → http://exsample.com/piyo/

こんな風にリダイレクトしたい場合

ホワイトリストでディレクトリを指定してリダイレクトする場合

/hoge/.htaccess を設置して↓の通りに記述

RewriteEngine on

RewriteCond %{REQUEST_URI} (fuga1|fuga2|fuga3)
RewriteRule ^(.*)$ /piyo/ [R=301,L]

office365 新規ライセンス登録方法

office365で新たにOffice 365 Business Openプランでアプリのみ利用しようとしたら 元々の

  • Office 365 M 1-seat
  • Office 365 Midsize Business Open

で契約していたアカウントにはひも付けられない模様

そこで、仕方ないので新規アカウントを作った際のメモです。

前準備

元々の問題

ここから「ライセンス認証の開始」から認証が失敗します。

f:id:purazumakoi:20150306192449j:plain

シリアルは調査済み

購入したら、メールが来ているのでそこからシリアル番号を入手します。

f:id:purazumakoi:20150306192520j:plain

新規アカウント作成

http://office.com/setup365

f:id:purazumakoi:20150306192621j:plain

プロダクトキーを入れます。
f:id:purazumakoi:20150306192636j:plain

確認画面がでます。「プロダクトキーの追加を完了する」を押します。 f:id:purazumakoi:20150306192646j:plain

ステップ2へ移動します。 f:id:purazumakoi:20150306192702j:plain

↓以下のように、アカウント登録情報のところまでこれば一安心。 ※元のアカウントでログイン済みのブラウザでやると前のログイン情報が残っている場合があるので、別のブラウザを使いましょう

f:id:purazumakoi:20150306192724j:plain

入力したら、OKおめでとうございます\(^o^)/ f:id:purazumakoi:20150306192740j:plain

初回ログイン時に

f:id:purazumakoi:20150306192813j:plain

こんな感じの画面は出たので電話番号だけ入力しました。