wp_cli を使って wordpress の自動インストールを簡単に実現できる予定だったのですが、vm に hhvm を使っているためにエラーに悩まされました。
出現したエラーは
Fatal error: Uncaught exception ‘UnexpectedValueException’ with message ‘DirectoryIterator::__construct(/tmp/wp_55cd70bd1c52a/):failed to open dir’
です。
wp_cli の gitHub でも同様の質問が出ていますが、#1137 (comment) を見てもこの問題を解決する為の返答は見当たりませんでした。
hhvm のバージョンは、3.8.1 です。
ということで、プログラムの追跡を行いまして、犯人を突き止めました。
core.php の _extract() を書き換えます。
オリジナルは
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private static function _extract( $tarball, $dest ) { if ( ! class_exists( 'PharData' ) ) { $cmd = "tar xz --strip-components=1 --directory=%s -f $tarball"; WP_CLI::launch( Utils\esc_cmd( $cmd, $dest ) ); return; } $phar = new PharData( $tarball ); $tempdir = implode( DIRECTORY_SEPARATOR, Array ( dirname( $tarball ), basename( $tarball, '.tar.gz' ), $phar->getFileName() ) ); $phar->extractTo( dirname( $tempdir ), null, true ); self::_copy_overwrite_files( $tempdir, $dest ); self::_rmdir( dirname( $tempdir ) ); } |
ですが、 new PharData( $tarball ) の返り値が、20MBほどあり、明らかに不正な状態になっています。その結果、getFileName()が null となり、テンポラリ用のディレクトリ名が予定している名前にならないようです。
ということで、もともと PharDataクラスが存在しない場合の処理が記述されてるので、その部分だけに書き換えてしまいます。
1 2 3 4 5 |
private static function _extract( $tarball, $dest ) { $cmd = "tar xz --strip-components=1 --directory=%s -f $tarball"; WP_CLI::launch( Utils\esc_cmd( $cmd, $dest ) ); return; } |
これで、downloadは可能になります。あとは、pharファイルを作成して完成です。
hhvm はまだ php 100% 互換ではないので、直しながら頑張っていきたいですね。
おわり。
コメント