PHPExcel 読み込んだテンプレートを上書きした時にエラーになる問題の対処方法

テンプレートのExcelをコピーしてからデータを登録後、上書きしたら下記のようにエラーになった。

Error: File zip:///app/files/template.xlsx#xl/media/image.png does not exist
#0 /app/Vendor/Excel/Classes/PHPExcel/Writer/Excel2007/ContentTypes.php(181): PHPExcel_Writer_Excel2007_ContentTypes->_getImageMimeType('zip:///app...')
#1 /app/Vendor/Excel/Classes/PHPExcel/Writer/Excel2007.php(246): PHPExcel_Writer_Excel2007_ContentTypes->writeContentTypes(Object(PHPExcel), true)

Googleで以下のサイトがヒット。 stackoverflow.com

PHPExcel のバグとのことで、 235-237行目をコメントアウトもしくは削除をすれば問題なく保存できるようになりました。

app/Vendor/Excel/Classes/PHPExcel/Writer/Excel2007.php

235        if (file_exists($pFilename)) {
236            unlink($pFilename);
237        }

CSV文字化けした時はBOMも確認する

複数の環境に設置してるシステムで、ある環境だけCSVダウンロードが文字化けしてしまう現象がおきました。

コードを調べたところ特におかしなところが見当たらず、調査を進めていくとファイルにBOMが付与されていると文字化けになると言う情報を発見。

php csv ソ」で検索して1番目に以下の情報を発見。 ダウンロードしたCSVファイルが文字化けする問題 – 大阪のシステム開発・WEBシステム開発会社技術担当スタッフの覚書き、子だぬきの技術習得ノート

最初は関連するファイルを一つずつ調べていたのですが、数ファイルみたところで、一括で調べられないかを調査してみることに。

php bom 一括 確認」で検索したところ何種類かあったのですが、bash で検索できる方法が簡単でした。

このコマンドで特定のファイルだけ抽出してくれます。

find . -name '*.php' | xargs grep -l ^$'\xef\xbb\xbf'

参考にしたのはこちら Mac(bash)でBOM付きファイルを抽出しBOMを削除するコマンド | KEYPOINT – キー・ポイント株式会社 開発日誌

今回はBOMがついているファイルが1つだけだったので手動で削除しました。

複数ある場合は参考サイトに一括削除の方法が載っています。

MailCatcher が気付いたら動かなくなってたので入れ直した。

最近は mailtrap を使っているので、MailCatcher は使わなくなってたのですが、 php.ini の sendmail に直接設定して使いたい案件がでてきたので久しぶりに MailCatcher を使おうとしたら動かなくなってた。

以前入れて動いてたので、普通に mailcatcher を呼んだところ、そんなコマンドないと言われてしまう。

$ mailcatcher
zsh: command not found: mailcatcher

パスが通らなくなったのかと検索してみるもでてこない。 ってかファイル数多すぎのかなかなか終わらないので途中で止めた…。

$ sudo find / -name mailcatcher
^C

ないのなら入れてやろうとインストールしてみたところエラー。

$ sudo gem install mailcatcher
Building native extensions.  This could take a while...
ERROR:  Error installing mailcatcher:
    ERROR: Failed to build gem native extension.

    current directory: /Library/Ruby/Gems/2.0.0/gems/eventmachine-1.0.9.1/ext
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby -r ./siteconf20170925-22868-1pumnwa.rb extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/eventmachine-1.0.9.1 for inspection.
Results logged to /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-16/2.0.0/eventmachine-1.0.9.1/gem_make.out

とりあえず、El Capitan になった際に rootless という概念ができたという情報があるが、 rbenv 使っていれば問題ないとあったのとエラーメッセージから違うかなっとスルー。

調べてみるもこれっていうのがでてこないので、 ruby から入れ直してみようかと、一番新しいバージョンをインストール!

$ rbenv install 2.3.1
Downloading ruby-2.3.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2
Installing ruby-2.3.1...

BUILD FAILED (OS X 10.12.6 using ruby-build 20160426)

Inspect or clean up the working tree at /var/folders/lq/c0x8lzm12rvffxb0hj8qpf1h0000gn/T/ruby-build.20170926163410.43398
Results logged to /var/folders/lq/c0x8lzm12rvffxb0hj8qpf1h0000gn/T/ruby-build.20170926163410.43398.log

