WordPress 4.5 において,メディアをアップロードすることができない場合の対処方法

WordPress 4.5 にアップデート後,画像ファイルのアップロード時に「HTTP エラー」が発生する現象に遭遇したので,対処方法を調べてみました.

ロリポップのお知らせによると,「Fatal error: Undefined class constant ‘ALPHACHANNEL_UNDEFINED’」や「HTTP エラー」が発生する場合には,以下の対処方法が有効なようです.

私の場合は,画像のアップロード時の「HTTP エラー」は解消されています. 😛

対処方法

「/wp-includes/class-wp-image-editor-imagick.php」を以下のように修正する.

1
2
3
4
5
6
7
8
9
10
// 修正箇所
/wp-includes/class-wp-image-editor-imagick.php の 379行目 ~ 380行目
 
// 修正前の記述
&& defined( Imagick::ALPHACHANNEL_UNDEFINED )
&& defined( Imagick::ALPHACHANNEL_OPAQUE )
 
// 修正後の記述
&& defined( 'Imagick::ALPHACHANNEL_UNDEFINED' )
&& defined( 'Imagick::ALPHACHANNEL_OPAQUE' )

参考ページ
Fatal error: Undefined class constant ‘ALPHACHANNEL_UNDEFINED’

PhpStorm のブックマークレットって?

PhpStorm のデバッグ設定を行っていて,ブックマークレットを作成する手順があったので,どのようなことをしているのか確認してみた.

このブックマークレットは,PhpStorm のサイトで生成することができる.
Xdebug & Zend Debugger bookmarklets generator for PhpStorm

ブックマークレットとは「JavaScript」の簡単なプログラム.
start debugger は,以下の通り.

