カテゴリー
PHP

PDF1.7とか新しいバージョンのPDFをPHPを扱うには有償版のFPDIが必要らしい

PDFのバージョン

Portable Document Format - Wikipedia

全く意識したことがなかったけどPDFにはバージョンがあるらしい。今回の対象ファイルはPDF1.7となっていて比較的新しいバージョンのPDF。

PHPでこいつを読み込むのには有償版のFPDI(FPDI-Parser)が必要らしい。

FPDI-Parserからファイルチェックが出来る。

無償版で試す

PDF1.7のファイルを無償版のパーサで読み込むとエラーになる。

FPDI-ParserでPDFが読み込めるかweb上で試す

FPDI-Parser error

有償版で試す

有償版にチェックを入れてRUNすると読み込める事が確認できる。

FPDI-Parser有償版だと読み込み成功する

世の中知らない事って無限にある。

参考エントリー
カテゴリー
インストールメモ 開発環境

MAMP3.xのcURLをアップグレードして延命する

環境

  • macOS Catalina(10.15.3)
  • MAMP 3.0.7.3

なぜMAMP3.x?

MAMP4系以上はphp7が標準で、php5系を使うのが面倒そう。レガシー。

PHPのHTTPS通信、SSL暗号方式をTLS1.2に対応させてみた - ノラプログラマーの技術メモ にあるけど、

TLS1.2に対応するためには、cUrlのバージョンが7.34.0以上かつOpenSSLのバージョンが1.0.1以上でなければならない

これに対応するだけのために2日間つぶした。

手順

大体以下のページの通り

php - How to upgrade OpenSSL in MAMP - Stack Overflow
lunr/mamp-curl-tls: Instructions to upgrade MAMP to use OpenSSL 1.0.2 to support TLS 1.2 connections

  • post時点でbrewでインストール出来るopensslのバージョンは1.1.1で、上記手順ではうまく行かない。
  • MAMP3.0系ではcurlのバージョンが低すぎてうまく行かないため、3.5系にupgradeする必要がある

やったこと

程よいバージョンのMAMPとcurlとopensslが必要。高過ぎず低すぎず。

  • openssl 1.0.2のビルド&インストール
    • 1.0.1だとうまく行かない(うろ覚え)
  • ビルドしたopensslを使用したcurl 7.43.0のビルド&インストール

MAMP

Downloads (older versions) - MAMP & MAMP PRO

から3.5.2をダウンロード&インストール。

openssl

https://www.openssl.org/source/old/あたりから1.0.2のソースをダウンロード。
通常は使わないので、MAMP以下(/Applications/MAMP/Library/lib/openssl)にインストールしておく。

64bitなので./configureではなく./Configureを使わなくてはだめらしい。

cd ~/Downloads
wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz
tar zxvf openssl-1.0.2u.tar.gz

cd ~/Downloads/openssl-1.0.2
./Configure darwin64-x86_64-cc --openssldir=/Applications/MAMP/Library/lib/openssl

make
make install

curl

下準備

curlバージョン確認
https://github.com/lunr/mamp-curl-tls#3-check-the-curl-version-included-with-mamp

/Applications/MAMP/Library/bin/curl-config --version
libcurl 7.43.0

CA/CertificateをMAMPに設置する
https://github.com/lunr/mamp-curl-tls#5-download-ca--certificate-bundles-and-extract-into-mamp

cd ~/Downloads
wget https://github.com/lunr/mamp-curl-tls/raw/master/ca-bundle.tgz
tar zxvf ca-bundle.tgz -C /Applications/MAMP
curlをインストール

https://curl.haxx.se/download/から該当するバージョン(7.43.0)をダウンロード。

cd ~/Downloads
wget https://curl.haxx.se/download/curl-7.43.0.tar.gz
tar zxvf curl-7.43.0.tar.gz

cd ~/Downloads/curl-7.43.0
./configure --prefix=/Applications/MAMP/Library --with-ssl=/Applications/MAMP/Library/lib/openssl/ --with-ca-path=/Applications/MAMP/etc/openssl/certs --with-ca-bundle=/Applications/MAMP/etc/openssl/certs/ca-bundle.crt

make
make install

諦めたこと

  • brewで特定のバージョン(openssl)をinstall
    • gitログを辿ってやるしかないっぽい。面倒

雑感

モダンな開発環境に変えたい。

カテゴリー
PHP インストールメモ

CentOS5.5にZend Optimizerをインストール

Live Commerceを使うのにはZend Optimizerが必要なのでインストールする。

CentOS5.5(32bit)
PHP 5.2.16

ダウンロード

