5丁目通信(仮称)

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

カテゴリー: オープンソース

  • #PHP のis_file()で必ずfalseが返ってしまう話し

    タイトル通り、PHP のis_file()で必ずfalseが返ってしまうということで、丸半日悩んだこと。原因は簡単なことでした。簡単なことだけど、どうせ忘れるので、覚え書きを書いておきます。

    ファイルが存在するのに、is_file()で必ずfalseが返ってしまいます。調べてみたら、フルパスでファイルを指定しろとか言われます。最初からフルパスの指定です。

    ローカルのVagrantで動かしているサーバー上では、正しくtrueが返ります。テストサーバーで使用している実サーバーではfalseになってしまいます。両方ともCentOSでバージョンも同じ。PHPもバージョンも同じです。

    $path_name = Configure::read('Pdf.upload_dir') . $fileName;
    if( is_file($path_name) ){
        :
        :
    

    このようなCakePHPのコードです。デバックすると正しくパスからファイル名が設定されています。

    ふと気なったのは、ファイル名の後ろに空白が入っていた。まさかと思ってtrim()で空白をカットしてみる。

    するとうまくいった。だけど、どうしてローカルで動いていたかは謎です。

  • phpMyAdminでログインできない問題の話し

    テストサーバーを作りたくて、いろいろとインストールします。しかし、phpMyAdminがログインできない問題に遭遇。「phpMyAdmin ログインできない」でGoogleさんに聞いた結果のサイトに書いてある通り phpMyAdmin の config.inc.php の設定ファイルを変えてもダメ、MySQLの認証を設定設定してもダメ。

    しかたないので、一旦phpMyAdminを削除して、再度インストール。これもダメ。phpMyAdminの最新版をソースからダウンロードしてインストール。こちらはMySQLが古いと怒られてダメ。もうダメダメです。

    ふと、Apahceのエラーログを見てみると、

    [Tue Sep 23 16:46:03 2014] [error] [client 192.168..xxx.xxx] PHP Warning:  Unknown: POST Content-Length of 104 bytes exceeds the limit of -1048576 bytes in Unknown on line 0, referer: http://192.168..xxx.xxx/phpmyadmin/index.php
    

    というのが出ていた。Unknown: POST Content-Length of というのをまたまた Googleさんに聞いてみると、php.ini の post_max_size の値が小さいとのこと。今、設定している post_max_size の値を確認してみる。すると、

    ; Maximum size of POST data that PHP will accept.
    ; http://www.php.net/manual/en/ini.core.php#ini.post-max-size
    post_max_size = 3232323232323232323232323232323232323232323232323232323232323232M

    となっていた。こらー誰が設定した???

    post_max_size = 32M

    に設定すると、無事にphpMyAdminにログインできた。phpMyAdminの問題というよりも、PHPの問題。やはり、ログを見ることは大事。

    著:山田祥寛
    ¥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 の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の利用例としてご覧いただけるようにします。

  • IE11でレイアウトが崩れたときの覚え書きを残しておく話し

    今、サイトをBaserCMSの上でTwitter Bootstrapで作っています。普段使っているChromeとFirefoxで確認しながら、ようやく完成というところでIE11で確認したところ、見事にレイアウトを崩れています。いつもの通り、このIEめが、とムッキーとなります。このままIEは非対応ということもできないので対応方法を探ります。

    HTML1202: http://hoge/ は、[イントラネット サイトを互換表示で表示する] がオンであるため、互換表示で実行中です。

    と表示されています。今、テストしているサイトは、Vagrantで開発環境を作っているので、イントラネットなのでしょう。では互換表示をオフにするにはどうすればいいのでしょう。

    そういえばIEは互換モードなんてありましたが、IE11ではその切り替えのアイコンがなくなっています。行き当たったサイトに書いているように、IE11の「ツール」メニューの「互換表示設定」で互換モードをオフすることができます。

    ie11

    これで見事にレイアウトの崩れが直っていました。まあ、本番サイトではイントラネットとはならないので、正常に表示されると思いますが、やはりIEには落とし穴があります。

    IE12,13・・・になったらいちいち書き換えなければいけないの? となりますので、これは書かなくもいいでしょう。

    追記(2020年8月27日)

    まだGoogleさんに聞いて、この記事にたどり着く人がいますけど、この記事は非常に古いのです。今となってはおかげさまでIEのサポートは打ち切りとなりましたので、こんな苦労をしなくてもよくなりました。本当に喜ばしいことです。

    これからは「IEが動かない」と言われても、「IEはサポート外だから、これからはEdge(Chromium対応のほう!)ですよ」と言ってやりましょう。その前に案件の契約のときに、サポートするブラウザからIEを忘れずに外しましょう。昔の契約でIEが残っていたら、ぜひとも外すように交渉しましょう

  • #WordPress 4.0 “ベニー” インストール

    このサイトで使っているWordPressが4.0になったということで、アップデートしました。Wordpress本体、アップデートに伴ってプラグイン、テーマもアップデートとなりました。

    トラブルなしに無事にアップデートできました。トラブルがあったらデータのバックアップがあるといえども、元に戻すのが面倒なのでよかったです。今までWordpressのアップデートを何回もやってきましたが、まだアップデートが失敗したことはありません。それだけ、Wordpressを開発している皆さんの努力の賜物です。

    記事の追加編集のユーザーインターフェイスは変わっていなそうなので、Wordpressを使っているお客さんからサポートは、今回しなくてよいでしょう。

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

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

  • WordPressのTinyMCE Advanced プラグインと Markdownの話し

    この WordPress ブログでも Markdown を使っています。使っているのは Jetpack の Markdown です。Jetpack はいろいろてんこ盛りですので、同じ機能のプラグインはどんどん削除しています。これは WordPress の正しい使い方かどうかわかりません。

    Markdown でよく使うのは、ソースコードの挿入です。ソースコードを表示するのに、SyntaxHighlighter 系のプラグインをインストールしましたが、どういう訳かうまく表示できません。そこで行き当たったのが Markdown での入力です。バッククォートで囲めばいいという気軽さで重宝しています。Markdown を使えば簡単に書式を指定できるし、Evernote でも Markdown をサポートして欲しいくらいです。

    最近になってMarkdownのコードがそのまま表示されるようになってしまいました。何か悪さをしているかと思えば、直近でインストールしたTinyMCE Advancedプラグインでした。こちらはGUIで簡単に書式を設定できるプラグインです。TinyMCE Advanced プラグインを無効にしてみると、正しく Markdown が表示されます。TinyMCE Advanced プラグインが内部でバッククォートを表示できるように変換してくれているのでしょう。

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

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

  • VirtualBoxでエラーが出た話し

    開発環境を vagrant up で起動したら、途中で止まってしまう。Virtual Box のマネージャーに表示されているプレビューには、小さいながら何かで止まっていることがわかる。そこでVagrantfileに

    vb.gui = true

    を追加してコンソールを表示してみる。

    するとVirtual Boxが次のエラーのダイアログを表示していた。

    VT-x/AMD-V hardware acceleration is not available on your system. Your 64-bit guest will fail to detect a 64-bit CPU and will nor be able to boot.

    Googleさんに「Vituralbox エラー VT-x」で聞いてみると、PCのBIOSでVT-xが有効になっていないとことだった。BIOSを見てみても、その辺りは見つからない。

    次は、Hyper-Vが悪さしているとのこと。そう言えば最近、スタート画面にHyper-Vのメニューが増えていたような気がする。そこで、そのサイトのようにHyper-Vを無効にする。

    今度は無事に vagrant up ができた。でも、どうしてHyper-Vが追加されたのだろうか?

    著:大竹 龍史, 著:山本 道子
    ¥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調べ)
  • vagrant upでエラーが出た話し

    久しぶりにvagrantでテスト環境を作っているところでvagrant upを実行してみた。

    実際には、Windows上のVagrantでCoreOSを動かして、その上でdockerを動かそうと目論んだのだが。

    普段なら、仮想環境が起動されてテスト環境が起動されてくるのだが、今回は次のようなエラーが出た。テスト環境が動いてくれないと、これからの作業に支障をきたしてしまうので解決しておかなければならない。

    $ vagrant up
    
    Thanks for wanting to use Vagrant! Unfortunately, this is not the way
    to install Vagrant anymore. We now make installers for the various operating
    systems Vagrant supports.
    
    Vagrant is no longer distributed as a RubyGem. Please download the latest
    version for your operating system from the URL below. If you still wish
    to use the RubyGem version, you can manually install version 1.0.7. Note that
    the RubyGem version hasn't been updated in over a year and will no longer
    receive any updates.
    
    Prior to installing Vagrant using the installer, make sure you uninstall
    all your Vagrant gems, since they sometimes conflict.
    
    http://www.vagrantup.com
    
    If you want to learn more about why we don't distribute using RubyGems
    anymore, please read this: http://mitchellh.com/abandoning-rubygems

    vagrantup.comに行って最新のvagrantをダウンロードしてインストールしてみる。VirtualBoxも再インストールする。しかし、同じエラーが出る。

    まじめにエラーメッセージを読んだら、トンチンカンな対応をしているようだ。

    $ gem uninstall vagrant

    を実行して、RubyGemsからVagrantをアンインストールしてみる。今度は無事にvagrant upができるようになりました。

    私自身Rubyを使っていないし知らないので、RubyGemsがどうなっているかはわからない。ただVagrantが動けばいいのでした。

    Windows上のVagrant上のcoreOS上のdocker上のUbuntuは無事に動いています。

    著:大竹 龍史, 著:山本 道子
    ¥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 のテーマ配置場所がドキュメントルートの下だった話し

    CakePHPでサイトを作成していると、静的ページの編集追加も自分で作らないといけないし、お客さんでも編集可能にしたり、その他諸々便利そうだからということbaserCMSをプラットフォームにしてみたらどうなるかとインストールしてみた。

    しかしながらbaserCMSのテーマ配置場所がドキュメントルートの下にあるということはちょっと驚いた。ビューの下ではないのね。CakePHPのテーマの機能は使っていないのかな。

    もしかしたら、.htaccessにゴチョゴチョ設定されているから直接ファイルにアクセスできないようにしているとか思ったらそうではなかった。もしかしたらブログでアップロードされたファイルもwebrootのfilesの下に入ってしまうのかな。

    何かbaserCMSのドキュメントに書かれていないようなテーマの配置場所を変更する設定方法があるのだろうか?

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • PHPで西暦を和暦に変換する処理を書いた話し

    西暦を和暦に変換する処理を書きました。

    <? php echo "平成". (date("Y") - 1988) . "年", date("n月j日"); ?>
    
    平成26年3月27日

    本当だったら、西暦和暦変換関数なんてゴリゴリ書かなければいけないのですが、現在の日付を変換するだけで過去の年号に対応しなくてよい処理なので、これでよしとしました。よくあるサンプルだと、大正、明治、慶応とか変換してくれるものがありますが、あまり複雑にしても仕方ないのでシンプルにしました。シンプルが大事。コードを見て、ふざけんな、と言う人がいるかもしれません。だって、昭和の年(1988年以前)だったら、マイナスの年になりますから・・・。

    ただし、いずれにしても平成でなくなったら対応する必要があります。

    和暦は面倒なので西暦でやりたいのですが、お客さんのご希望なので仕方ありません。

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