Symfoware

Symfowareについての考察blog

PHPでexcel(xlsx)ファイルをPhpSpreadsheet + CodeIgniter 3で出力

PHPでxlsx形式のファイルを出力してみます。

こちらを参考に
PHPExcelの後継っぽいPhpSpreadsheetでExcelファイルを読み書きするサンプルコード
PhpSpreadsheetを使用します。

https://github.com/PHPOffice/PhpSpreadsheet
https://phpspreadsheet.readthedocs.io/en/develop/


CodeIgniter 3を使用して出力を試してみたいと思います。



composerでの取得



composerで取得したライブラリをCodeIgniterで使用する方法。
CodeIgniter 3でComposer(コンポーザー)のautoload

こちらを思い出しながら、PhpSpreadsheetの設置を行います。

まず、CodeIgniterのapplicationディレクトリ内にcomposer.jsonファイルを作成。

記載する内容は以下の通り。

・composer.json


  1. {
  2.     "require": {
  3.         "phpoffice/phpspreadsheet": "dev-develop"
  4.     }
  5. }




開発版を使用することにしました。

applicationディレクトリでcomposerコマンドを実行。


$ composer install



これでapplication/vendorディレクトリにPhpSpreadsheetと必要なライブラリが配置されます。



CodeIgniterでcomposerのautoloadを有効にするため、
application/config/config.phpを編集。

composer_autoloadをTRUEに変更します。


  1. $config['composer_autoload'] = TRUE;



これで準備は整いました。





hello world



とにかくxlsxファイルを出力してみます。
application/controllers/Sample.phpを作成。


・Sample.php


  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  4. class Sample extends CI_Controller {
  5.     public function index() {
  6.         
  7.         $spreadsheet = new Spreadsheet();
  8.         $sheet = $spreadsheet->getActiveSheet();
  9.         $sheet->setCellValue('A1', 'Hello World !');
  10.         
  11.         $writer = new Xlsx($spreadsheet);
  12.         $writer->save('hello world.xlsx');
  13.         
  14.     }
  15. }




CodeIgniterのルートディレクトリ(index.phpがある階層)に移動し、
コマンドで実行してやります。


$ php index.php sample




「hello world.xlsx」が出力できました。

799_01.png



日本語を出力してみます。


  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  4. class Sample extends CI_Controller {
  5.     public function index() {
  6.         
  7.         $spreadsheet = new Spreadsheet();
  8.         $sheet = $spreadsheet->getActiveSheet();
  9.         $sheet->setCellValue('A1', '日本語でこんにちは!');
  10.         
  11.         $writer = new Xlsx($spreadsheet);
  12.         $writer->save('hello world.xlsx');
  13.         
  14.     }
  15. }




特に問題なさそうです。

799_02.png


改行もOK


  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  4. class Sample extends CI_Controller {
  5.     public function index() {
  6.         
  7.         $spreadsheet = new Spreadsheet();
  8.         $sheet = $spreadsheet->getActiveSheet();
  9.         $sheet->setCellValue('A1', "日本語でこんにちは!\n改行");
  10.         
  11.         $writer = new Xlsx($spreadsheet);
  12.         $writer->save('hello world.xlsx');
  13.         
  14.     }
  15. }



799_03.png






罫線



罫線の設定はサンプルの「23_Sharedstyles.php」が参考になります。


  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  4. use PhpOffice\PhpSpreadsheet\Style;
  5. use PhpOffice\PhpSpreadsheet\Style\Border;
  6. class Sample extends CI_Controller {
  7.     public function index() {
  8.         
  9.         $spreadsheet = new Spreadsheet();
  10.         $sheet = $spreadsheet->getActiveSheet();
  11.         
  12.         // スタイルを指定
  13.         $sharedStyle = new Style();
  14.         $sharedStyle->applyFromArray([
  15.             'borders' => [
  16.                 'bottom' => ['borderStyle' => Border::BORDER_THIN],
  17.                 'right' => ['borderStyle' => Border::BORDER_MEDIUM],
  18.             ]
  19.         ]);
  20.         
  21.         // セルの範囲を指定して、スタイルを反映
  22.         $spreadsheet->getActiveSheet()->duplicateStyle($sharedStyle, 'A1:E1');
  23.         
  24.         $writer = new Xlsx($spreadsheet);
  25.         $writer->save('hello world.xlsx');
  26.         
  27.     }
  28. }