ダウンロード場所がわかりにくいので注意
※Zend OptimizerをダウンロードするにはMyZendに登録する必要がある。
ゼンド・ジャパン株式会社

ダウンロード>Zend Guard>loader>linux>ZendOptimizer-3.x.x-linux-glibc23-xxx.tar.gz
※ xの部分はPHPのバージョンやOSによって異なる
当方の環境では ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz だった。

設置

ダウンロードしたファイルを解凍する。

$ tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

PHPのバージョンに対応した ZendOptimizer.so を /usr/lib/php/modules へ設置する。
※自分の環境では ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp の中にあるものを使用。

$ cd ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp
$ sudo mv ZendOptimizer.so /usr/lib/php/modules

php.iniの設定

# vi /etc/php.ini
追記
[Zend]
zend_extension=/usr/lib/php/modules/ZendOptimizer.so
zend_optimizer.optimization_level=15

Apache再起動

# service httpd restart

参考:

  • 【環境構築3】PHPをインストールする のんき者のシステム開発ノート(ってかメモ)/ウェブリブログ
  • Zend Optimizer のインストール | Linuxで自宅サーバ構築
  • カテゴリー
    CentOS5.x PHP サーバ管理

    CentOS 5.5 php5.3.6からphp5.2.17へyumでダウングレード

    remiリポジトリでphp5.3をyumでインストールしたけど、php5.2で動いていたスクリプトが動かない。
    困るのでphpをダウングレードする。

    php関連パッケージを調べる。

    # yum list installed | grep php*
    php.i386                               5.3.6-1.el5.remi                installed
    php-cli.i386                           5.3.6-1.el5.remi                installed
    php-common.i386                        5.3.6-1.el5.remi                installed
    php-gd.i386                            5.3.6-1.el5.remi                installed
    php-imap.i386                          5.3.6-1.el5.remi                installed
    php-ldap.i386                          5.3.6-1.el5.remi                installed
    php-mbstring.i386                      5.3.6-1.el5.remi                installed
    php-mcrypt.i386                        5.3.6-1.el5.remi                installed
    php-mysql.i386                         5.3.6-1.el5.remi                installed
    php-pdo.i386                           5.3.6-1.el5.remi                installed
    php-pear.noarch                        1:1.9.2-3.el5.remi              installed
    php-pgsql.i386                         5.3.6-1.el5.remi                installed
    php-xml.i386                           5.3.6-1.el5.remi                installed

    # yum remove php*
    だと、全てのパッケージが削除されない?ようなので、手動設定でパッケージを削除。

    # yum remove php php-cli php-common php-gd php-imap php-ldap php-mbstring php-mcrypt php-mysql php-pdo php-pear php-pgsql php-xml

    ※ /etc/php.ini は /etc/php.ini.rpmsave として保存される。

    カテゴリー
    OpenPNE

    PHP5.3 でOpnePNEのエラーを消す方法

    PHP5.3にしたらOpenPNEでエラーが発生。
    このようなエラー。

    Deprecated: Assigning the return value of new by reference is deprecated in /var/www/html/OpenPNE/lib/include/PEAR.php on line 569
    
    Deprecated: Assigning the return value of new by reference is deprecated in /var/www/html/OpenPNE/lib/include/PEAR.php on line 572
    
    以下(ry

    PEAR使ってる状態でPHPのバージョンを上げると、PEARから上記エラーが出てくる場合がありますが・・・
    これは、PHP5では、newすると参照になるのに、それを =& でさらに参照で受け取ろうとしてエラーが出ている模様。
    消す方法はいくつかあります。
    1. error_reportingで表示しないようにする。
    error_reporting(E_ALL & ~E_DEPRECATED);

    2. エラーの出ている場所を修正する。
    エラー箇所のソースを読むと、 =& になっているので = に変更。

    参照:為せば成る・・・かもしれない

    と言うことなので、OpenPNEのconfig.phpを修正する。
    PHPの仕様が変更されたので出る警告らしい。
    エラーは消えるけど、将来的にはソースを変更した方がいいのかも。

    OpenPNE_DIR/config.php 236行目付近(バージョンによって違うかも)

    ///
    // デバッグ、エラーハンドリング、ログ設定
    ///
    
    //error_reporting(E_ALL ^ E_NOTICE); ←コメントアウト
    error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE); ←追記

    OpenPNEの不具合

    get@hoge.com (空メールで登録用URLを送信するアドレス)へ送ってもメールが帰ってこない。
    オープン制の場合はスクリプトの修正が必要かも。
    日記のメール投稿やコミュニティの投稿などは出来るようだ。