5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

タグ: baserCMS

  • baserCMSでスマートURLが使えなくなった話し。意味もわからずコピペしてはダメなのよね、という話し

    お客さんからの連絡があって、サイトのリンクがすべてトップページになってしまうということだった。

    サイトを見てみると、すべてのリンクが/index.phpに遷移している。このサイトは、数年前にbaserCMSで作成している(メンテナンス契約はしていない)。baserCMSのスマートURLが全滅している。おそらく、rewriteの設定がおかしくなっているということではないかと予想する。

    baserCMSのスマートURLの.htaccessにあるrewiteの設定の

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]

    の前にあるRewriteルールを一旦削除してみる。すると、正常にスマートURLが動いてリンクが有効になる。次に少しずつRewriteルールを削除しながら試してみる。すると以下の行だけを削除すると正常に動作することがわかった。

    RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
    RewriteRule ^(.*)$ https://[ドメイン]/$1 [R=301,L]

    この設定はさくらインターネットでhttpでアクセスされたときにhttpsに遷移するようにおまじないで入れたものである。どこから拾ってきてコピペしたような覚えがある。

    このサイトでもWordPressでも同じ現象が発生すると報告がある。何でもさくらインターネットのサーバーがアップデートされたおかげで、この設定が悪さするという話しである。

    WordPressで構築されているサイトが突然トップページしか表示されなくなってしまったという不具合の解決策は「.htaccess」の見直しから

    ドモドモコーポレーション

    やはり、意味もわからずコピペするのはダメなのである。

    著:大竹 龍史, 著:山本 道子
    ¥2,950 (2025/04/01 13:05時点 | Amazon調べ)
    著:Piro, 編集:日経Linux
    ¥2,178 (2025/03/28 21:08時点 | Amazon調べ)
    著:三宅 英明, 著:大角 祐介
    ¥2,970 (2025/04/01 13:05時点 | Amazon調べ)

    それにしても、さくらインターネットのサーバーがアップデートしたせいで(アップデートしておかげでサーバーが快適になったことのほうが大きいけど)、作ったこちらが悪いようで、調査して改修してもお金にならなかった。メンテナンス契約していないと、小さなシステム下請けではよくある話しである。最初からお金が出ないなら断ってしまうことのありだけど、仏心で話しを聞いて対応してしまうのは悪いことなのかな。

    ひとり言

    baserCMSは、自身のアップデートを管理画面からできるようにしてくれないかな。サイトのアップデートがめんどくさい。これだからWordPressをおすすめしてしまう。

  • baserCMSのお問い合わせフォームで送信ボタンが無効になってしまう話し

    baserCMSのお問い合わせフォームで送信ボタンが無効になってしまう話し

    baserCMSで作ったお客さんのサイトがようやくサービスを開始した。。しかし、ここでクレームが発生する。このサイトの開発はメンテナンスフィーは出ないので、これが最後の対応となる

    クレームは、お問合せフォームのボタンが押せないとのことだった。

    どうも、調べてみると、PCやAndroidでは、その障害が発生しない。iPhoneのiOSのSafariで送信ボタンが押せない。

    手元にあったiPadでこの障害が発生したので、Macにつなげてデバッグしてみると、Submitのボタンにdisabled属性が付いて無効状態になっていた。お問い合わせのページにアクセスしただけの状態で(ブラウザで戻ったとか、直接お問い合わせページにアクセスしたとか、おかしなアクセスをしていない)、どうして無効状態になってしまっているのかは、baserCMSのソースを追っていないので原因不明である。

    baserCMSのフォーラムで同じような現状が報告されいないかチェックすると、以下の記事が見つかった。

    【m-single】メールフォームの「入力内容を確認する」がdisabledになってしまう|フォーラム|baserCMSユーザーズ

    フォーラム|baserCMSユーザーズ

    根本的な解決は書かれてしないし時間もないので、この記事のヒントで書かれているように

    /theme/テーマ名/Elements/mail_form.php

    の先頭の方にある

    $this->Mail->token();

    をコメントアウとするという、あまりお勧めできない暫定的な対応をしておいた。とりあえず、これで送信ボタンが有効になってフォームを送れるようになった。

    これは、あまり良い解決方法ではないな。

    テーマの問題といい、基本的なところでつまずくところが多いと、これからbaserCMSでのサイト構築は辛くなってきたぞ。

  • よくわからないbaserCMSの管理画面の障害の話し

    ここでbaserCMSの管理画面でオプションリンクが動かないと書いたが、また同じ症状が出た。

    bccolorsが動かなかったので、オプションリンクが動くomotenashi2に替えて今まで動いたいたのだが、あるタイミングで突然動かなくなっていた。気付いてときには動かない。

    しかたないのでオプションリンクを使うときは、一旦テーマをBcSampleに切り替えて使っていたのだが、いちいち切り替えるのは面倒である。現在、GoogleマップのAPIキーの設定でトラブっているので面倒くさいのである。

    そこで、別のテーマとしてommotenashi2をインストールしてみたところ、今度は正常に動く。つづいて、今までテーマを変更したファイルを上書きして行く。

    すると正常にオプションリンクが動くのある。こちらで変更したファイルが何か影響があったと思ったが、そうではないようだ。

    以上、原因不明である。管理画面が新しくなっての何かの影響なのか?

    管理システムのテーマをとりあえずadmin-secoundに設定して前の管理画面にしておく。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)

    続きはこちらから

  • baserCMSの4対応でも古めのテーマは、新しい管理画面に対応してしないかもで注意という話し

    久しぶりにbaserCMSの案件である。

    最初、baserCMSと適当なテーマをインストールして、コンテンツを挿入して終わり、という簡単な案件だと思っていたら、そんな甘くはなかった。

    お客さんが選んだテーマは、bcColorsというテーマだった。

    bcColors(4系)

    サンプルで見せるために、DockerでbaserCMSのイメージでサイトを簡単に構築してbcColorsのテーマをインストールして見せた。ここまでは、問題無かった。

    さて、本番サーバーはユーザーの希望でエックスサーバーになるので、baserCMSの公式サイトから最新版をダウンロードしてインストールする。しかし、これが問題だった。baserCMSのDockerイメージとバージョンが違う。Dockerイメージのほうが同じ4系でも、だいぶ古いようだった。

    まずは、bcColorsが最新のbaserCMSでは動かない。トップページのスライドショーが表示されない障害があった。

    最新のbaserCMSのよくわからないところだが、管理画面のテーマ(admin-third?)が替わったようで、管理画面まわりがだいぶ変更となっている。どういう訳か管理画面ではないユーザー画面のテーマにも新しい管理画面のテーマが影響があるという、不思議な仕様となっている。

    一様回避策があったのでやってみたが、ユーザー画面の方は少しはマシになったが、完璧には動作しない。スライドショーは表示できるようになったけど、記事のプレビュー画像が、これまたどういう訳か、<img ・・・・・・ とテキストで表示されてしまう。

    記事のプレビューは、今回の案件では必要ないのでいいのだけど、問題は管理画面のオプションのリンクが動作しない。例えば次のような緑のリンクをクリックしても何も動作しない。

    bcColors以外の最初からインストールしているテーマに替えるとリンクができるようなっている。ということは、bcColorsが最新のbaserCMSに対応していないということである。

    baserCMSのユーザーフォーラムに質問を上げてみても、まだ回答がない。2日くらいであるから仕方ないかと思うが、このままでは案件も進まないので、ユーザーにはbcColors以外の新しいテーマを選んでもらう。新しいテーマで最新のbaserCMSで問題がないかをチェックして、管理画面で問題ないことも確認する。

    簡単に終わる案件だと思ったら、厄介な案件になりそう。

    追記(2020年11月11日)

    開発者の方に対応していただいた。

    詳細はbaserCMSのユーザーフォーラムを参照のこと。

  • baserCMSでのサイトで不正なリクエストと判断されましたが出た話し

    大昔にbasercmsで開発したサイトのメンテナンス依頼が久々に来た。単にメールフォームの項目の追加の依頼だった。

    こちらで作業を完了し終了だと思いきや、お客さんからお怒りの連絡が入る。何でも画面に

    不正なリクエストと判断されました。 (type:auth)バリデーションまたはコントローラ/アクションの不一致によるエラーです。

    となるらしい。そんなときに限って、どういう手順で発生したかも教えてくれない。

    こちらもテストも完了しているし、ユーザーのPC環境かと疑ったけど、お客さんのお客さんでも発生しているからって言われて、こちらのせいになってしまった。

    ここらで投げ出したい気分になっている。そんなにお金をもらえないし・・・。

    間に入っている会社の人がスマートフォンで発生すると言われた。こちらも試してみるとエラーが出た。たまたまhttpsではなくhttpのSSL無しでアクセスすると障害の確認ができたみたいだった。SSLありだと正常に動作する。どうしてこれで動くのか原因を追及するのは時間がないのでやめておく。

    しかしながら、こちらは既にサイトをSSL化したものと思い込んでした。しかしhttpでもアクセスできてしまうサイトだった。そもそもそれが障害の始まり。

    SSLに対応したのはお客さんなのです。この作業は私は携わっていないし関知していない。以前、httpsに対応した方がいいよ、と言っておいたけど、いつの間にか対応していたのでこちらは何も確認していなかった。何で私がやらなかったかは各会社の事情なのでお察しください。

    SSL化するのであれば、httpからhttpsへの強制遷移とかrewriteの設定までしなければいけない。サイトの中を調べてみるとURL直書きなんて残っていたので、httpsからhttpに遷移してしまうリンクなんてありました。

    キチンと.htaccessにhttpsに遷移するようにmod_rewriteの設定を書いた。それで再度メールのテストすると正常に動作することを確認した。httpでアクセスしてもhttpsに遷移することも確認した。これで不正なリクエストのエラーが出ないようになったはず。

    だけど、作業料が発生しないサービスの作業が多すぎるな。自分の会社としては、これではいけない。

    このサイトのメンテナンスはこれでおしまい。


    以下は愚痴に近いもの・・・。

    せっかくbaserCMSとかWordpressでサイトを作っても、メンテナンスはユーザーさんがやらない(やる気がない)とか多いな。それで何もしなくて放っておくから、古いbaserCMSとかWordpressのシステムのままで悪い人の踏み台サーバーになってしまうことも起きる。開発段階が終わってメンテナンス段階に移ったら、最低限baserCMSとかWordpressのアップデートをやって欲しい(それか依頼してほしい)と思う。それができないのであれは、素のHTMLで作っておけばいいのにと思う。

  • 会社のホームページのサーバーをWordPressからbaserCMSにした話し

    会社のホームページを常時SSL化に伴い、サーバーの移行のついでにWordPressからbaserCMSに乗り換えてしまう。ページ数も少ないし手でコピペしてしまう。それにしてもアクセスの少ないサイトである。

    周りにはSSLでアクセスさせたほうがいいよと言いながら、自分のところではやっていなかったという、ようやくやってみる。ほぼ会社のホームページは更新してないけど、ホームページがあったでセールス電話がかかってくるくらいなもの。でも、ホームページがなくなると、周りから会社が潰れたと思われるので、簡単なものでもいいから作っておく。

    さくらインターネットのVPSにApacheを立てて名前ベースのバーチャルホストで動かしていたが、これを同じくさくらインターネットのレンタルサーバーに移してしまう。ドメインを設定して、/etc/hostsにIPアドレスを追加して、ドメイン名でさくらインターネットのレンタルサーバーにアクセスできるようにしておく。あとは、MySQLの設定やbaserCMSのインストールをごにょごにょやって、ページのコピペ、適当にテーマを変更、DNSを変更、SSLの設定して完了。

    と思いきや、以下のさくらインターネットのサポートサイトに書いてあるように.htaccessを追加すると、HTTPにアクセスしたときリダイレクトループが発生する。SさくらインターネットのレンタルサーバーではSNI SSLとか普通のSSLではないようなので、普通にrewriteルールを書いたらダメだそうな。

    ブラウザのキャッシュをクリアしたり、別のテーマにしたり、テーマの初期化データを再投入とか、.htaccessを元に戻したりしても、今度は元に戻らなくなった。なにかやってしもうた、感が大きい。

    しかしながら、テーマの初期化データを再投入をやると、今まで作っていたページが来てしまったのは辛かった。これをやらないとテーマを変えたらブログ一覧が取得できないとか、原因不明な動きをする。こちらは今回ページ作成で追加されたデータがあるテーブルを、SQLで強引に入れ替えてしまうというこ手段で回避した。テーマの管理に初期データを出力する機能で一旦データを作成して、こちらを初期データとして再投入したけど、元に戻らなくなったのでやめた。

    リダイレクトルールの原因は、私のbaserCMSのシステム設定の勘違いだった。WebサイトURLがSSLとなっていないものとSSLと明示されているURLの2つ設定しないといけないが、SSLなっていない方にHTTPを設定してしまっていた。こちらもHTTPSのURLを設定しないといけなかった。なんで2つURLを設定しないといけないかはソースを見てみないとわからない。

    その下にSSLのチェックがあるけど、こちらは管理者画面でSSLでアクセスするかの設定だった。このチェックでSSLのURLを自動的にアクセスしてくれるのかと思い込んでいたの大きな間違いだった。

    「管理者画面SSL設定」で「SSL通信を利用する」にチェックを入れると、HTTPSで管理者画面にログインできなくなったので外しておいた。これは原因不明。

    以上、なんだかんだで当初の目標通り無事にSSL化ができた。しかし、HTTPからのリダイレクトに若干問題あるけど時間があったら対応する。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/03/28 17:08時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。

    追記(2018年9月5日)

    初期データを投入したからいろいろなところで元に戻ってしまっている。見つけたら直している最中。タイトルが初期データだったのはまずかったな。

  • さくらインターネットのメールサーバーを移行した話し

    さくらインターネットのメールボックスを設定していると、レンタルサーバーに同じドメインを設定できないようなので、メールボックスをやめてレンタルサーバーにメールを移行する。面倒な仕様だと文句を言いながら作業を始める。

    メールアドレスを新しくレンタルサーバー側に設定してからメールボックスのドメインを削除する。これでレンタルサーバーにドメインを新規登録できるので、新登録してからお名前.comにあるDNSのMXレコードをレンタルサーバーに設定する。ドメインの新規登録をするときに、確認画面で送信ボタンを押し忘れて、ずっとメールが届かないと悩んでしたのは内緒の話し・・・。

    以上の作業で、10~20分ほどでメールサーバーの移行は完了する。テストメールを送ってメールが受信できるか確認しておく。

    現在WordPressで会社のサイトを作っているけど、全くプログの更新とかしないサイトだし、次回はbaserCMSでサイトを作ってみようと思う。WordPressからbaserCMSのサイトの移行はどうせできないと思うので、コピペでページを作っていく。サイトデザインをどうするかとかあるけど、最初はbaserCMSで最初に用意しているテーマにしておこうかと思う。

    これで当初も目的のLet’s EncryptのSSL証明書を使ったSSL化の第一歩となる。会社のサイトだから、本来ならば実在証明型のSSL証明書にしたほうがいいのだけど、一日10アクセスくらいしかないサイトだから、ドメイン認証型の無料SSL証明書にしておく。

    著:大竹 龍史, 著:山本 道子
    ¥2,950 (2025/04/01 13:05時点 | Amazon調べ)
    著:Piro, 編集:日経Linux
    ¥2,178 (2025/03/28 21:08時点 | Amazon調べ)
    著:三宅 英明, 著:大角 祐介
    ¥2,970 (2025/04/01 13:05時点 | Amazon調べ)

    追記(2018年9月3日)

    迷惑メールも広告メールも受信できるようになったから、無事にメールサーバーの移行ができたんじゃないかな。

    追記2(2018年9月3日)

    さくらインターネットのレンタルサーバーのメールアドレス設定で、メールを「転送専用にする」にしていたらfetchmailができなかった。「メールボックスに残す」にしないといけない。 考えてみれば 当たり前だけどな。

  • Laradockを使ってCakePHP3+Xdebug+VS Codeの開発環境を構築した話し

    CakePHP3で作りたいものがあったので、CakePHP3の開発環境を簡単にDockerを使って構築しようと思い立った。最初は自分でdocker-compose.ymlを作成してコンテナを起動してみたけど、どうしてもXdebugでデバッグができなかった。

    たまたまLaradockという本来はLaravelフレームワーク用のDockerコンテナキットを見つけた。最後にcomposerでLaravelの代わりにCakePHPをインストールできるらしいからLaradockを使ってみた。LAMP関連(今回はAではなくnginxだけど)のコンテナが全部入りだから(MySQLだけではなくて、PostgreSQLやSQL Serverもある)、自分でdocker-compose.ymlを書くよりはいいだろうと思った。

    参考までにこれから構築していく自分の環境は以下の通りである。ここにLaradockを使ってCakePHP3+Xdebug+VS Codeの開発環境を構築する。。

    Windows 10 Pro 64 bit
    Docker version 17.12.0-ce, build c97c6d6
    docker-compose version 1.18.0, build 8dd22a96

    以下はいろいろと参考にしたサイトからつまみ食いしなから設定を行った部分を抜き出してまとめていく。

    Laradockの設定は、こちらのサイトを途中まで参考にした。

    PHPフレームワーク「Laradock」で、手軽にLaravel+Dockerな開発環境を構築する

    株式会社LIG|東京のWeb制作・システム開発・オフショア開発会社

    gitのcloneでLaradockをインストールしている。次にLaradockでCakePHP3に関する設定を行うには、こちらのサイトを参考にした。

    LaradockでPHPフレームワーク(Laravel・CakePHP)とCMS(WordPress・Drupal・baserCMS)の開発環境(nginx・php-fpm・mysql)を構築する

    Qiita

    .envをコピーして設定して、これでインストール完了ですと言えないのは、コピー&ペーストインストールのいつものこと。このままではphpMyAdminからMySQLコンテナに接続できないとか、細かい問題があった。そしてXdebugでPHPのデバッグをやりたかったので、いろいろ設定を追加していく。

    まずは、上記の2つのサイトを参考にしてLaradockをインストールする。自分のところでは、今までの作業でディレクトリはこのようになっている。

     /laradock-test
     ├── laradock
     └── src

    .envの設定だが、設定の一番のポイントはポート番号を重ならないこと。既にローカルでPHP+Xdebugが動いていたようなので、ポート番号の指定で嵌まった。使っていないポート番号を設定しておく。以下に今回設定した.envのnginx, MySQL, phpMyAdminの設定を上げておく。

     ### NGINX
     NGINX_HOST_HTTP_PORT=8082
     NGINX_HOST_HTTPS_PORT=443
     NGINX_HOST_LOG_PATH=./logs/nginx/
     NGINX_SITES_PATH=./nginx/sites/
     NGINX_PHP_UPSTREAM_CONTAINER=php-fpm
     NGINX_PHP_UPSTREAM_PORT=9000
    
    ## MYSQL
     MYSQL_VERSION=5.7
     MYSQL_DATABASE=default
     MYSQL_USER=default
     MYSQL_PASSWORD=secret
     MYSQL_PORT=3333
     MYSQL_ROOT_PASSWORD=root
     MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
    
    ### PHP MY ADMIN
     # Accepted values: mariadb - mysql
     PMA_DB_ENGINE=mysql
     # Credentials/Port:
     PMA_USER=default
     PMA_PASSWORD=secret
     PMA_ROOT_PASSWORD=secret
     PMA_PORT=8083

    使っていない別のポート番号に設定し直しておく。MYSQL_VERSIONは元の設定の8.0だと認証で失敗してしまったので、8.0ではく5.7に設定したら認証ができた。こちらは何か別のよい方法があるかもしれない。

    WORKSPACEとPHP_FPM の設定は以下の通り。修正した箇所だけを上げておく。

     ### WORKSPACE
     WORKSPACE_INSTALL_XDEBUG=true
    
     ### PHP_FPM
     PHP_FPM_INSTALL_XDEBUG=true
     PHP_FPM_INSTALL_INTL=true

    Xdebugを使うのでWORKSPACE_INSTALL_XDEBUGとPHP_FPM_INSTALL_XDEBUGをtrueにして(PHP_FPM_INSTALL_XDEBUGだけでもいいかも?)、PHP_FPM_INSTALL_INTLはCakePHP3で必要なのでtrueにしておく。

    .envの設定の最後として、CakePHP3のインストール先のディレクトリも設定しておく。

    # Point to your code, will be available at `/var/www`.
    APPLICATION=../src/

    nginxのドキュメントルートを修正する。設定するファイルは以下のファイルである。

    .\laradock\nginx\sites\default.conf

    こちらのrootの設定を、CakePHP3のリモート側のドキュメントルートのディレクトリに設定する。今回のプロジェクト名をmycakephpとしておく。

    root /var/www/mycakephp/webroot;
    ここで一度Docker composeを実行してコンテナを起動しておく。
    docker-compose up -d nginx mysql phpmyadmin

    workspaceコンテナにログインして、composerを使ってCakePHP3をインストールしておく。こちらは参考サイトの通り。

    LaradockでCakePHPの開発環境(nginx・php-fpm・mysql)を構築する

    Qiita

    ここではサイトに書いてある通り、以下のコマンドでプロジェクトmycakephpでCakePHP3をインストールした。

     $ composer self-update && composer create-project --prefer-dist cakephp/app mycakephp

    nginxからCakePHP3のサイトを参照できるかチェックする。OKならCakePHP3の初期画面が見えるはず。

    データベースの接続の設定を.\src\mycakephp\config\app.phpにしておく。

    'Datasources' => [
    
        'default' => [
           :
        'host' => 'mysql',
           :
        'username' => 'default',
        'password' => 'secret',
        'database' => 'default',
           :

    このような感じで.envのMySQLの設定に合わせておけば、データベースに接続が成功はずである。

    phpMyAdminも確認しておく。こちらも.envのMySQLの設定通りにすればログインできてMySQLの中を参照できるはずである。もちろん、MySQLのパスワードは適当なものに変えること。

    サーバ:mysql
    ユーザ名: root
    パスワード: root

    MySQL Workbenchからも接続を確認できた。以下の接続情報でWindowsローカルで接続できた。

    Hostname:localhost
    Port: 3333
    Username: root
    password: root

    最後にXdebugの設定である。Xdebugのコンテナ側の設定ファイルは次の2つである。同じ内容でコピーすれば大丈夫だった。

    .\laradock\php-fpm\xdebug.ini
    .\laradock\workspace\xdebug.ini

    自分が設定した内容は以下の通りである。とりあえずプロフィラの設定も含めて設定しておく。

     xdebug.remote_host=172.27.7.81
     xdebug.remote_port=9002
     xdebug.idekey=Listen for XDebug
    
     xdebug.remote_autostart=1
     xdebug.remote_enable=1
     xdebug.remote_connect_back=0
     xdebug.cli_color=1
     xdebug.profiler_enable=1
     xdebug.profiler_output_dir="/var/www/mycakephp/tmp"
    
     xdebug.remote_handler=dbgp
     xdebug.remote_mode=req
    
     xdebug.var_display_max_children=-1
     xdebug.var_display_max_data=-1
     xdebug.var_display_max_depth=-1

    ここでわからなかったのはxdebug.remote_hostの値だった。結論としてはこちらはWindowsの場合、

    ipconfig

    で表示されるDocker側の仮想スイッチのアドレスの値を設定しておく。Googleさんに「xdebug リモートデバッグ」で検索して、よく出てくるサイトに書かれている$_SERVER[‘HTTP_X_REAL_IP’]とか$_SERVER[‘REMOTE_ADDR’]の値ではないので注意すること

    xdebug.remote_host = host.docker.internal
    xdebug.remote_connect_back=1
    xdebug.remote_port=9002
    xdebug.idekey=Listen for XDebug
    
    xdebug.remote_autostart=1
    xdebug.remote_enable=1
    xdebug.remote_connect_back=0
    xdebug.cli_color=1
    xdebug.profiler_enable=1
    xdebug.profiler_output_dir="/tmp"
    
    xdebug.remote_handler=dbgp
    xdebug.remote_mode=req
    
    xdebug.var_display_max_children=-1
    xdebug.var_display_max_data=-1
    xdebug.var_display_max_depth=-1

    xdebug.remote_hostの設定は、最近新しくDockerのための設定が追加されたようなので、こちらは難しいことをせずにhost.docker.internalを指定しておく。これでうまくデバッグができるようになった。

    docker-compose stop
    docker-compose build php-fpm workspace

    でphp-fpmとworkspaceのイメージをビルドしなおす。ビルドできたら、

    docker-compose up -d nginx mysql phpmyadmin

    をDocker Composeを再度実行する。nginxのドキュメントルートにphpinfo()を書いたファイルを置いてアクセスしてみて、正しくxdebugが設定されているかを確認しておく。

    クライアント側の開発環境はマイクロソフトのVisual Studio Code(VS Code)を使っている。あらかじめVS Codeの拡張機能であるPHP Debugをインストールしておく。次にVS Codeのデバッグの構成ファイル(launch.json)を修正する。launch.jsonは以下のように設定した。

    {
      "version": "0.2.0",
      "configurations": [
    
       {
        "name": "Listen for XDebug",
        "type": "php",
        "request": "launch",
        "port": 9002,
        "pathMappings": {
          "/var/www":"${workspaceRoot}/src"
         },
        "ignore": [
          "**/vendor/**/*.php"
        ]
       },
       {
        "name": "Launch currently open script",
        "type": "php",
        "request": "launch",
        "program": "${file}",
        "cwd": "${fileDirname}",
        "port": 9002
       }
      ]
     }

    portは、xdebug.iniのxdebug.remote_portと同じ値にする。以下のように設定するように言っているサイトもあるが、

          "serverSourceRoot": "/var/www",
          "localSourceRoot": "${workspaceRoot}/src"

    serverSourceRoot、localSourceRootとも今後推奨されない設定のようなので、pathMappingsにしておく。pathMappingsの設定は、

    "pathMappings": {
        "リモートディレクトリ":"ローカルディレクトリ" 
        },

    のようにリモートとローカルのパスをマッピングする設定である。ドキュメントをよく読まずにリモートとローカルを反対にしてしまったので動かなくて悩んだ。こちらはnginxのドキュメントルートのディレクトリではないことに注意する。ドキュメントルートディレクトリ外のファイル(例えば、.\src\mycakephp\src\Controller\AppController.php)をデバックしようとしたときに、pathMappingsにルートディレクトリに設定してしまうとソースファイルが見つからないと言ってくる。そこでソースファイルを格納しているディレクトリを設定しておく。

    ignoreの設定をしておかないと、以下のような例外が途中で発生する。どうしてかは不明である。

    例外が発生しました
    
    Aura\Intl\Exception: Package 'default' with locale 'ja-JP' is not registered.

    .\src\mycakephp\webroot\index.php とかに適当にブレークポイントを設定して、Listen for XDebug”の構成でデバッグを行う。ブレークポイントを設定したところで止まるかとチェックする。後はステップオーバーでプログラムが進むか、ステップインで別のソースを参照できるか、または変数の中身を参照できるかをチェックして完了。

    以上でLaradock+CakePHP3+XdebugでVS Codeを使って快適にデバッグができるようになった。以上、再度開発環境を構築する際に忘れないようにメモを残しておく。

    追記

    同じ設定をMacでやってみたら、niginxコンテナが起動できなかった。原因不明・・

    .\laradock\nginx\sites\default.conf にゴミが入っていたのが原因だった。dockerのログを見たら原因がわかった。

    無事にMacでCakePHP3のトップページを参照できた。ただしデバッグできない。

    Macでもデバッグができるようなった。ただし、xdebug.ini に

    xdebug.remote_host=docker.for.mac.localhost

    を設定すればOKのようだ。情報はこちらのサイトから。

    PHP on Laradock w/ Visual Studio Code(VS Code)でデバッグ環境 (特にon Mac)

    Qiita

    ただし、MacでDockerはとても遅い。ブラウザが表示し終わるのに時間がかかる。こちらは問題になっているようで、将来改善されるのかな?

    追記2

    VS CodeのターミナルからDocker Composeすると、IO Errorが出る。普通にPower Shellで実行するとうまく行く。これは、issuesに上がっているから周知の問題なのかな?

    追記3

    MySQLのコンテナが起動できなかったので、解決策はこちらから

    LaradockでMySQLがどうしても立ち上がらない人あつまれー!

    Qiita

    追記4(2018年9月14日)

    xdebug.remote_hostの設定を変更しておく。

  • baserCMS で管理者ページにログインできないときの対応メモを書いてみた話し

    今のお客さんのIRサイトをリニューアルをしたいという案件で、以前テストで作成したbaserCMSのテストサイトを復活させます。テストサイトはvagrant+VirtualBoxでローカルのPCに作成しています。

    久しぶりにvagrant upでサーバーを起動してきます。Vagrantで起動したらberkshelfでのmysqlのChefのクックブックの仕様が変わって動かないというトラブルがありましたが、これは自分でレシピを作って対応します。後はMySQLのバックアップを投入すれば、今まで作成したサイトにはアクセスできます。しかし、baserCMSの管理者ページにはログインできません。

    ここでNetBeansのデバッガを使ってログインの処理を追っていきます。ログインが成功した後のリダイレクトの処理以降がうまくいっていないようです。管理者ページのトップにリダイレクトしようとして、どういう訳か遷移しません。

    調べてみるとCakePHPのエラーログを見ろとあります。ログには

    2015-08-18 11:16:43 Warning: Warning (2): Unknown: Failed to write session data
    (files). Please verify that the current setting of session.save_path is correct
    (/vagrant/app/tmp/sessions) in [Unknown, line 0]

    なんて書かれています。セッションデータをうまく書き込まれていないようです。

    Googleさんにセッションデータがなぜ書き込めないかを聞いてみると、Vagrantの同期フォルダの権限の設定が間違っているとのこと。こちらのページのsynced_folderの設定を行うとうまく行きました。オーナーとグループをapacheにすればよさそうです。

    baserCMSのGitHubにVagarantFileのサンプルがありますが、こちらのsynced_folderの設定のままだと、私のところではうまくセッションの書き込みができませんでした。今までうまくいっていましたがどうしてなのだろうか?

    以上、2日位悩んだ結果のメモです。まずはCakePHPで何かあったらログを読めということでしょうか。いつも基本を忘れます。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/03/28 17:08時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。

  • #baserCMS のPDFリンクプラグインを作成した話し

    baserCMS公式サイト

    10年以上お付き合いしている会社の株主向けのサイトを運営しているのですが、そろそろリニューアルしましょうということになりました。今まではベタにPHPを使って書いていましたので、キチンとPHPのフレームワークを使って作成することにします。PHPのフレームワークといっても、CakePHPしか知らないので、CakePHPで作成してきます。

    CakePHPの上で作っていくのもいいのですが、今回はCakePHPの上で動いているbaserCMSというコンテンツ管理システムの上で作成して行きます。会社のサイトですので、Wordpressのように時系列で記事を並べていくのではなく、固定ページ中心ですので、WordpressではなくbaserCMSが丁度いいのです。

    しかし、会社サイトといっても、株主向けのサイトでもありますので、PDFファイルのIR情報やニュースリリースを掲載しなければいけません。しかも、IR情報というのは面倒なもので、証券取引所からのお達しで発表時間よりも、PDFファイルを前に見せることは厳禁です。IR情報を見て株の売買をするのですから、発表前の情報を手に入れられてしまうことは御法度です。

    そこで、PDFファイルを時間によって記事リストを生成できるようなことを実現します。時間での表示管理はbaserCMSにデフォルトでインストールされているブログプラグインに、日付でアクセス制限をする機能がありますので、こちらを利用することにします。

    今回はブログブラグインにPDFファイルを登録できるようにしました。ブログプラグインのpostテーブルにPDFファイル名の項目を追加して、プラグインを直接改造する訳にはいかないので、PDFリンクプラグインを別途開発して、postテーブルに1対1でPDF情報を格納するテーブルを用意しました。これでbaserCMSがアップデートした場合にも対応できます。

    ブログプラグインの管理ページでPDFファイルを指定してファイルをアップできる機能を、PDFリンクプラグインとして追加しています。同じような機能を持ったプラグインを探しても見つからなかったので自分で作ることにしました。もしも、存在したならば、今回はbaserCMSのプラグインの開発のスキルを習得できたということでよしとしましょう。

    作成したbaserCMSのPDFリンクプラグインをGitHubに置いておきます。

    https://github.com/muneando/basercms-plugin-pdf

    ご自由にお使いください。バグを見つけたり機能アップしたら、GitHubから連絡ください。ただし、今回のサイトを作成するにあたっての必要最上限の機能しか実現していませんので、機能アップをしていただければ、大変うれしいです。

    ページ内で表示するPDFファイルへのリンクは、PDFリンクプラグインのヘルパーで実現しています。ブログの本文とPDFファイルをどちらを優先してリンク先で表示できるかを、PDFリンクプラグインの管理ページで指定できます。前述の通りPDFファイルへの直リンクはダメですので、ユーザーがアクセスできないところにPDFファイルを置いて、PDFファイルをダウンロードする前に、時間をチェックできるようにしています。

    使い方の説明は、GitHub の README.md をご覧ください。

    このプラグインの作成で参考したのは、materializing 氏の Keyword プラグインです。参考というよりも、baserCMSのプラグインのイベント辺りは丸写しです。おかげでCakePHPのイベントについて理解できました。materializing 氏には、baserCMSのプラグインについて相談に乗っていただき感謝です。

    実際に動いているサイトは、まだテスト段階なので公開していません。PDFリンクプラグイン以外にも、IRカレンダーを表示するためのbaserCMSブラグインも作成してしましました。もし、お客さんにOKいただいたら、baserCMSの利用例としてご覧いただけるようにします。