CSVDataImExporterプラグイン(ブロックエディタ対応)

October 19,2021 11:55 PM
Category:[インポート・エクスポート]
Tag:[]
Permalink

現在販売中のCSVDataImExporterプラグイン(MT7コンテンツデータ対応版)について、ブロックエディタに対応しました。

1.追加機能

コンテンツタイプ(コンテンツデータ)の「テキスト(複数行)」で「入力フォーマット」が「ブロックエディタ」の場合のエクスポート・インポートが可能となりました。

CSVDataImExporterプラグイン(ブロックエディタ対応)

ブロックエディタはYAML形式でエクスポートされます。

CSVDataImExporterプラグイン(ブロックエディタ対応)

YAMLのフォーマットについては販売ページのマニュアルに記載予定です。

2.対応グレード

ブロックエディタ対応は、MT7コンテンツデータ対応(通常版および機能拡張版)で提供致します。

価格は据え置きです。

3.評価版ダウンロード・購入

評価版のダウンロード・ご購入はCSVDataImExporterプラグインのページにアクセスしてください。

「CSVDataImExporterプラグイン」のページ
「CSVDataImExporterプラグイン」のページ

Comments [0] | Trackbacks [0]

YAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処

October 12,2021 11:55 PM
Category:[Perl]
Tag:[YAML]
Permalink

PerlのYAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処方法を紹介します。

1.問題点

YAML::Tinyを使って下記のYAMLを読み込ませました。

test:
    type: text
    order: 1
    value: |
hello

が、読み込ませたところ、「YAML::Tiny found bad indenting in line 'hello' at」というエラーが発生しました。

エラーの内容的にインデントが間違っているようですが、YAMLのお作法的には間違っていないと思われます。

ということで、YAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処方法を紹介します。

2.対処方法

YAML::Tinyで複数行を記述する場合、インデントをつけて、

test:
    type: text
    order: 1
    value: |
        hello

とする必要があります。

複数行も場合も、

test:
    type: text
    order: 1
    value: |
        hello1
        hello2
        hello3

とする必要があるようです。

Comments [0] | Trackbacks [0]

bashでMySQLのselect結果を出力する方法

September 28,2021 11:55 PM
Category:[bash]
Tag:[bash, MySQL]
Permalink

bashでMySQLのselect結果を出力する方法を紹介します。

1.問題点

MySQLで次のようなデータベース・テーブルを作成し、3件のデータをinsertしました。

$ psql -q -U postgres
postgres=# create database testdb;
postgres=# \q
$ psql -q -U postgres -d testdb
testdb=# create table sample (data1 text, data2 text);
testdb=# insert into sample values ('aaa', 'xxx');
testdb=# insert into sample values ('bbb', 'yyy');
testdb=# insert into sample values ('ccc', 'zzz');
testdb=# select * from sample;
 data1 | data2
-------+-------
 aaa   | xxx
 bbb   | yyy
 ccc   | zzz
(3 行)

が、このデータをbashで出力する方法が分かりません。

ということで、bashでMySQLのselect結果を出力する方法を紹介します。

2.bashでMySQLのselect結果を出力する

bashでMySQLのselect結果を出力するには次のようにします。

#!/bin/bash
 
psql="psql -q -U postgres -d testdb --no-align -t --field-separator"
sql="select data1, data2 from sample"
 
while IFS='|' read data1 data2 ; do
    echo $data1 $data2
done < <(echo ${sql} | ${psql} '|' -q 2>/dev/null)

実行結果

# ./test.sh
aaa xxx
bbb yyy
ccc zzz
Comments [0] | Trackbacks [0]

Movable TypeのDataAPIで記事を投稿するサンプル

September 8,2021 11:55 PM
Category:[DataAPI]
Tag:[DataAPI, MovableType]
Permalink

DataAPIで記事を投稿するサンプルを紹介します。

1.はじめに

ネットにDataAPIで記事を投稿するサンプルがないのと、サンプルがあってもログイン・ログアウトといった処理が盛り込まれていて、コードが複雑になって理解が難しいので、シンプルなものを自作してみました。

2.サンプル

下記にサンプル(ほぼほぼそのまま利用可能)を示します。ご利用前に3項と4項には必ず目を通してください。

また、コードにコメントを記載しているので、解説は省略します。

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="<$mt:StaticWebPath$>data-api/v4/js/mt-data-api.min.js"></script>
<script type="text/javascript">
function post() {
 
    // DataAPIオブジェクト生成
    var api = new MT.DataAPI({
        baseUrl: '<$mt:CGIPath$>mt-data-api.cgi',
        clientId: 'post-entry',
        sessionPath: '/',
    });
 
    // ユーザー情報
    var credential = {
        username: "ユーザー名",
        password: "パスワード",
        remember: true
    };
 
    // 認証
    api.authenticate(credential, function(response) {
        if (!response.error) {
 
            // 記事データ
            var entry = {};
            entry['title']  = $('#title').val();
            entry['body']   = $('#text_body').val();
            entry['status'] = 'Publish';
 
            // 記事投稿
            api.createEntry(<$mt:BlogID$>, entry, function(response) {
                if (response.error) {
                    alert("Error:" + response.error.code + ':' + response.error.message);
                    return;
                }
                alert("Success:" + response.title);
            });
        }
    });
}
</script>
 
