welcartが動いているWPサイトからcookieを共有する

やりたいこと:welcartで運用しているWPサイトAでログインした際にWPサイトBにログインのステータスを表示させたい

1) サイトA site-a.domain.com が動いているサーバーでディレクトリの設定をする
apache2.conf

<Directory /var/www/directory >
Header set Access-Control-Allow-Origin "https://site-b.domain.com" // サイトBでcookieを受け取ることを許可する
Header set Access-Control-Allow-Credentials true
</Directory>

2) サイトAで渡したい情報をcookieへセットします。
functions.php
add_action( 'wp_headers', 'hoge');
function hoge() {
if (usces_is_login()){
$site-a-user-name = usces_the_member_name('return'); // ←welcartのログインユーザー名を取得
}
if (!isset($_COOKIE["site-a-user"])){
setcookie("site-a-user",$site-a-user-name, time() + 86400, "/", "site-b.domain.com"); // ←cookieをセットする時にこのcookieを参照できるサイトを指定する
}
}

setcookie関数は他の出力よりも前に処理される必要があるとのことなのでwp_headersへフックします
・5つ目のパラメータがcookieを使用できるドメインです

3) サイトB site-b.domain.com でcookieを取得する
function.phpfunction getcookie() {
$site-a-user = $_COOKIE['site-a-user'];
return $loginUser;}

・サイトBからは $_COOKIE でアクセスできます。

bash: php: command not found

montereyにアップデートしたらMAMPにインストールしてるphpがうごかなくなる。

解決:Pathを通してあげるだけ

/Applications/MAMP/bin/php/ の中の好きなバージョンへ以下のようにパスを通す

~/.bash_profile に以下を追加する

export PATH=$PATH:/Applications/MAMP/bin/php/php5.4.10/bin

$ source ~/.bash_profile

で設定を反映させる


$ which php
/Applications/MAMP/bin/php/php7.3.1/bin/php
$ php -v
PHP 7.3.1 (cli) (built: ######### ) ( NTS )

composerで “Script php artisan optimize handling the post-update-cmd event returned with error code 1” が出たら

laravel 5.4以降で artisan optimizeを使おうとしているのが原因らしい。。。
なのでcomposer.json から

"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize" ←この行を消す
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan optimize" ←この行を消す
]
},

と表示されなくなりました。

PHP 7.1から7.2へのバージョンアップ (2)

続き、
あまり使わないかもだけど,PHPMyAdminが入ってないので入れます

#yum -y install --enablerepo=remi,remi-php72 phpMyAdmin

/etc/httpd/conf.d/phpMyAdmin.conf を編集します。
8 Alias /phpMyAdminMoji /usr/share/phpMyAdmin ← URLを推測しにくいように文字列を追加する
9 Alias /phpmyadminMoji /usr/share/phpMyAdmin ← URLを推測しにくいように文字列を追加する
10
11
12 AddDefaultCharset UTF-8
13 SSLRequireSSL ← 追加
14 Require local → all granted
15

16
17
18 Require local → all granted
19

20

mod_sslをインストール
#yum install mod_ssl

httpdを再起動して、↑で設定したURLにアクセスすると。。。

インストールできてました!

Posted in PHP

PHP 7.1から7.2へのバージョンアップ (1)

外出禁止令の間にそっとメンテナンスします。。。。

#cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

環境はCentOS 7です。

PHPのバージョンアップ

要は一度消去して再インストールすることになります。。。