799_04.png


指定可能な線のスタイルは以下のとおり。


Border::BORDER_NONE
Border::BORDER_DASHDOT
Border::BORDER_DASHDOTDOT
Border::BORDER_DASHED
Border::BORDER_DOTTED
Border::BORDER_DOUBLE
Border::BORDER_HAIR
Border::BORDER_MEDIUM
Border::BORDER_MEDIUMDASHDOT
Border::BORDER_MEDIUMDASHDOTDOT
Border::BORDER_MEDIUMDASHED
Border::BORDER_SLANTDASHDOT
Border::BORDER_THICK
Border::BORDER_THIN



799_05.png




セルの色



セルに色を付けたい場合も罫線と同様スタイルを指定してやります。


  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  4. use PhpOffice\PhpSpreadsheet\Style;
  5. use PhpOffice\PhpSpreadsheet\Style\Border;
  6. use PhpOffice\PhpSpreadsheet\Style\Fill;
  7. class Sample extends CI_Controller {
  8.     public function index() {
  9.         
  10.         $spreadsheet = new Spreadsheet();
  11.         $sheet = $spreadsheet->getActiveSheet();
  12.         
  13.         // スタイルを指定
  14.         $sharedStyle = new Style();
  15.         $sharedStyle->applyFromArray([
  16.             'fill' => [
  17.                 'fillType' => Fill::FILL_SOLID,
  18.                 'color' => ['argb' => 'FFCCFFCC'],
  19.             ]
  20.         ]);
  21.         
  22.         // セルの範囲を指定して、スタイルを反映
  23.         $spreadsheet->getActiveSheet()->duplicateStyle($sharedStyle, 'A1:E1');
  24.         
  25.         $writer = new Xlsx($spreadsheet);
  26.         $writer->save('hello world.xlsx');
  27.         
  28.     }
  29. }



799_06.png



Fillで指定できるのは以下の通り。


Fill::FILL_NONE
Fill::FILL_SOLID
Fill::FILL_GRADIENT_LINEAR
Fill::FILL_GRADIENT_PATH
Fill::FILL_PATTERN_DARKDOWN
Fill::FILL_PATTERN_DARKGRAY
Fill::FILL_PATTERN_DARKGRID
Fill::FILL_PATTERN_DARKHORIZONTAL
Fill::FILL_PATTERN_DARKTRELLIS
Fill::FILL_PATTERN_DARKUP
Fill::FILL_PATTERN_DARKVERTICAL
Fill::FILL_PATTERN_GRAY0625
Fill::FILL_PATTERN_GRAY125
Fill::FILL_PATTERN_LIGHTDOWN
Fill::FILL_PATTERN_LIGHTGRAY
Fill::FILL_PATTERN_LIGHTGRID
Fill::FILL_PATTERN_LIGHTHORIZONTAL
Fill::FILL_PATTERN_LIGHTTRELLIS
Fill::FILL_PATTERN_LIGHTUP
Fill::FILL_PATTERN_LIGHTVERTICAL
Fill::FILL_PATTERN_MEDIUMGRAY




色を指定した場合、差異はないようです。

799_07.png


色を指定しなかった場合、このようになりました。

799_08.png