Last 10 log lines:
  Referenced from: /private/var/folders/lq/c0x8lzm12rvffxb0hj8qpf1h0000gn/T/ruby-build.20170926163410.43398/ruby-2.3.1/./miniruby
  Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: _utimensat
  Referenced from: /private/var/folders/lq/c0x8lzm12rvffxb0hj8qpf1h0000gn/T/ruby-build.20170926163410.43398/ruby-2.3.1/./miniruby
  Expected in: /usr/lib/libSystem.B.dylib

make: *** [.rbconfig.time] Abort trap: 6
make: *** Waiting for unfinished jobs....
encdb.h updated

はい。エラーです。

Xcode8環境下でrbenvにてrubyのコンパイルに失敗する - Qiita

Xcode の必要なツールをインストールすればよさそう。

$ xcode-select --install
xcode-select: note: install requested for command line developer tools

Xcode のツールをインストールしたので、ruby をインストールする前に、 もう一度 MailCatcher をインストールしてみます。

$ sudo gem install mailcatcher
Building native extensions.  This could take a while...
Successfully installed eventmachine-1.0.9.1
Fetching: mime-types-data-3.2016.0521.gem (100%)
Successfully installed mime-types-data-3.2016.0521
Fetching: mime-types-3.1.gem (100%)
Successfully installed mime-types-3.1
Fetching: mail-2.6.6.gem (100%)
Successfully installed mail-2.6.6
Fetching: rack-1.6.8.gem (100%)
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/rackup

はい。エラーです。

しかし、エラーメッセージが今までと変わりました。

このエラーは調べてた時に見ましたね。

MacOSX El Capitanでcocoapodsインストールが出来ない時の対処法 - Qiita

rootless が原因のようなので、書いてあるとおりパスを指定してインストールします。

$ sudo gem install -n /usr/local/bin mailcatcher
Successfully installed rack-1.6.8
Fetching: tilt-2.0.8.gem (100%)
Successfully installed tilt-2.0.8
Fetching: rack-protection-1.5.3.gem (100%)
Successfully installed rack-protection-1.5.3
Fetching: sinatra-1.4.8.gem (100%)
Successfully installed sinatra-1.4.8
Fetching: daemons-1.2.4.gem (100%)
Successfully installed daemons-1.2.4
Fetching: thin-1.5.1.gem (100%)
Building native extensions.  This could take a while...
Successfully installed thin-1.5.1
Fetching: skinny-0.2.4.gem (100%)
Successfully installed skinny-0.2.4
Fetching: mailcatcher-0.6.5.gem (100%)
Successfully installed mailcatcher-0.6.5
Parsing documentation for rack-1.6.8
Installing ri documentation for rack-1.6.8
Parsing documentation for tilt-2.0.8
Installing ri documentation for tilt-2.0.8
Parsing documentation for rack-protection-1.5.3
Installing ri documentation for rack-protection-1.5.3
Parsing documentation for sinatra-1.4.8
Installing ri documentation for sinatra-1.4.8
Parsing documentation for daemons-1.2.4
Installing ri documentation for daemons-1.2.4
Parsing documentation for thin-1.5.1
Installing ri documentation for thin-1.5.1
Parsing documentation for skinny-0.2.4
Installing ri documentation for skinny-0.2.4
Parsing documentation for mailcatcher-0.6.5
Installing ri documentation for mailcatcher-0.6.5
Done installing documentation for rack, tilt, rack-protection, sinatra, daemons, thin, skinny, mailcatcher after 314 seconds
8 gems installed

成功しました!

そして MailCatcher が起動しました。

$ mailcatcher
Starting MailCatcher
==> smtp://127.0.0.1:1025
==> http://127.0.0.1:1080
*** MailCatcher runs as a daemon by default. Go to the web interface to quit.

以下その他の参考サイトです。

El Capitanにしたらmailcatcherがなくなっていたので入れなおす | のぶろぐ

Gem install で Operation not permitted された時の対応(追記あり) - Qiita

っとココまで進めたのですが、色々勘違いしてまして、もともと mac では MailCatcher ちゃんと使ってなかったぽい?です。

vagrant に入れて動かしてようです。

