レンタルサーバでEC-CUBE3のURLにhtmlを付けさせない方法

以前にEC-CUBE3をレンタルサーバにインストールする際のURLの設定の仕方について以下の記事を書きました。

amidaike.hatenablog.com

通常ec-cubeをそのままインストールすると http://hogehoge.com/html/ とhtmlがurlについてしまいます。

その回避方法として上記記事を作成したのですが、 この記事内ではファイルを移動したりと結構面倒なことをしていたため、 .htaccessを使って対処できないかなと思い、 .htaccessを以下のようにごにょごにょと対応してみました。

ec-cube直下の.htaccessに現状

order allow,deny
deny from all

と記述されている内容を

<FilesMatch "^composer|^autoload|^cli-config|^COPYING|\.(ht|ini|lock|dist|git|sh)$">
    order allow,deny
    deny from all
</FilesMatch>

<Files ~ "index.php|index_dev.php">
    order deny,allow
    allow from all
</Files>

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /html/

    RewriteRule ^user_data/(.*)$ /html/user_data/$1 [QSA,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|css|ico|js)$ [NC]
    RewriteRule ^(.*)$ index.php [QSA,L]

</IfModule>

に変更します。 その後、

app/config/eccube/path.yml

にあるroot_urlpath を

root_urlpath:

に修正すればhtmlがなくてもhttp://hogehoge.comだけでアクセス出来るようになります。

これで問題なく動作できるかどうか試していただけると助かります。 こちらはApache2.4未満の方を対象にしていますので、Apache2.4以上またはApache以外をお使いの方は別途対応できればと思います。

ただしこちらの対処だけではまだ不充分であり、 srcディレクトリやtestディレクトリvendorディレクトリなどの直下に対して、 appディレクトリ直下に置いてある.htaccessと同じものを置いて制限をかける必要があります。

【追記】
さくらサーバだとOptions +FollowSymlinksが使えないため、Optionsの行を消して対応可能かどうか試して頂ければと思います。

プラグイン使用時に<html>タグが削除される及び文字化けが発生する問題

現在公開されているEC-CUBE3向けのプラグインではプラグイン対象ページだと

<!doctype html>
<html lang="ja">
</html>

のタグが出力されない現象及び文字化けが発生しています。

原因は、 $crawler->html(); を使うとタグが出力されない及び文字化けが発生します。

対処方法として、

public function Hoge(・・・・)
{
・・・・
    $crawler = new Crawler($response->getContent());
    $html = $this->getHtml($crawler);
・・・
}

/**
 * 解析用HTMLを取得
 *
 * @param Crawler $crawler
 * @return string
 */
private function getHtml(Crawler $crawler)
{
    $html = '';
    foreach ($crawler as $domElement) {
        $domElement->ownerDocument->formatOutput = true;
        $html .= $domElement->ownerDocument->saveHTML();
    }
    return html_entity_decode($html, ENT_NOQUOTES, 'UTF-8');
}

というようにgetHtmlを自作してdomElementを1行ずつ取得することで文字化けは直ります。

また、$crawler->filterも同様に文字化けが発生しますので、

$oldElement = $crawler->filter('#main');
$oldHtml = $oldElement->html();
$oldHtml = html_entity_decode($oldHtml, ENT_NOQUOTES, 'UTF-8');

とすることでこちらも対応可能です。

本来であれば本体側で組み込んで欲しい機能ですね。

EC-CUBE3の勉強会資料を公開

過去3回EC-CUBE3向けの勉強会を開催しているのですが、要望が多かったのでスライド資料を公開しました。

少しでもEC-CUBE3の理解の手助けになれば嬉しいです。

最後の資料はプラグイン作成用の簡単な説明資料となっていますので、プラグインを作る方にとっては少しでも手助けになるのではないかなと思います。

EC-CUBE3でGmailを使ったメール送信方法

EC-CUBE3ではメール送信に

と3つのtransportが設定できます。

メールサーバを設定するにはinstall時に設定可能ですが、 インストール後に再設定をし直すには以下の箇所で設定できます。

app/config/eccube/mail.yml

mail:
    transport: smtp
    host: localhost
    port: 25
    username:
    password:
    encryption: null
    auth_mode: null

gmailを使って送信したい場合、以下のように設定するとGmailを使って送信できます。

mail:
    transport: smtp
    host: smtp.gmail.com
    port: 465
    username: GMAILのユーザー名
    password: GMAILのパスワード
    encryption: ssl
    auth_mode: login