1
2
3
4
javascript:(/*%20@version%200.5.2%20/function()%20{
document.cookie=
’XDEBUG_SESSION=’+’PHPSTORM’+’;path=/;’;
})()

現在開いているドメインのトップパスに、クッキー(“XDEBUG_SESSION=PHPSTORM”)を登録するしているだけ.
ide key(session id) は,xdebug と PhpStorm の PHP Remote Debug で適用するが,全て ”PHPSTORM”にしておいた方がいいですね.

PhpStorm をデバッグできるようにする

夏休みだったので,つい先日バージョンアップされた PhpStorm Version 9.0.1 を触ってみました.
(2015/8/19時点で,9.0.2).

私の場合,OS X に PHP をセットアップする場合,以下の手順で行っています.
久しぶりに思い立ってセットアップしても,この手順であれば簡単なので迷わず行えます.

1. MAMP のインストール
2. Apache で PHP の動作確認
3. php.ini を編集して,xdebug の有効化
4. PhpStorm のインストール
5. PhpStorm のデバッグ設定

PhpStorm のデバッグ設定

まず,久しぶりなので,デバッグできるように設定します.

参考: Installing and Configuring MAMP with PhpStorm IDE

本家の英語ドキュメント.
英語のドキュメントは,かったるいという場合は,以下を参照.
Xdebug の設定からとても丁寧に説明されています.

参考: PHPStorm – Xdebugを利用してPHP(WordPress)のデバッグを試してみる | matomerge.com

Xdebug が LISTEN 状態か?確認する

Xdebug が LISTEN 状態か以下のコマンドで確認することができる.

lsof -n -P -i :9000

PhpStorm のデバッグ機能

以下が,デバッグ中の PhpStorm エディタです.
ステップ実行した変数の値が表示されたり,マウスカーソルを合わせることで,変数の値が参照できたりします.
便利ですね.(^_^)v

デバッグ中の phpstorm

PhpStorm のエディタは,ストレス無く動作し,とても使いやすいです.
(以前に触った eclipse (PDT) は処理が重かった… (>_<)) 少しずつ触っていきたいと思います.

PhpStorm キーボード操作について

最近、PhpStorm を始めたので、個人的によく使うキーボード操作をまとめた。

PhpStorm ver 7.1.3
Mac OS X 10.5+

エディタ操作 キー
定義へジャンプ cmd + b
進む、戻る opt + cmd + ← / →
文字列行を選択する shift + ↑ / ↓
インデントする tab
インデントを戻す tab + shift
フォーマットを整える opt + cmd + l (エル)
選択箇所のインデントをそろえる ctrl + opt + i
ステートメントを閉じる shift + cmd + return
行選択 / 単語選択 opt + ↑ / ↓
行を連結する ctrl + shift + j
行を複製する cmd + d
行を削除する cmd + del
カーソル行を上に移動する cmd + shift + ↑
カーソル行の下に行を追加する shift + enter
現行ファイルのパスをコピーする cmd + shift + c
指定行へ移動する cmd + l
検索の操作 キー
ファイル検索 cmd + shift + f
どこでも検索(※1) shiftを2回押下
最近開いたファイルを参照 cmd + e

※1: ファイル、アクション、クラス、シンボル、設定、およびUI要素を単一のエントリポイントから検索

コメントの操作 キー
コメントする / 解除する cmd + /
デバッグ操作 キー
ステップイン F7
ステップアウト Shift + F8
プロジェクトビューからソースファイルへの操作 キー
プロジェクト ビューを表示する. Cmd + 1
プロジェクト ビューでフォーカスがあるファイルのソースコードを表示する. Cmd + ↓
ブックマークの操作 キー
ブックマーク0番 ctrl + shift + 0
ブックマーク0番へジャンプ ctrl + 0

【コメント】
shift + enter って結構使うなぁー

PHP のデバッグ環境を作成する手順

Mac OS X バージョン 10.7.4 に port を利用して PHP のデバッグ環境を作成した際の手順を記します。
※ eclipse と PDT も別途インストールしておくこと

1. PHP5 をインストールする

php をインストールする(pear を利用したい場合)

1
$ sudo port install php5 +apache2 +pear

php.ini の設定

1
$ sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
;timezone の設定
[Date]
date.timezone = Asia/Tokyo

;mbstring の設定
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_output = UTF-8

;エクステンションの設定

;930 行目付近 (mac の場合)
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
:
extension=php_mysql.so
:
extension=php_pdo_mysql.so

2. MySQL5 をインストールする

1
$ sudo port install mysql5-server

データベースのセットアップ
上記コマンドのメッセージで以下のコマンドでセットアップするよう指示される

1
2
$ sudo port load mysql5-server
$ sudo -u mysql mysql_install_db5

root パスワードの設定

1
$ sudo /opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password'

文字コードの設定

1
2
$ sudo cp /opt/local/share/mysql5/mysql/my-medium.cnf /opt/local/etc/mysql5/my.cnf
$ sudo vi /opt/local/etc/mysql5/my.cnf

my.cnf ファイルに以下の設定を追加する

1
2
3
4
5
6
7
8
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

接続確認

1
$ mysql5 -u root -p

3. Apache2 をインストールする

– PATH 設定
環境変数を参照する

1
2
3
$ printenv PATH
 
$ sudo port install apache2

– 設定ファイル
port でインストールした場合
/opt/local/apache2/conf/httpd.conf

– ドキュメントルートの設定

1
2
$ sudo mkdir -p /var/www/(ドキュメントルートにするディレクトリ)
$ sudo chown (ユーザ名) /var/www/(ドキュメントルートにするディレクトリ)

– hosts にドメイン設定
– バーチャルホストの設定
/opt/local/apache2/conf/httpd.conf から、以下のコメントを外す

1
Include conf/extra/httpd-vhosts.conf

/opt/local/apache2/conf/extra/httpd-vhosts.conf に以下の設定を追記する

1
2
3
4
5
6
7
8
9
10
<VirtualHost *:80>
	ServerName (ドメイン名:localhost など)
	DocumentRoot /var/www/(ドキュメント ルート)
	DirectoryIndex index.php index.html
 
	<Directory "/var/www/(ドメイン名)">
		AllowOverride All
		Allow from All
	</Directory>
</VirtualHost>

– php5モジュールの追加設定

1
$ sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so

httpd.conf の LoadModule に以下の設定が追記される

1
LoadModule php5_module        modules/libphp5.so

動作確認

1
$ ps aux | grep apache2

ブラウザから php が動かない場合
/opt/local/apache2/conf/httpd.conf
ディレクディブに以下の設定を追加する

1
AddType application/x-httpd-php .php

4. xDebug をインストールする

以下のコマンドで xdebug に関する記述がない場合、インストールする必要がある

1
$ php -i | grep xdebug

PECL で xDebug をインストールする
(PEAR がインストールされていることとする)

1
$ pecl install xdebug

2012/08時点、xDebug のパッケージがあるみたい?

php.ini に xDebug に関する設定をする

1
$ sudo vi /opt/local/etc/php5/php.ini
1
2
3
4
5
[xDebug]
zend_extension="/opt/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
xdebug.remote_enable = On
xdebug.remote_handler = dbgp
xdebug.remote_host = localhost

上記の作業中に問題となった箇所
– 最初に port で php5 がインストールできなかった
– php5 を variants 指定でインストールできなかった
$ sudo port upgrade ncursesw
$ sudo port install ncurses
他、違うバージョンの PHP をインストールしたりしているうちにインストールできるようになった。^_^;

– eclipse (PDT) でデバッグ時にブレークポイントで処理を中断することができなかった
xDebug がインストールされてなかったので、インストールすることで対処した。
(まぁ当然ですが、知らなかったので気づかなかった (T-T) )

5.phpmyadmin をインストール

インストール

1
$ sudo port install phpmyadmin

config ファイルの設置

1
2
$ cd /opt/local/www/phpmyadmin/
$ sudo cp config.sample.inc.php config.inc.php

phpmyadmin へのアクセス
http://localhost/phpmyadmin/ でアクセスさせる場合

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo vi /opt/local/apache2/conf/httpd.conf
 
<IfModule alias_module>
...
Alias /phpmyadmin "/opt/local/www/phpmyadmin/"
<Directory /opt/local/www/phpmyadmin>
   Order allow,deny
   Allow from all
</Directory>
...
ScriptAlias /cgi-bin/ "/opt/local/apache2/cgi-bin/"
...
</IfModule>

(注意) ScriptAlias より上に記述すること

その他、便利そうなコマンド

MySQL5 の起動、停止

1
2
3
$ sudo /opt/local/share/mysql5/mysql/mysql.server start
$ sudo /opt/local/share/mysql5/mysql/mysql.server stop
$ sudo /opt/local/bin/mysqladmin5 -u root -p shutdown		(手動停止)

apache2 の起動、停止、再起動

1
2
3
$ sudo /opt/local/apache2/bin/apachectl start
$ sudo /opt/local/apache2/bin/apachectl stop
$ sudo /opt/local/apache2/bin/apachectl restart

apache2, mysql の alias 設定

1
2
3
4
alias apache_start="sudo /opt/local/apache2/bin/apachectl start"
alias apache_stop="sudo /opt/local/apache2/bin/apachectl stop"
alias mysql_start="sudo /opt/local/lib/mysql5/bin/mysqld_safe &"
alias mysql_stop="sudo /opt/local/bin/mysqladmin5 -u root -p shutdown"

設定ファイルの更新
色々便利そうなワンライナーが紹介されていたので、メモしておく。

1
2
3
4
5
6
7
8
9
10
sudo perl -p -i.bk -e 's/;date.timezone =/date.timezone = Asia\/Tokyo/g' /opt/local/etc/php5/php.ini
sudo perl -p -i -e 's/pdo_mysql.default_socket=/pdo_mysql.default_socket = \/opt\/local\/var\/run\/mysql5\/mysqld.sock/g' /opt/local/etc/php5/php.ini
sudo perl -p -i -e 's/mysqli.default_socket =/mysqli.default_socket = \/opt\/local\/var\/run\/mysql5\/mysqld.sock/g' /opt/local/etc/php5/php.ini
 
sudo perl -p -i -e 's/;mbstring.language = Japanese/mbstring.language = Japanese/g' /opt/local/etc/php5/php.ini
sudo perl -p -i -e 's/;mbstring.internal_encoding = EUC-JP/mbstring.internal_encoding = UTF-8/g' /opt/local/etc/php5/php.ini
sudo perl -p -i -e 's/;mbstring.http_input = auto/mbstring.http_input = auto/g' /opt/local/etc/php5/php.ini
sudo perl -p -i -e 's/;mbstring.detect_order = auto/mbstring.detect_order = auto/g' /opt/local/etc/php5/php.ini
 
sudo perl -p -i -e 's/;default_charset = "iso-8859-1"/default_charset = "UTF-8"/g' /opt/local/etc/php5/php.ini