罫線と色を同時に指定することも可能です。


  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  4. use PhpOffice\PhpSpreadsheet\Style;
  5. use PhpOffice\PhpSpreadsheet\Style\Border;
  6. use PhpOffice\PhpSpreadsheet\Style\Fill;
  7. class Sample extends CI_Controller {
  8.     public function index() {
  9.         
  10.         $spreadsheet = new Spreadsheet();
  11.         $sheet = $spreadsheet->getActiveSheet();
  12.         
  13.         // スタイルを指定
  14.         $sharedStyle = new Style();
  15.         $sharedStyle->applyFromArray([
  16.             'fill' => [
  17.                 'fillType' => Fill::FILL_SOLID,
  18.                 'color' => ['argb' => 'FFCCFFCC'],
  19.             ],
  20.             'borders' => [
  21.                 'bottom' => ['borderStyle' => Border::BORDER_THIN],
  22.                 'right' => ['borderStyle' => Border::BORDER_MEDIUM],
  23.             ]
  24.         ]);
  25.         
  26.         // セルの範囲を指定して、スタイルを反映
  27.         $spreadsheet->getActiveSheet()->duplicateStyle($sharedStyle, 'A1:E1');
  28.         
  29.         $writer = new Xlsx($spreadsheet);
  30.         $writer->save('hello world.xlsx');
  31.         
  32.     }
  33. }




799_09.png




作成したファイルのダウンロード



ブラウザで表示した時、作成したファイルをダウンロードさせるパターン。
※サンプルのままですが。


  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  4. use PhpOffice\PhpSpreadsheet\Style;
  5. use PhpOffice\PhpSpreadsheet\Style\Border;
  6. use PhpOffice\PhpSpreadsheet\Style\Fill;
  7. class Sample extends CI_Controller {
  8.     public function index() {
  9.         
  10.         $spreadsheet = new Spreadsheet();
  11.         $sheet = $spreadsheet->getActiveSheet();
  12.         
  13.         // スタイルを指定
  14.         $sharedStyle = new Style();
  15.         $sharedStyle->applyFromArray([
  16.             'fill' => [
  17.                 'fillType' => Fill::FILL_SOLID,
  18.                 'color' => ['argb' => 'FFCCFFCC'],
  19.             ],
  20.             'borders' => [
  21.                 'bottom' => ['borderStyle' => Border::BORDER_THIN],
  22.                 'right' => ['borderStyle' => Border::BORDER_MEDIUM],
  23.             ]
  24.         ]);
  25.         
  26.         // セルの範囲を指定して、スタイルを反映
  27.         $spreadsheet->getActiveSheet()->duplicateStyle($sharedStyle, 'A1:E1');
  28.         
  29.         $writer = new Xlsx($spreadsheet);
  30.         //$writer->save('hello world.xlsx');
  31.         
  32.         // Redirect output to a client’s web browser (Xlsx)
  33.         header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  34.         header('Content-Disposition: attachment;filename="01simple.xlsx"');
  35.         header('Cache-Control: max-age=0');
  36.         // If you're serving to IE 9, then the following may be needed
  37.         header('Cache-Control: max-age=1');
  38.         // If you're serving to IE over SSL, then the following may be needed
  39.         header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  40.         header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  41.         header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  42.         header('Pragma: public'); // HTTP/1.0
  43.         
  44.         $writer->save('php://output');
  45.         exit;
  46.         
  47.     }
  48. }



テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/09/21(木) 00:09:01|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

jumanをサーバーモードで起動し、PHPから接続する

日本語形態素解析システム JUMANをDebianにインストール。
サーバーモードで起動し、Pythonから接続してみました。
jumanをサーバーモードで起動し、Pythonから接続する

同様の手法で、PHPから接続し形態素解析してみます。


サンプル



Pythonで書いたサンプルを参考に、PHPで実装してみます。


  1. <?php // juman serverへの接続サンプル
  2. $address = '192.168.1.102';
  3. $port = 32000;
  4. $fp = fsockopen($address, $port, $errno, $errstr, 30);
  5. if (!$fp) {
  6.     exit(1);
  7. }
  8. // タイトル取得(200 Running JUMAN version: 7.0)
  9. fgets($fp);
  10. // サーバーモード設定
  11. fwrite($fp, "RUN\n");
  12. // 200 OK
  13. fgets($fp);
  14. // 解析したい文字を設定
  15. $analyze = '形態解析テスト';
  16. fwrite($fp, $analyze."\n");
  17. while (true) {
  18.     $line = trim(fgets($fp));
  19.     if ($line == 'EOS') {
  20.         break;
  21.     }
  22.     
  23.     echo $line . PHP_EOL;
  24. }
  25. fclose($fp);