が、なぜか vagrant も動かなくなってる....。

rbenv 自体が動いてないようです。

macvagrant もいろいろ試してそのままなので余計なものとかいっぱいあるし、もうどうなってるのかよくわからない。

そろそろメンテンスが必要ですね。

MySQLで文字列の結合

MySQLで既存のカラムに文字列を結合したい場合は、CONCATを使います。

select concat(column1, column2, column3, column4) from table;

更新時

update users set name = concat(name, "追加したい文字列") where id = 1;

他のカラムと結合させる

update users set name = concat(name, kana) where id = 1;

ただし、null が対象のカラムに入ってる場合には結合してくれず、null のままになってしまいます。

null が入っていても結合するためには、ifnull で対象カラムが null だったら空文字に変換して結合するようにします。

update users set name = concat(ifnull(name, ""),  "追加したい文字列") where id = 1;

これで問題なく結合されるようになりました。

EC-CUBE3で管理画面にログインできない問題の対処方

開発環境で Vagrant を使っている時に問題になりました。

調べてみると Vagrant の設定を変更して対応したサイトを幾つか見つけました。

管理画面にログインできない : オレのメモ

ただ、うちの環境だと nfs を設定しているため設定しようとすると

以下のようなエラーが表示されます。

* Shared folders that have NFS enabled do not support owner/group

そもそも、ログインできないのは

EC-CUBE側でセッションの保存先を変更していて、

そのディレクトリの権限がないからということなので、

セッションの保存先を変更しないようにしました。

"session.storage.save_path" で検索すると

EC-CUBE のバージョンが 3.0.11 だと以下のファイルにでてきました。

eccube3/src/Eccube/Application.php

コメントアウトします。

        $this->register(new \Silex\Provider\SessionServiceProvider(), array(
//            'session.storage.save_path' => $this['config']['root_dir'].'/app/cache/eccube/session',
            'session.storage.options' => array(
                'name' => 'eccube',
                'cookie_path' => $this['config']['root_urlpath'] ?: '/',
                'cookie_secure' => $this['config']['force_ssl'],
                'cookie_lifetime' => $this['config']['cookie_lifetime'],
                'cookie_httponly' => true,
                // cookie_domainは指定しない
                // http://blog.tokumaru.org/2011/10/cookiedomain.html
            ),
        ));

ログインできました!!

f:id:ihiro81:20161027023812p:plain

ちなみに、あくまで開発環境での対応になります。

本番ではちゃんと権限を与えて、

直接このファイルを編集しないようにしましょう。

GitBucketにSSH認証キーを設定してパスワードの入力なしで利用できるようにする

SSH経由でアクセスできるように設定する

rootアカウントでログイン

System administration → System Settings

SSH Access の Enable SSH access to git repository にチェックを入れる。

他のサイトでポートを変更しているところがあったけど、変更する必要はないみたいです。(これで嵌った

f:id:ihiro81:20151002145214p:plain

認証キーを作成する

cd ~/.ssh

ssh-keygen -t rsa -C [メールアドレス]

パスフレーズはなしで登録する。

Account settings → SSH Keys で 公開鍵を登録する

Title はわかりやすいように名前を付ける。

Key には ~/.ssh/id_rsa.pub の内容をコピーする。

f:id:ihiro81:20151002144017p:plain

clone URL を ssh に変更してコピーする

f:id:ihiro81:20151002160419p:plain

ssh で clone を実行する

git clone ssh://ihiro81@example.com:29418/ihiro81/test.git

Kindleセールやってたので購入した本を紹介する。

前回のKindle50%ポイント還元セールでポイント貯まってたので、 気になる本を購入しました。

ちなみにまだ全然読んでないので内容はわかりませんが、 見た感じどれも評価高めなので面白いはず。

購入した本

読みたいと思ってたけど読めてなかったサイバーエージェントの藤田さん本。

起業家

起業家

前話題になってたので。

漫画版 野武士のグルメ

漫画版 野武士のグルメ

イケハヤさんのブログ見て面白そうだったので購入。

Kindleセール嬉しいんだけど

毎回イケハヤさんのブログで知ってて、そのうち見逃しそう。

Amazon見ても全くわからないのでなんとかして欲しいな。

セール情報載せてるサイトありそうだけど作るか。