<div id="entry-post">
    <form name="CreateEntry" id="CreateEntry" method="post">
        <p><input type="text" name="title" id="title" placeholder="タイトル"></p>
        <p><textarea name="text_body" id="text_body" placeholder="本文"></textarea></p>
        <p><input type="submit" onclick="post(); return false;" value="投稿"></p>
    </form>
</div>

3.使い方

上記のコードをインデックステンプレートにペーストして、下記の赤色部分について、任意のユーザー・パスワードに書き換えてください。

    // ユーザー情報
    var credential = {
        username: "ユーザー名",
        password: "パスワード",
        remember: true
    };

テンプレートを再構築してページにアクセスすればフォームが表示されるので、タイトルと本文を入力して「投稿」をクリックすれば投稿できます。

投稿結果はJavaScriptのalertで表示します。

4.注意事項

パスワードは、ウェブサービスのパスワードを設定してください。ユーザー編集画面の「Webサービスパスワード」が該当します。

また、DataAPIを有効にするには、サイトの「設定」→「Webサービス」→「Data API」を有効にしてください。無効のまま投稿すると403エラーが発生します。

ただいシステム管理者はこの設定と無関係に投稿できるようです。

Comments [0] | Trackbacks [0]

WordPressの記事データをCSV形式でエクスポート・インポートできる「wp-csv-data-imexporterプラグイン」

September 1,2021 11:55 PM
Category:[自作プラグイン]
Tag:[Plugin, WordPress, wp-csv-data-imexporter]
Permalink

WordPressの記事データをCSV形式でエクスポート・インポートできる「wp-csv-data-imexporterプラグイン」を公開します。

1.主な機能

CSV形式で記事・固定ページ・カスタム投稿タイプのエクスポートおよびインポートが可能です。

インポートでは記事・固定ページ・カスタム投稿タイプの新規作成、あるいはID指定による上書きが可能です。

CSVデータは、カテゴリ・カスタムタクソノミー・カスタムフィールドにも対応しています。

カスタムフィールドはAdvanced Custom Fields/Smart Custom Fields/Custom Field Suiteのフィールドに対応しています。

2.CSVデータのエクスポート

左メニューの「ツール」→「CSVのエクスポート」をクリック。

CSVのエクスポート

エクスポート画面が表示されるので、投稿タイプ・CSVファイルの文字コード・ステータ等を選択して「エクスポート」をクリック。カスタム投稿タイプを利用している場合は「投稿タイプ」に表示します。

(クリックで拡大)
エクスポート画面

3.CSVデータのインポート

左メニューの「ツール」→「インポート」をクリック。

インポート

「インポーターの実行」をクリック。

インポート

アップロードファイルを選択し、「ファイルをアップロードしてインポート」をクリック。

(クリックで拡大)
エクスポート画面

これでインポートが実行されます。インポート状況は枠内に表示されます。

(クリックで拡大)
エクスポート画面

4.wp-csv-data-imexporterプラグインについて

wp-csv-data-imexporterプラグインの詳細は、下記のリンク先をご確認ください。

wp-csv-data-imexporterプラグイン
wp-csv-data-imexporterプラグイン

Comments [0] | Trackbacks [0]

Movable Typeのコンテンツデータで公開日を比較する方法

August 30,2021 11:55 PM
Category:[テンプレート]
Tag:[]
Permalink

Movable Typeのコンテンツデータで公開日を比較する方法を紹介します。

1.はじめに

この記事で紹介するテンプレートは次のとおりです。

コンテンツデータの公開日(年月日)と再構築日(年月日)を比較し、

  • 公開日より再構築日の方が古い場合:「この記事は未来のものです」を表示
  • 公開日より再構築日の方が古い場合:「この記事は過去のものです」を表示
  • 公開日と再構築日が同じ場合:「この記事は現在のものです」を表示

をそれぞれ出力します。

2.テンプレート

コンテンツデータ公開日のタイムスタンプを比較するテンプレートは下記になります。

<$mt:ContentDate format="%Y%m%d" setvar="content_date"$>
<$mt:Date format="%Y%m%d" setvar="publish_date"$>
 
<mt:If name="content_date" gt="$publish_date">
この記事は未来のものです
<mt:ElseIf name="content_date" lt="$publish_date">
この記事は過去のものです
<mt:Else eq="Date">
この記事は現在のものです
</mt:If>

このテンプレートはコンテンツタイプアーカイブに張り付けてください。

3.テンプレートの解説

まず、コンテンツデータの公開日(年月日)を、MTContentDateタグとsetvarモディファイアを使って、変数content_dateに保存します。年月日は数値として比較できるよう、formatモディファイアに"%Y%m%d"を設定し、"20210827"という風にに出力されるようにします。

<$mt:ContentDate format="%Y%m%d" setvar="content_date"$>

次に再構築された年月日を、MTDateタグとsetvarモディファイアを使って、変数publish_dateに保存します。その他は上の設定と同じです。

<$mt:Date format="%Y%m%d" setvar="publish_date"$>

保存した2つの変数を比較します。最初のMTIfタグには次のように設定します。

<mt:If name="content_date" gt="$publish_date">

MTIfタグのnameモディファイアに変数content_date、gtモディファイアに変数publish_dateを設定します。