# php -v
PHP 7.1.30 (cli) (built: May 28 2019 12:49:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

現在7.1なのでこれをいったん7.2にします。
拡張モジュールの確認

# yum list installed | grep php
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
php.x86_64 7.1.30-1.el7.remi @remi-php71
...

php.iniをバックアップしておきます。

cp /etc/php.ini /etc/php.ini_old

remiレポジトリを更新します

# yum install epel-release
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
epel/x86_64/metalink | 8.8 kB 00:00
* base: mirrors.cat.net
* epel: nrt.edge.kernel.org
* extras: mirrors.cat.net
* remi-safe: ftp.riken.jp
* updates: mirrors.cat.net
...
更新:
epel-release.noarch 0:7-12
完了しました!

レポジトリを確認します。

# ls /etc/yum.repos.d/ | grep remi-
remi-glpi91.repo
remi-glpi92.repo
...

削除します
# yum remove php-*

削除が終了すると
# php -v
-bash: /usr/bin/php: そのようなファイルやディレクトリはありません

消えてる。。。

モジュールと一緒にインストールします

# yum -y install --enablerepo=remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

# php -v
PHP 7.2.31 (cli) (built: May 12 2020 09:23:38) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

# yum list installed | grep php
php.x86_64 7.2.31-1.el7.remi @remi-php72
...

これでいったん確認します。

サイトを開こうとすると

Class 'PDO' not found

とエラーが!!

php.ini へ次を追加してモジュールを有効にする必要がありました。

extension=pdo.so

参考サイト:
https://forum.matomo.org/t/you-need-to-enable-the-pdo-and-pdo-mysql-extensions-in-your-php-ini-file/261

Posted in PHP

Laravel いろいろメモ

バージョン確認
php artisan --version
Laravel Framework 5.4.36
5.4です。

タグをエスケープさせずに出力する際は
bladeのなかで
{{ }} で囲む代わりに {{!! !!}}で囲う

シーダーを使う
DBにダミーデータを入れることをシーダーというそうです。

php artisan make:seeder DummysTableSeeder

/root/database/seeds/ に DummysTableSeeder.php ができます。


use Illuminate\Database\Seeder;
class DummysTableSeeder extends Seeder
{

/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
DB::table('contacts')->insert([
'name' => str_random(10),
'tel'=> 99999999,
]);
}
}

あとは同じディレクトリ にある DatabaseSeeder.php に先ほどのファイルを追加します。
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(DummysTableSeeder::class);
}
}

記述の仕方はLaravelのバージョンによって異なります。↑ は5.4

コマンドラインで
$php artisan db:seed

+—-+————+———-+————+————+
| id | name | tel | created_at | updated_at |
+—-+————+———-+————+————+
| 1 | qf9wdpx5a3 | 99999999 | NULL | NULL |
+—-+————+———-+————+————+

↑のように挿入されます

PHP(PDO)でMySQL(MariaDB)に接続してDBからデータを取得する

今さらながらPHP7対応。
なぜか500エラーを連発してハマってしまったのでうまくいった書き方をメモしときます。

    function DBconnect()
    {
        $DBlink = mysqli_connect('yourdbhost.work', 'username', 'password');

        if (!$DBlink) {
            die('MYSQL接続エラー' . mysqli_error($DBlink));
        }

        mysqli_set_charset($DBlink, 'utf8');

        return $DBlink;
    }

    function DBselect($selectDB, $DBlink)
    {
        $db_selected = mysqli_select_db($DBlink, $selectDB);

        if (!$db_selected) {
            die($selectDB . 'データベース選択エラー' . mysqli_error($DBlink));
        }
    }

    function RunSQL($DBlink, $sql)
    {
        $result = mysqli_query($DBlink, $sql);

        if (!$result) {
            die('クエリーのエラー' . mysqli_error($DBlink));
        }

        return $result;
    }


    function h(string $string): string
    {
        return $string;
    }


    function myfunction()
    {

            $DBlink = DBconnect();
            DBselect('database', $DBlink);
            $records = RunSQL(
                $DBlink,
                "SELECT " .
                "*" .
                "FROM `table`" .
                "ORDER BY `key`;"
            );

            $result = [];

            while ($row = mysqli_fetch_array($records)) {
                //ここに処理を
            }
            return $result;

            mysqli_close($RDBlink);
    };

懐かしい感じですね。
これを↓のように変えさせてもらいました。

define('DSN', 'mysql:host=yourdbhost.work;dbname=dbname;charset=utf8');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');

try{
    $dbh = new PDO(DSN, DB_USERNAME, DB_PASSWORD,
     array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false,
        )
    );

    $prepare = $dbh->prepare('SELECT * FROM table ORDER BY key');
    $prepare->execute();

    $result = $prepare->fetchAll(PDO::FETCH_ASSOC);

    foreach($result as $r){

      //ここで処理を

    }


} catch (PDOException $e){
    $error = $e->getMessage();
}
//ディレクトリ・ハンドルを開く
$res_dir = opendir( '/var/www/hogehoge' )or die('could not open');
//ディレクトリ内のファイル名を1つずつを取得
$_hogehoge = array();
while( $file_name = readdir( $res_dir ) ){
//配列に格納していく
array_push($_images,$file_name);
}
//ディレクトリ・ハンドルをクローズ
closedir( $res_dir );
Posted in PHP