メールサーバの指定が簡単に設定出来るのは便利ですね。

[追記] Gmailの設定によってはアプリを許可する必要がありますので、 Gmailで送信できないという方は一度Googleにログインして許可して確認してみてください。

安全性の低いアプリがアカウントにアクセスするのを許可する - Google アカウント ヘルプ

レンタルサーバでEC-CUBE3でのURL設定の仕方について

少し間が空いてしまいましたが、 以前にEC-CUBE3のURL設定について記事を書きました。

amidaike.hatenablog.com amidaike.hatenablog.com

通常のURLの設定方法については、 これらの記事に記載されている通りDocumetRootを

/Applications/MAMP/htdocs/eccube/html

として設定してhttp://ドメイン名/で接続する方法であったり、 htmlというディレクトリ名を

/Applications/MAMP/htdocs/eccube/store

に変更する事でhttp://ドメイン名/storeというURLで接続可能となります。

ところが開発コミュニティーを見ると、

http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=16212&forum=10&post_id=71962#forumpost71962xoops.ec-cube.net

http://(ドメイン名)/html/index.php
ではじまるものを
http://(ドメイン名)/index.php

というようにレンタルサーバで自由にDocumentRootを設定できないが、 http://(ドメイン名)/として設定したい時があります。

これらはどのように設定するかというと、 公式にはサポートされていない方法ではありますが以下のように対応する事で実現可能となります。

EC-CUBEをインストールしたディレクトリ先は /home/hoge/EC-CUBEROOT とします。

  1. インストール
    http://ドメイン名/html/install.php から普通にインストールを行ってください。

  2. ファイルの配置場所変更
    /home/hoge/EC-CUBEROOT/htmlにある以下の3つのファイル
    index.php
    .htaccess
    robot.txt
    /home/hoge/EC-CUBEROOT 直下へ移動させるかコピーしてください。

  3. index.phpの書き換え
    require __DIR__ . '/../autoload.php'; と記述されている箇所を require __DIR__ . '/autoload.php'; に変更します。

  4. path.ymlの書き換え

/home/hoge/EC-CUBEROOT/app/config/eccube/path.yml

にある

root_urlpath: /html

root_urlpath: 

に変更してください。

上記の設定を行う事で、 http://ドメイン名/ で接続できるようになります。

本来であればインストール時にそういうオプションがあれば良いんですが、 当分用意されなさそうですなので、スクリプトを作成して公開するようにします。

EC-CUBE3を開発する時に参考になる本

前回まではEC-CUBE3のインストールおよびURL構成について説明しました。

今回からはEC-CUBE3を開発する方法を書いていきます。

EC-CUBE3の基本要件としては、

EC CUBE3.0.0の要件 · EC-CUBE/ec-cube Wiki · GitHub

というようになっており、Symfony2コンポーネントであるSilexを使って開発されています。

このSilexを使って開発するためには、Symfony2の知識が必須となってきます。

Symfony2 ドキュメントポータル

TOPページ - Silex ユーザーガイド

を一通り読めば理解は出来るのですが、基礎知識を作る上では以下の本が参考になります。

効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門

効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門

日本語で読めるSymfony2の本はこれ以外には残念ながら見当たりません。

但し、Symfony2.1を対象にしているため現行のバージョンと大分乖離がありますが、
基礎となる部分は理解出来ると思いますのでまずはここからSymfony2の知識を仕入れるのが近道になると思いますのでぜひ一度参考にしてください。

Symfony2.7に対応した本を誰か出してくれないんですかね。。。

EC-CUBE3のURL設定について2

前回はEC-CUBE3のURLの設定方法について書きました。

amidaike.hatenablog.com

今回は

http://localhost:8001/store

みたいに書く方法です。

これは非常に簡単で、

/Applications/MAMP/htdocs/eccube/html

とhtmlと記載している箇所をstore というようにディレクトリ名をhtmlからstoreへ変更し、

httpd.confを以下のように変更してください。

Listen 8001

<virtualhost *:8001>
  DocumentRoot "/Applications/MAMP/htdocs/eccube"
  <IfModule dir_module>
    DirectoryIndex index.html index.php
  </IfModule>
</virtualhost>

こうすることで、

http://localhost:8001/store

とサブディレクトリとして扱えるようになります。

非常に簡単に設定できますね。 サイトトップは企業サイトとして作成し、ECサイトはサブディレクトリとして扱いたいという方はこちらの方法となります。