nameモディファイアに変数を記述するときはそのままでいいですが、gtモディファイアに変数を設定する場合は変数名の前に"$"を付与してください。

これで「変数content_dateの値が変数publish_dateの値より大きいか?」という判定になります。大きい場合はMTIfタグの中の処理を実行し、

この記事は未来のものです

を出力します。

次のMTElseIfタグには次のように設定します。

<mt:ElseIf name="content_date" lt="$publish_date">

MTElseIfタグにはMTIfタグと同じように条件を設定することができます。ltモディファイアにはgtモディファイアと同じように変数の先頭んに"$"を付与します。

これで「変数content_dateの値が変数publish_dateの値より小さいか?」という判定になります。小さい場合はMTIfタグの中の処理を実行し、

この記事は過去のものです

を出力します。

最後のMTElseタグは、上記の2つの判定条件のいずれにもマッチしなかった場合(=2つの変数の値が等しい場合)に実行されます。

<mt:Else eq="Date">

この条件が実行されると、

この記事は現在のものです

を出力します。

4.注意事項

スタティックパブリッシングの場合、MTDateタグの情報を更新させるため、日毎の再構築が必要です。

Comments [0] | Trackbacks [0]

Advanced Custom FieldsでGoogleマップが表示されない場合の対処

August 17,2021 11:55 PM
Category:[トラブルシューティング]
Tag:[AdvancedCustomFields, WordPress]
Permalink

WordPressのプラグイン「Advanced Custom Fields」でGoogleマップが表示されない場合の対処方法を紹介します。

1.問題点

「Advanced Custom Fields」でGoogleマップをカスタムフィールドとして表示するよう設定しました。

(クリックで拡大)

が、投稿画面では「このページでは Google マップが正しく読み込まれませんでした。」と表示されます。

(クリックで拡大)

ということで、WordPressのプラグイン「Advanced Custom Fields」でGoogleマップが表示されない場合の対処方法を紹介します。

2.対処方法

まず、Googleのサービスを利用するためのAPIキーを作成します。

Google Cloud Platform」にアクセスし、左上のナビゲーションメニューをクリックして、「APIとサービス」→「認証情報」をクリック。

「認証情報を作成」→「APIキー」を選択(私はすでにAPIキーを作成してしまっているので、文章のみ)。

これでAPIキーが作成されるので、キー名をクリックした先にあるAPIキーをコピーしてください。

このままの状態ではAPIキーを誰でも使えてしまうので、作成されたAPIキーのリンクをクリックし、遷移したページで使用制限の設定を適宜行ってください(ここでの説明は省略します)。

次に、Google Cloud PlatformのAPIライブラリの、

  • Maps JavaScript API
  • Places API
  • Geocoding API

を有効化します。

有効化するには、先ほどの「Google Cloud Platform」にアクセスし、左上のナビゲーションメニューをクリックして、「APIとサービス」→「ライブラリ」をクリック。

「Maps JavaScript API」をクリック。

「有効にする」をクリック。これで有効化されます。

他のAPIも同様の手順で有効化してください。「Geocoding API」はAPI一覧画面右側の「すべて表示」をクリックするか。「Maps JavaScript API」を有効化したあとに表示されたAPI一覧から選択できます。

最後に、取得したキーをWordPressのfunctions.phpに設定します。

WordPressの「外観」→「テーマエディター」をクリック。

「テーマのための関数(functions.php)」をクリック。

テキストエリアの最後に下記の内容をペースト。

function my_acf_google_map_api( $api ){
    $api['key'] = 'ここにAPIキーをペースト';
    return $api;
}
 add_filter('acf/fields/google_map/api', 'my_acf_google_map_api');

これでGoogle Mapが表示されます。

(クリックで拡大)

Comments [0] | Trackbacks [0]

Movable Typeのダイナミックパブリッシングで「An error occurs.」になる場合の対処

Movable Typeのダイナミックパブリッシングで「An error occurs.」になる場合の対処について紹介します。

1.問題点

Movable Typeにダイナミックパブリッシングを設定してページを開いたところ、「An error occurs.」というエラーが発生しました。

なお、下記は設定済です。

PHP の設定ファイル(php.ini)内にタイムゾーンの設定を記述し、ウェブサーバーを再起動

date.timezone = Asia/Tokyo

参考:Q.ダイナミックパブリッシングでエラー「ページが見つかりません。 An error occurs.」

httpd.conf に以下の記述を追加して再起動

<Directory /usr/local/apache/htdocs/mt>
  AllowOverride All
</Directory>

参考:ダイナミックパブリッシング

2.対処

より詳細なエラーを取得するために、mt-config.cgiに

DebugMode 1

を設定してページにアクセスしたところ、「Deprecated: Function create_function() is deprecated」が表示されました。

調べたところ、PHP7.2以降でcreate_function()を実行すると、このエラーに遭遇するようです。

検証していたMovable Typeのバージョンは6.3.7で、php/extlibやphp/lib配下のPHPでcreate_function()が多数起動していました。

対処としてはMovable Typeを6.5.x以降にバージョンアップすることですが、create_function()のコードを書き換える方法もあるようです。

参考:PHP 7.2 で発生する「 Function create_function() is deprecated」エラーに対処する

3.その他

ダイナミックパブリッシングを簡単に動作確認するには、インデックステンプレートを作成し、中に

<MTDate>