実行結果


# php sample.php
形態 けいたい 形態 名詞 6 普通名詞 1 * 0 * 0 "代表表記:形態/けいたい カテゴリ:形・模様"
解析 かいせき 解析 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:解析/かいせき カテゴリ:抽象物 ドメイン:教育・学習;科学・技術"
テスト てすと テスト 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:テスト/てすと カテゴリ:抽象物 ドメイン:教育・学習"




思いの外、あっさり実行できました。


juman、サーバーモードを利用すればバインディングが用意されていない言語からも、
簡単に利用できて便利です。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/06/13(火) 23:11:26|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

PHP ftp接続でディレクトリの存在チェック

phpでftp接続。
http://php.net/manual/ja/ref.ftp.php


接続後にsampleディレクトリを作成。
そこにindex.htmlをアップロードする処理を実装したいとします。


  1. <?php
  2. // ※エラー処理は行っていません
  3. // 接続と認証
  4. $ftp = ftp_connect('192.168.1.104', 21);
  5. ftp_login($ftp, 'testuser', 'password');
  6. // sampleディレクトリを作成
  7. ftp_mkdir($ftp, 'sample');
  8. // 作成したsampleディレクトリに移動
  9. ftp_chdir($ftp, 'sample');
  10. // ファイルをアップロード
  11. ftp_put($ftp, 'index.html', 'index.html', FTP_BINARY);
  12. // 接続を閉じる
  13. ftp_close($ftp);




これ、sampleディレクトリが存在しない場合は警告無しで終了するのですが、
sampleディレクトリを作った後実行すると警告が発生します。


# php sample.php
PHP Warning: ftp_mkdir(): Can't create directory: File exists in /var/dev/php/sample.php on line 8




ftp_mkdirの先頭に「@」をつけてエラー抑止でも良いのですが、
なんとか警告無しで処理を進められないものか。

ドキュメントを見てみると、「ftp_raw」という関数があります。
http://php.net/manual/ja/function.ftp-raw.php


これを使用して、FTPコマンドを直接実行してみたら警告は発生しないのでは。
FTPのコマンド一覧

ftp_rawを実行すると、ftpコマンドの実行結果の文字列が配列で帰ってきます。


  1. array (
  2. 0 => '250 OK. Current directory is /sample',
  3. )




「CWD sample」を実行して、sampleディレクトリへの移動を試してみる。
実行結果の1行めに「250 OK」が見つかれば、sampleディレクトリは存在し、移動まで完了。

「250 OK」がなければ、まだディレクトリは存在しないので、
sampleディレクトリを作成し移動。


  1. <?php
  2. // ※エラー処理は行っていません
  3. // 接続と認証
  4. $ftp = ftp_connect('192.168.1.104', 21);
  5. ftp_login($ftp, 'testuser', 'password');
  6. // rawコマンドで移動を試す
  7. $raw_result = ftp_raw($ftp, 'CWD sample');
  8. // 移動できなかったら
  9. if (strpos($raw_result[0], '250 OK') === false) {
  10.     // sampleディレクトリを作成
  11.     ftp_mkdir($ftp, 'sample');
  12.     // 作成したsampleディレクトリに移動
  13.     ftp_chdir($ftp, 'sample');
  14. }
  15. // ファイルをアップロード
  16. ftp_put($ftp, 'index.html', 'index.html', FTP_BINARY);
  17. // 接続を閉じる
  18. ftp_close($ftp);




100点の回答ではない気がしますが、これで警告なしに処理を続行することができました。


テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/04/17(月) 22:23:34|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

FreeBSD 11.0 + CodeIgniter 3でMariaDBに接続

FreeBSD 11.0にPHP7とMariaDB 10.1をインストールしました。

FreeBSD 11 nginx + php7-fpmの動作環境構築(pkg使用)
FreeBSD 11.0にMariaDB 10.1をインストールし外部接続を許可する(pkg使用)


php7からMariaDBへの接続を試してみます。
フレームワークとして、CodeIgniterを使用しました。



ライブラリのインストール



phpからはmysqliを使用して接続しようと思います。
pkgコマンドで、php70-mysqliをインストール。


# pkg install php70-mysqli




これだけで大丈夫だろうと思っていたら、接続時にこんなエラーが発生しました。


An uncaught Exception was encountered

Type:        Error
Message:     Call to undefined function ctype_digit()
Filename:    /var/dev/php/ci3/system/database/DB_driver.php
Line Number: 1404




http://php.net/manual/ja/function.ctype-digit.php

ctypeライブラリが追加で必要な模様。


# pkg install php70-ctype




これでエラーはなくなります。




CodeIgniter



登録、検索のテスト用に「test」データベースを作成。
sampleテーブルを作成しておきます。


  1. create table sample(
  2. id int,
  3. val varchar(100)
  4. );




ローカルのtestデータベースに
id:admin
pass:P@ssw0rd
で接続します。

データベース接続の設定ファイル
application/config/database.php
はこうなりました。


  1. <?php
  2. defined('BASEPATH') OR exit('No direct script access allowed');
  3. $active_group = 'default';
  4. $query_builder = TRUE;
  5. $db['default'] = array(
  6.     'dsn'    => '',
  7.     'hostname' => 'localhost',
  8.     'username' => 'admin',
  9.     'password' => 'P@ssw0rd',
  10.     'database' => 'test',
  11.     'dbdriver' => 'mysqli',
  12.     'dbprefix' => '',
  13.     'pconnect' => FALSE,
  14.     'db_debug' => (ENVIRONMENT !== 'production'),
  15.     'cache_on' => FALSE,
  16.     'cachedir' => '',
  17.     'char_set' => 'utf8',
  18.     'dbcollat' => 'utf8_general_ci',
  19.     'swap_pre' => '',
  20.     'encrypt' => FALSE,
  21.     'compress' => FALSE,
  22.     'stricton' => FALSE,
  23.     'failover' => array(),
  24.     'save_queries' => TRUE
  25. );





サンプルのコントローラー。


  1. <?php
  2. class Sample extends CI_Controller {
  3.     public function index() {
  4.         $this->load->database();
  5.         
  6.         $this->db->empty_table('sample');
  7.         
  8.         $this->db->insert('sample', ['id' => 1, 'val' => 'テスト1']);
  9.         $this->db->insert('sample', ['id' => 2, 'val' => 'テスト2']);
  10.         
  11.         $rows = $this->db->get('sample')->result_array();
  12.         foreach($rows as $row) {
  13.             echo 'id:' . $row['id'] . ',val:' . $row['val'] . PHP_EOL;
  14.         }
  15.         
  16.     }
  17. }




実行してみると...


# php index.php sample
id:1,val:テスト1
id:2,val:テスト2




ちゃんとデータの登録・取得が行えているようです。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/03/20(月) 19:03:00|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

FreeBSD 11 nginx + php7-fpmの動作環境構築(pkg使用)

FreeBSD 11を仮想環境にインストールしました。
FreeBSD 11.0-RELEASEを仮想環境(UbuntuのKVM)にインストール


pkgコマンドでnginxとphp7をインストールしてみます。


nginx



pkg searchしてみると、nginx,nginx-full,nginx-liteというバージョンがありました。


