Movable Typeクラウド版ではダイナミックパブリッシング用にPHPが実行できるようになっています。独自のPHPファイルを置いて実行することも可能ですが、以下のように「一部可」という不明瞭な制限があります。
PHP スクリプトの実行
一部可
※MySQL の操作は不可
※独自スクリプトの動作を保証するものではありません。また、技術サポート対象外となります
ということで、実際に遭遇した制限をまとめてみました。
出力が1時間キャッシュされる
PHPの出力が1時間キャッシュされます。このキャッシュは再構築時に破棄される為、通常のダイナミックパブリッシングでは問題になりませんが、PHPで動的に表示の変更などを行おうとすると罠にはまります。
このキャッシュはHTTPのCache-Controlヘッダフィールドで制御可能なので、以下の記述をPHPファイルの先頭に入れておくことでキャッシュされないようにすることができます。
header('Cache-Control: private');
PATH_INFOなURLは認識されない
PATH_INFOなURLは認識されず404になります。
これはおそらくnginxの設定で末尾が.phpであるURLをPHP-FPMに渡す設定になっているからだと思われます。
セッションが使えない
セッションが使えません。$_SESSIONに値を設定しても保存されず、次のリクエストの時には空になっています。ダイナミックパブリッシングにはセッションは不要だからでしょうが、なかなか予想外の制限です。
curlがインストールされていない
curlモジュールはインストールされていないので使えません。
file_get_contents()にURLを渡すことでHTTP通信自体はできます。
file_get_contentsでhttps通信ができない
file_get_contents()でHTTP通信はできますが、HTTPSはできません。おそらくopensslモジュールがインストールされていない為だと思われます。
まとめ
Movable Typeクラウド版のPHPは思った以上にダイナミックパブリッシングに特化したセッティングになっているようで、ダイナミックパブリッシングに不要な機能は使えないと思ったほうが無難なようです。
セッションとHTTP/HTTPS通信ができれば、CMS付きのFacebook/Twiteerアプリプラットホームとして使えるので非常に便利なのですが……
※2017年8月追記
Nginx版の他にApache版が増え、Nginx版では以下の様に「不可」になっていました。
不可
※ プラグインにおけるPHPの動作については、開発元サポートでの対応となります
Nginx版でもダイナミックパブリッシングは使用できるのでPHPも動作するはずですが、やはりセッションやPATH_INFOが使えないという制限は大きすぎたということなのでしょうか。