の1行を書いて、ダイナミッパブリッシングで保存し、ページを開いたときに、

2021年8月 1日 16:25

という風に表示されればOKです。

Comments [0] | Trackbacks [0]

MySQL(phpMyAdmin)でエラー#1089になる場合の対処

August 1,2021 11:55 PM
Category:[MySQL]
Tag:[MySQL, phpMyAdmin]
Permalink

MySQL(phpMyAdmin)でエラー#1089になる場合の対処方法を紹介します。

1.問題点

phpMyAdminで下記のようなテーブルを作成してみました。

"id"を「AUTO INCREMENT(A.I)」を設定しています(プライマリーキーはその流れで設定)。

(クリックで拡大、以下同様)
テーブルを作成

ですが、この状態で保存すると、

#1089・キーのプレフィックスが不正です。キーが文字列ではないか、プレフィックス長がキーよりも長いか、ストレージエンジンが一意検索のプレフィックス指定をサポートしていません。

というエラーが表示され、保存することができません。

#1089・キーのプレフィックスが不正です。キーが文字列ではないか、プレフィックス長がキーよりも長いか、ストレージエンジンが一意検索のプレフィックス指定をサポートしていません。

ということで、エラー#1089になる場合の対処方法を紹介します。

2.対処方法

"id"をプライマリーキーにせず、「AUTO INCREMENT(A.I)」も設定しない状態で保存。

テーブルを作成

"id"をチェックして「ユニーク」をクリック。

これでインデックステーブルが生成されます。

インデックステーブルが生成

"id"の「変更」をクリック。

idの「変更」をクリック

「AUTO INCREMENT(A.I)」をチェックして保存。

「AUTO INCREMENT(A.I)」をチェックして保存

これで"id"がAUTO INCREMENTになりました。

AUTO INCREMENT

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

phpMyAdminで「unknown system variable 'lc_messages'」となる場合の対処

July 13,2021 11:55 PM
Category:[Linux]
Tag:[Linux, PHP, phpMyAdmin]
Permalink

phpMyAdminで「unknown system variable 'lc_messages'」となる場合の対処方法を紹介します。

1.問題点

phpMyAdminをインストールしてアクセスしたところ、「unknown system variable 'lc_messages'」というエラーが発生しました。

(クリックで拡大)
「unknown system variable 'lc_messages'」というエラー

どのサイトを調べても「php.iniの設定を変更してmysqli拡張を有効にする」「php-mysqlがインストールされていない」とありますが、その問題ではないようです。

2.原因

PHPのバージョンは7.3で、MySQLのバージョンが5.1であることが原因のようです。

MySQL5.5以上にすることで解決します。

MySQL5.5にアップデートする方法は別の記事で紹介します。

3.参考サイト

参考サイトは下記です。ありがとうございました。

phpmyadminのエラーの原因と解決方法を教えてください。

Comments [0] | Trackbacks [0]

Linux(CentOS)でapxsがみつからない場合の対処

July 6,2021 11:55 PM
Category:[Linux]
Tag:[]
Permalink

Linux(CentOS)で、apxsがみつからない場合の対処方法を紹介します。

1.問題点

apxsは「APache eXtenSion tool」の略で、phpと連携させるためのモジュール生成等で必要なのですが、サーバに存在しません。

# apxs
-bash: apxs: command not found

ということで、apxsがみつからない場合の対処方法を紹介します。

2.apxsがみつからない場合の対処

httpd-develをインストールすることで解決します。

# yum install httpd-devel
 :
Installed:
  httpd-devel.x86_64 0:2.2.15-69.el6.centos
 
Dependency Installed:
  apr-devel.x86_64 0:1.3.9-5.el6_9.1        apr-util-devel.x86_64 0:1.3.9-3.el6_0.1     cyrus-sasl-devel.x86_64 0:2.1.23-15.el6_6.2     expat-devel.x86_64 0:2.0.1-13.el6_8
  openldap-devel.x86_64 0:2.4.40-16.el6
 
Complete!

これでインストールされました。