# pkg update
# pkg search nginx
nginx-1.10.2_3,2             Robust and small WWW server
nginx-devel-1.11.7             Robust and small WWW server
nginx-full-1.10.2_3,2         Robust and small WWW server (full package)
nginx-lite-1.10.2_3,2         Robust and small WWW server (lite package)
nginx-naxsi-1.10.2_3,2         Robust and small WWW server (plus NAXSI)
p5-Nginx-ReadBody-0.07_1     Nginx embeded perl module to read and evaluate a request body
p5-Nginx-Simple-0.07_1         Perl 5 module for easy to use interface for Nginx Perl Module
p5-Test-Nginx-0.25             Testing modules for Nginx C module development




今回はベーシックなnginx(無印)をインストールしました。


# pkg install nginx





rc.confを編集。


# vi /etc/rc.conf




nginx_enable="YES"を追加して起動許可を与えます。


hostname="freebsd11"
keymap="jp.106.kbd"
ifconfig_re0="inet 192.168.1.101 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
sshd_enable="YES"
nginx_enable="YES"





nginxを起動。


# service nginx start




http://[サーバーIP]をブラウザで表示して、以下の内容が表示されればインストール成功です。

734_01.png





php7のインストール



php7.0をインストールします。
※このパッケージにphp-fpmも同梱されています。


# pkg install php70




PHP 7.0.17がインストールできました。


# php -v
PHP 7.0.17 (cli) (built: Mar 18 2017 01:18:20) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies




rc.confを編集。


# vi /etc/rc.conf




php_fpm_enable="YES"を追加してphp-fpmに起動許可を与えます。


hostname="freebsd11"
keymap="jp.106.kbd"
ifconfig_re0="inet 192.168.1.101 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
sshd_enable="YES"
nginx_enable="YES"
php_fpm_enable="YES"





php-fpmを起動します。


# service php-fpm start








nginx.confの編集



php-fpmはデフォルトで127.0.0.1:9000で待ち受けるように構成されています。


# vi /usr/local/etc/php-fpm.d/www.conf

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
; 'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000





nginx.confを編集。
拡張子phpのアクセスは、127.0.0.1:9000(php-fpm)へ転送するよう構成します。


# vi /usr/local/etc/nginx/nginx.conf




編集内容の抜粋です。


http {

(略)

    server {

(略)

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        # コメントを外して有効化。一部パラメーターを微調整
        location ~ \.php$ {
            root         /usr/local/www/html;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

    }

}




設定を変更したら、nginxをリスタート。


# service nginx restart




テスト用のphpプログラムを作成します。


# mkdir -p /usr/local/www/html
# vi /usr/local/www/html/info.php




info.phpの内容は以下のとおり。


  1. <?php phpinfo();




ブラウザで、http://[サーバーIP]/info.phpを表示してみます。

734_02.png


うまく動いてくれたようです。




php-fpmのlistenをソケットに変更



php-fpm、デフォルトでは127.0.0.1:9000をリッスンしていますが、
UNIXソケットでの待受に変更してみます。

php-fpmの設定ファイルを編集。


# vi /usr/local/etc/php-fpm.d/www.conf




ソケットを/var/run/phph-fpm.socketに作成。
listenするowner,groupをwwwに変更します。


;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.socket


; Set listen(2) backlog.
; Default Value: 511 (-1 on FreeBSD and OpenBSD)
;listen.backlog = 511

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = www
listen.group = www
listen.mode = 0660





続いて、nginx.confを編集。


# vi /usr/local/etc/nginx/nginx.conf




編集内容の抜粋です。


http {

(略)

    server {

(略)

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        # コメントを外して有効化。一部パラメーターを微調整
        location ~ \.php$ {
            root         /usr/local/www/html;
            #fastcgi_pass 127.0.0.1:9000;
            fastcgi_pass unix:/var/run/php-fpm.socket;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

    }

}




php-fpm,nginxのサービスを再起動。


# service php-fpm restart
# service nginx restart




これでソケットでの待受に変更できました。




テーマ:サーバ - ジャンル:コンピュータ

  1. 2017/03/20(月) 18:01:38|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