# apxs
Usage: apxs -g [-S <var>=<val>] -n <modname>
       apxs -q [-S <var>=<val>] <query> ...
       apxs -c [-S <var>=<val>] [-o <dsofile>] [-D <name>[=<value>]]
               [-I <incdir>] [-L <libdir>] [-l <libname>] [-Wc,<flags>]
               [-Wl,<flags>] [-p] <files> ...
       apxs -i [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...
       apxs -e [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...
Comments [0] | Trackbacks [0]

Movable Type 7のコンテンツデータ(コンテンツタイプアーカイブ)をページ分割する方法

June 23,2021 11:55 PM
Category:[ページ分割]
Tag:[MovableType, PageBute]
Permalink

Movable Type 7のコンテンツデータ(コンテンツタイプアーカイブ)をページ分割する方法を紹介します。

1.はじめに

Movable Type 7のコンテンツデータ(個別ページ)をページ分割する方法です。

ページ分割にはPageButeプラグインを利用します。

テンプレート種別でいうところの、「コンテンツタイプリストアーカイブ」をページ分割するのは情報があるようですが、「コンテンツタイプアーカイブ」をページ分割する情報がないようなので、本記事で紹介します。

なお、分割するにあたっては下記の条件となります。

  • 分割対象はコンテンツタイプ内の特定のコンテンツフィールド(テキスト(複数行))のみ

分割する方法は2つあるので、順番に説明します。

サンプルでは、分割するコンテンツフィールドの名前を「本文」としています。

2.コンテンツデータ(コンテンツタイプアーカイブ)をページ分割する(その1:コメント挿入)

まず、コンテンツタイプアーカイブテンプレートを次のように設定します。

前半の5行がコンテンツフィールドのページ分割、残りの部分はごちゃごちゃしてますがページネーションのためのテンプレート(Pagebuteの公式サイトから引用)です。

<mt:PageContents count="1">
  <mt:ContentField content_field="本文">
    <mt:ContentFieldValue><$mt:PageSeparator$>
  </mt:ContentField>
</mt:PageContents>
 
<mt:Pagination>
  <mt:PaginationHeader>
<div class="pagenate"><ul>
    <mt:IfPaginationFirst><li><a class="link_before" href="<$mt:PaginationFirst$>">&lt;&lt;</a></li></mt:IfPaginationFirst>
        <mt:IfPaginationPrev><li><a class="link_before" href="<$mt:PaginationPrev$>">&lt;</a></li></mt:IfPaginationPrev>
  </mt:PaginationHeader>
  <mt:IfPaginationCurrent>
    <mt:ignore>現在のページ</mt:ignore>
  <li><span><mt:PaginationLink element="number"></span></li>
  <mt:Else>
    <mt:ignore>それ以外(遷移用のリンクあり)</mt:ignore>
    <li><a href="<$mt:PaginationLink$>"><$mt:PaginationLink element="number"$></a></li>
  </mt:IfPaginationCurrent>
  <mt:PaginationFooter>
    <mt:IfPaginationNext><li><a class="link_next" href="<$mt:PaginationNext$>">&gt;</a></li></mt:IfPaginationNext>
    <mt:IfPaginationLast><li><a class="link_next" href="<$mt:PaginationLast$>">&gt;&gt;</a></li></mt:IfPaginationLast>
</ul></div>
  </mt:PaginationFooter>
</mt:Pagination>

そして、コンテンツデータ作成時、コンテンツフィールド「本文」に対し、ページ分割したい箇所に

<!-- Separator for PageBute -->

を挿入します。

たとえば以下のように挿入します。

本文(1ページ目)
 :
本文(1ページ目)
 
<!-- Separator for PageBute -->
 
本文(2ページ目)
 :
本文(2ページ目)
 
<!-- Separator for PageBute -->
 
本文(3ページ目)
 :
本文(3ページ目)

3.コンテンツデータ(コンテンツタイプアーカイブ)をページ分割する(その2:mtevalモディファイアを利用)

まず、コンテンツタイプアーカイブテンプレートを次のように設定します。

<mt:PageContents count="1">
  <mt:ContentField content_field="本文">
    <mt:ContentFieldValue mteval="1"><$mt:PageSeparator$>
  </mt:ContentField>
</mt:PageContents>
  
<mt:Pagination>
  <mt:PaginationHeader>
<div class="pagenate"><ul>
    <mt:IfPaginationFirst><li><a class="link_before" href="<$mt:PaginationFirst$>">&lt;&lt;</a></li></mt:IfPaginationFirst>
    <mt:IfPaginationPrev><li><a class="link_before" href="<$mt:PaginationPrev$>">&lt;</a></li></mt:IfPaginationPrev>
  </mt:PaginationHeader>
  <mt:IfPaginationCurrent>
    <mt:ignore>現在のページ</mt:ignore>
    <li><span><mt:PaginationLink element="number"></span></li>
  <mt:Else>
    <mt:ignore>それ以外(遷移用のリンクあり)</mt:ignore>
  <li><a href="<$mt:PaginationLink$>"><$mt:PaginationLink element="number"$></a></li>
  </mt:IfPaginationCurrent>
  <mt:PaginationFooter>
    <mt:IfPaginationNext><li><a class="link_next" href="<$mt:PaginationNext$>">&gt;</a></li></mt:IfPaginationNext>
    <mt:IfPaginationLast><li><a class="link_next" href="<$mt:PaginationLast$>">&gt;&gt;</a></li></mt:IfPaginationLast>
</ul></div>
  </mt:PaginationFooter>
</mt:Pagination>

そして、コンテンツデータ作成時、コンテンツフィールド「本文」に対し、ページ分割したい箇所に

<$mt:PageSeparator$>

を挿入します。

たとえば以下のように挿入します。

本文(1ページ目)
 :
本文(1ページ目)
 
<$mt:PageSeparator$>
 
本文(2ページ目)
 :
本文(2ページ目)
 
<$mt:PageSeparator$>
 
本文(3ページ目)
 :
本文(3ページ目)

3.その他のコンテンツフィールドについて

ページ分割対象でないコンテンツフィールドは、MTPageContentsタグの外に書くか、中に書くかで表示方法が変わります。

  1. MTPageContentsタグの中に書く:1ページ目のみに表示
  2. MTPageContentsタグの外に書く:すべてのページに表示

1.の書き方の例は下記です。

<mt:PageContents count="1">
商品名:<mt:ContentField content_field="商品名"><mt:ContentFieldValue></mt:ContentField>
価格:<mt:ContentField content_field="価格"><mt:ContentFieldValue></mt:ContentField>
  <mt:ContentField content_field="本文">
    <mt:ContentFieldValue mteval="1"><$mt:PageSeparator$>
  </mt:ContentField>
</mt:PageContents>
 :

2.の書き方の例は下記です。

商品名:<mt:ContentField content_field="商品名"><mt:ContentFieldValue></mt:ContentField>
価格:<mt:ContentField content_field="価格"><mt:ContentFieldValue></mt:ContentField>
<mt:PageContents count="1">
  <mt:ContentField content_field="本文">
    <mt:ContentFieldValue mteval="1"><$mt:PageSeparator$>
  </mt:ContentField>
</mt:PageContents>
 :
Comments [0] | Trackbacks [0]

PHP7.3とApacheを連携させる方法

June 21,2021 11:55 PM
Category:[Linux]
Tag:[Apache, Linux, PHP]
Permalink

PHP7.3とApacheを連携させる方法を紹介します。

1.問題点

PHPとApacheを連携させるためには、libphpXX.soというApacheモジュールが必要です。

このモジュールはPHPインストール時に自動的に設定されるようですが、今回PHP7.3をyumでインストールした際に、このApacheモジュールがありませんでした。

理由は、apxs(APache eXtenSion tool)というコマンドがLinuxにインストールされていなかったためです。

apxsのインストールは「Linux(CentOS)でapxsがみつからない場合の対処」をご覧ください。

本記事では、そのあとApacheと連係させる方法を紹介します。

特殊なケースと思いますが、参考になれば幸いです。

2.PHP7.3とApacheを連携させる方法

Apacheモジュール(libphp7.so)を、PHPのソースをコンパイルにより生成します。

PHP7.3のソースをダウンロード。wgetできない場合、URLからアーカイブをダウンロードします。

# wget --trust-server-names https://www.php.net/distributions/php-7.3.25.tar.gz

アーカイブを展開し、展開したディレクトリに移動。

# tar -zxvf php-7.3.25.tar.gz
# cd php-7.3.25

./configureの実行。"--with-apxs2=/usr/sbin/apxs"でapxsのパスを指定します。指定しないとlibphp7.soが生成されないので注意してください。

# ./configure --with-apxs2=/usr/sbin/apxs

libxml2など、./configureでエラーが発生する場合は適宜パッケージをインストールしてください。

余談で、libxml2-2.9.9.tar.gz(http://xmlsoft.org/download/)をインストールしましたが、python関連のエラーを避けたいため、./configureで下記のようにしました。

# tar -zxvf libxml2-2.9.9.tar.gz
# cd libxml2-2.9.9
# ./configure --with-python=no
# make
# make install

話を戻して、PHPの./configureが成功後、コンパイルします。

# make

これでlibs配下にlibphp7.soが生成されました。

# cd libs
# ls -l
total 34876
-rw-r--r-- 1 root root     1057 Apr 29 19:53 libphp7.la
-rwxr-xr-x 1 root root 35707918 Apr 29 19:53 libphp7.so

make installは実行せず、libphp7.soを/etc/httpd/modulesにコピー。

# cp libphp7.so /etc/httpd/modules/

あとは、httpd.confに下記の設定を追加します。

LoadModule php7_module modules/libphp7.so
 :
<FilesMatch \.php$>
     SetHandler application/x-httpd-php
</FilesMatch>

設定後、サーバを再起動。

# service httpd restart

これでブラウザからPHPファイルにアクセスして正常に表示されればOKです。

ビルドしたときのphp-7.3.25ディレクトリは削除してください。

Comments [0] | Trackbacks [0]

CentOS 6にPHP7.3をインストールする方法

June 9,2021 11:55 PM
Category:[Linux]
Tag:[Linux, PHP]
Permalink

CentOS 6にPHP7.3をインストールする方法を紹介します。

1.問題点

CentOS 6にyumでPHPをインストールすると、7.3のremiリポジトリを指定しても、5.3.3という古いバージョンがインストールされてしまいます(下記)。

# yum install --skip-broken --enablerepo=remi-php73 php php-cli php-common php-devel php-gd php-mbstring php-mcrypt php-mysqlnd php-pdo php-pear php-pecl-jsonc php-pecl-jsonc-devel php-process php-xml
Loaded plugins: fastestmirror, priorities, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * epel: ftp.iij.ad.jp
 * remi-php73: ftp.riken.jp
 * remi-safe: ftp.riken.jp
245 packages excluded due to repository priority protections
Package php-mcrypt is obsoleted by php-pecl-mcrypt, trying to install php-pecl-mcrypt-1.0.3-1.el6.remi.7.3.x86_64 instead
No package php-pecl-jsonc available.
No package php-pecl-jsonc-devel available.
Resolving Dependencies
--> Running transaction check
---> Package php.x86_64 0:5.3.3-50.el6_10 will be installed
---> Package php-cli.x86_64 0:5.3.3-50.el6_10 will be installed
---> Package php-common.x86_64 0:5.3.3-50.el6_10 will be installed
 :
---> Package php-process.x86_64 0:5.3.3-50.el6_10 will be installed
---> Package php-xml.x86_64 0:5.3.3-50.el6_10 will be installed
--> Finished Dependency Resolution
 
Packages skipped because of dependency problems:
    php-mysqlnd-7.3.25-1.el6.remi.x86_64 from remi-php73
    php-pecl-mcrypt-1.0.3-1.el6.remi.7.3.x86_64 from remi-php73
 
Dependencies Resolved
 
===============================================================================================================================================================================
 Package                                     Arch                               Version                                           Repository                              Size
===============================================================================================================================================================================
Installing:
 php                                         x86_64                             5.3.3-50.el6_10                                   updates                                1.1 M
 php-cli                                     x86_64                             5.3.3-50.el6_10                                   updates                                2.2 M
 php-common                                  x86_64                             5.3.3-50.el6_10                                   updates                                530 k
 php-devel                                   x86_64                             5.3.3-50.el6_10                                   updates                                513 k
 php-gd                                      x86_64                             5.3.3-50.el6_10                                   updates                                112 k
 php-mbstring                                x86_64                             5.3.3-50.el6_10                                   updates                                460 k
 php-pdo                                     x86_64                             5.3.3-50.el6_10                                   updates                                 80 k
 php-pear                                    noarch                             1:1.9.4-5.el6                                     base                                   393 k
 php-process                                 x86_64                             5.3.3-50.el6_10                                   updates                                 44 k
 php-xml                                     x86_64                             5.3.3-50.el6_10                                   updates                                108 k
Skipped (dependency problems):
 php-mysqlnd                                 x86_64                             7.3.25-1.el6.remi                                 remi-php73                             216 k
 php-pecl-mcrypt                             x86_64                             1.0.3-1.el6.remi.7.3                              remi-php73                              27 k
 
Transaction Summary
===============================================================================================================================================================================
Install      10 Package(s)
(後略)

ということで、CentOS 6にPHP7.3をインストールする方法を紹介します。

以下のサンプルはrootユーザーで実行しています。そうでない場合、suでroot権限実行するよう、適宜変更してください。

なお、CentOS 6はサポートが2020年11月30日に終了しているので、後述のyum installで下記のエラーが発生する場合、

Loaded plugins: fastestmirror, priorities, security
Determining fastest mirrors
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt

リポジトリリスト (/etc/yum.repos.d/CentOS-Base.repo) のURLを、パッケージが公開されているvault.centos.orgへ変更してください。

# sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
# sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo

2.CentOS 6にPHP7.3をインストールする

CentOSを最新化します(少し時間がかかります)。

# yum update

完了後、サーバを再起動。

# shutdown -r now

現在のPHPパッケージをアンインストールします。

PHPのパッケージをアンインストールするのは「yum remove php*」「yum remove php-*」です。

# yum remove php*
 : 
Removed:
  php.x86_64 0:5.3.3-50.el6_10                php-cli.x86_64 0:5.3.3-50.el6_10             php-common.x86_64 0:5.3.3-50.el6_10        php-devel.x86_64 0:5.3.3-50.el6_10
  php-gd.x86_64 0:5.3.3-50.el6_10             php-mbstring.x86_64 0:5.3.3-50.el6_10        php-pdo.x86_64 0:5.3.3-50.el6_10           php-pear.noarch 1:1.9.4-5.el6
  php-process.x86_64 0:5.3.3-50.el6_10        php-xml.x86_64 0:5.3.3-50.el6_10
 
Complete!
# yum remove php-*
 : 
Removed:
  php-bcmath.x86_64 0:5.3.3-50.el6_10    php-common.x86_64 0:5.3.3-50.el6_10   php-fedora-autoloader.noarch 0:1.0.1-2.el6  php-gd.x86_64 0:5.3.3-50.el6_10
  php-mbstring.x86_64 0:5.3.3-50.el6_10  php-mcrypt.x86_64 0:5.3.3-5.el6       php-mysql.x86_64 0:5.3.3-50.el6_10          php-pdo.x86_64 0:5.3.3-50.el6_10
  php-php-gettext.noarch 0:1.0.12-1.el6  php-process.x86_64 0:5.3.3-50.el6_10  php-tcpdf.noarch 0:6.2.26-1.el6             php-tcpdf-dejavu-sans-fonts.noarch 0:6.2.26-1.el6
  php-tidy.x86_64 0:5.3.3-50.el6_10      php-xml.x86_64 0:5.3.3-50.el6_10
 
Complete!

PHPのインストールの前に、CentOS 6用のremiリポジトリを取得するか確認します。

# ls -l /etc/yum.repos.d/
total 28
-rw-r--r--  1 root root 1981 Jan 11  2013 CentOS-Base.repo
-rw-r--r--. 1 root root  637 Jun 26  2012 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  626 Jun 26  2012 CentOS-Media.repo
-rw-r--r--. 1 root root 2593 Jun 26  2012 CentOS-Vault.repo
-rw-r--r--  1 root root 1056 Nov  5  2012 epel-testing.repo
-rw-r--r--  1 root root  957 Nov  5  2012 epel.repo
-rw-r--r--  1 root root  644 Jan 11  2013 remi.repo

remi-phpXX.repoがない場合、下記を実施。

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
Preparing...                ########################################### [100%]
   1:remi-release           ########################################### [100%]

これでCentOS 6用のremiリポジトリが追加されました。

# ls -l /etc/yum.repos.d/
total 72
-rw-r--r--  1 root root 1981 Jan 11  2013 CentOS-Base.repo
-rw-r--r--. 1 root root  637 Jun 26  2012 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  626 Jun 26  2012 CentOS-Media.repo
-rw-r--r--. 1 root root 2593 Jun 26  2012 CentOS-Vault.repo
-rw-r--r--  1 root root 1056 Nov  5  2012 epel-testing.repo
-rw-r--r--  1 root root  957 Nov  5  2012 epel.repo
-rw-r--r--  1 root root  446 Feb 18  2020 remi-glpi91.repo
-rw-r--r--  1 root root  446 Feb 18  2020 remi-glpi92.repo
-rw-r--r--  1 root root  446 Feb 18  2020 remi-glpi93.repo
-rw-r--r--  1 root root  446 Feb 18  2020 remi-glpi94.repo
-rw-r--r--  1 root root  456 Feb 18  2020 remi-php54.repo
-rw-r--r--  1 root root 1314 Feb 18  2020 remi-php70.repo
-rw-r--r--  1 root root 1314 Feb 18  2020 remi-php71.repo
-rw-r--r--  1 root root 1314 Feb 18  2020 remi-php72.repo
-rw-r--r--  1 root root 1314 Feb 18  2020 remi-php73.repo
-rw-r--r--  1 root root  750 Feb 18  2020 remi-safe.repo
-rw-r--r--  1 root root  644 Jan 11  2013 remi.repo
-rw-r--r--  1 root root 2605 Feb 18  2020 remi.repo.rpmnew

"remi-php73.repo"があるので、PHPは7.3までいれられそうです。

次に、PHP7.3のphp-mbstringをインストールします。何回かに分割していますが、以降のパッケージをまとめてインストールできるかもしれません。

# yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php-mbstring
 :
Installed:
  php-mbstring.x86_64 0:7.3.25-1.el6.remi
 
Dependency Installed:
  oniguruma5php.x86_64 0:6.9.6-1.el6.remi                     php-common.x86_64 0:7.3.25-1.el6.remi                     php-json.x86_64 0:7.3.25-1.el6.remi
 
Complete!

次に、php-mysqlnd、php-pdo、php-gdをインストールします。

# yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php-mysqlnd php-pdo php-gd
 :
Installed:
  php-gd.x86_64 0:7.3.25-1.el6.remi                       php-mysqlnd.x86_64 0:7.3.25-1.el6.remi                       php-pdo.x86_64 0:7.3.25-1.el6.remi
 
Dependency Installed:
  gd-last.x86_64 0:2.3.0-2.el6.remi                                                        libwebp.x86_64 0:0.4.3-3.el6
 
Complete!

php-develをインストールします。

# yum install --enablerepo=epel,remi,remi-safe,remi-php73 php-devel
 :
Installed:
  php-devel.x86_64 0:7.3.25-1.el6.remi
 
Dependency Installed:
  keyutils-libs-devel.x86_64 0:1.4-5.el6                 krb5-devel.x86_64 0:1.10.3-65.el6                            libargon2-devel.x86_64 0:20161029-7.el6.remi
  libcom_err-devel.x86_64 0:1.41.12-24.el6               libedit-devel.x86_64 0:2.11-4.20080712cvs.1.el6              libkadm5.x86_64 0:1.10.3-65.el6
  libselinux-devel.x86_64 0:2.0.94-7.el6                 libsepol-devel.x86_64 0:2.0.41-4.el6                         libxml2-devel.x86_64 0:2.7.6-21.el6_8.1
  ncurses-devel.x86_64 0:5.7-4.20090207.el6              openssl-devel.x86_64 0:1.0.1e-58.el6_10                      php-cli.x86_64 0:7.3.25-1.el6.remi
  zlib-devel.x86_64 0:1.2.3-29.el6
 
Complete!

最後にphpをインストールします。

# yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php
 :
Installed:
  php.x86_64 0:7.3.25-1.el6.remi
 
Complete!

3.参考サイト

参考サイトは下記です。ありがとうございました。

【Web】さくらVPSのPHPを7.1→7.3にバージョンアップする
さくらVPSのPHPを5.5から7.3にアップデートしました
さくらVPSでPHPをアップデートする
CentOS 6 で "YumRepo Error: All mirror URLs are not using ftp, http[s] or file."

Comments [0] | Trackbacks [0]

Perlの正規表現を使って文字列をまとめて取得する方法

June 2,2021 11:55 PM
Category:[Perl]
Tag:[Perl]
Permalink

Perlの正規表現で文字列をまとめて取得する方法を紹介します。

1.問題点

Perlで次のようなタイムスタンプの変数を設定します。

my $timestamp = '2021-04-11 12:34:56';

このタイムスタンプんの年月日時分秒をそれぞれ別の変数に取得したいのですが方法がわかりません。

ちなみに、特定の文字列であれば、次のような構文で取得できます。

( my $year = $timestamp ) =~ s/^(\d{4})-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}$/$1/;

ということで、Perlの正規表現を使って文字列をまとめて取得する方法を紹介します。

2.対処方法

文字列をまとめて取得するには次のようにパターンマッチ演算子(m//)で記述します。

my ( $year, $month, $day, $hour, $minute, $second )
    = $timestamp
    =~ m!^(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})$!;

これで、$year, $month, $day, $hour, $minute, $secondの各変数に、年月日時分秒をそれぞれ設定されます。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages