20200920のPHPに関する記事は13件です。

Wordpressで構築済みのWebサイトにEpsilonの決済システムを組み込んだメモ

状況

  • すでに構築済みのWorpdress上のWebサイト
  • クレジットカードの決済を追加したい
  • Epsilonとすでに契約済みで決済代行の選択の余地なし
  • リンク決済を使用したい

という制限された状態。

調査

EpsilonがPHPのサンプルコードを提供していたのでそれを活用。

必要なモジュールを個々でダウンロードしサーバー上へ設置。
(訳があって個々にしています)

使用したモジュール

Epsilonのサンプルコードで以下を使っていたので同じものを使用

Wordpressのディレクトリ
  └ wp-content
      └ themes
         └ インストールしたテーマ
             L epsilon(作成)
                 L ここにモジュール設置
                 L ここに決済用PHPを設置

困ったこと

Wordpressで自作PHPを実行する方法を知らない

これはサーチしたらたくさん情報があったので簡単に解決。

function.phpに以下のコードを追加しショートコードを使用可能にする。

function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'sample'
    ), $params));
    ob_start();
    include(get_theme_root() . '/' . get_template() . "/epsilon/$file.php");
    return ob_get_clean();
}
add_shortcode('credit', 'Include_my_php');

このショートコードをWordpressの記事に貼り付けで解決。

Wordpress用に作成されたテーマのPHPを修正しなければいけない

クレジット決済へ飛ばすためのボタンをすでに存在するページに追加をしたい。

Wordpress用のコードを解析。
よくわからなかったけど、とりあえず該当のページのソースは発見。

var_dumpやexitなんかで動かしたり、止めたりしてなんとなく理解。

ボタンを設置し、submit先に上記のショートコードが設置されたURLを指定。

うまく動いた(^^)

いざ動作確認

エラー①

Warning: require_once(Net/URL2.php): failed to open stream: No such file or directory in /home/javijavi/www/central/lifewave/wp-content/themes/phlox-pro/epsilon/HTTP/Request2.php on line 24

URL2.phpが見つからないと怒られる。
ディレクトリは間違っていないのに。。。

解決

特殊なディレクトリ構造にしているためパスをインクルードする必要があった。

$path = dirname(__FILE__);
set_include_path(get_include_path().PATH_SEPARATOR.$path);

これを決済用PHPに追加で解決。

エラー②

string(63) "エラー : 908このCGIを実行する権限がありません"

無事PHPは実行されたようだがEpsilon側から怒られる。

解決

Epsilonの設定で「オーダー情報発信元ホスト情報」をホスト名にしており逆引きが出来ていなかったらしい。なのでIPアドレスへ変更。
参考ページ https://02kaz.x0.com/it/ec2ep/

無事完了

あとはhtml(レイアウト)やパラメータを修正。

この他にもつまずいた箇所があった気がするけど忘れたので割愛。

仕組みが分かれば意外と簡単でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker x Laravel ブラウザ自動リロード(Hot Module Replacement)

css や js ファイルが変更されたら自動的にブラウザリロードしてくれるととても開発が楽になります。
ということで、Laravel-mixでブラウザ自動リロード設定を行います。

対象者

Laravel Blade を書く人向け

前提

当記事は上記の記事の補足になる記事です。

環境

  • PHP: 7.4.6
  • Laravel: 8.5.0
  • Node: 14.2.0
  • yarn: 1.22.4
  • browser-sync: 2.26.12
  • browser-sync-webpack-plugin: 2.2.2
  • vue-template-compiler: 2.6.12

前準備: yarn を使用する場合

{
    // ...
    "scripts": {
        "dev": "npm run development",
        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "npm run development -- --watch",
        "watch-poll": "npm run watch -- --watch-poll",
        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js",
        "prod": "npm run production",
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
    },
    // ...
}

npm runyarn に書き換えてください。

{
    // ...
    "scripts": {
        "dev": "yarn development",
        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "yarn development -- --watch",
        "watch-poll": "yarn watch -- --watch-poll",
        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js",
        "prod": "yarn production",
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
    },
    // ...
}

webpack.min.js を修正する

webpack.min.js
const mix = require('laravel-mix');

mix.js('resources/js/app.js', 'public/js')
    .browserSync({
        proxy: {
            target: 'http://app:9000',
        },
        files: [
            './resources/**/*',
            './public/**/*',
        ],
        open: false,
        reloadOnRestart: true,
    });
    .postCss('resources/css/app.css', 'public/css', [
        //
    ]);

ビルド

$ make web
$ yarn install

# npm コマンドでインストールしようとするので、手動で追加しておきます。
$ yarn add -D vue-template-compiler browser-sync browser-sync-webpack-plugin

$ yarn hot

http://127.0.0.1

resourcespublic 配下のファイルが変更されたら自動的にブラウザリロードが行われます。
これでもokなんですが、コンテナ内でビルドさせるとめちゃくちゃ遅いです...

ローカルでNodeを使う場合の設定を書きます。

ローカルのNodeを使う場合

webpack.min.js
        proxy: {
            target: 'http://127.0.0.1', // 書き換え(webコンテナを指定している)
        },

Webpackのサーバーを起動します。

$ cd backend
$ yarn hot

http://127.0.0.1:3000

参考

https://browsersync.io/docs/options

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Hello Heroku】HerokuでWebアプリ(HTML)を紹介しよう

0.この記事を書いた経緯

 会社の勉強会でWebアプリを作って紹介しよう!となりました。
 しかし会社のセキュリティの都合上、
 自宅で作成したアプリを紹介する手段が乏しいことに気づきました。
 そこで公開方法を調べていくうちにHerokuにたどり着きました。

1.Herokuって何?

 作成したWebアプリを簡単に公開できるサイトです。
 Herokuを理解する上でこの記事がすごく役立ちました!
 ありがとうございます!
 ※Herokuは無料版と有料版があります。今回はHerokuの無料版を利用しています。

2.環境

  • OS windows10 64bit
  • PHP 7.4.9
  • Composer version 1.10.10
  • Heroku

3.前提

 ※以下既に用意されている場合は手順を飛ばしてください。

4.Heroku側でappを作成する

 herokuのアカウントを作成できたらログインします。
 ログインしたら以下の画面が出るので赤枠で囲まれた「Create new app」を押します。
heroku_new_app_paint.png

 「App name」には任意の名前を入力します。ただし英数字小文字でないと怒られます。
 今回は「rensyuwebclc」という名前にします。
 名前を入力したら赤枠で囲まれた「Create app」を押します。
1.PNG

 ここで設定したアプリ名が「 https://<アプリ名>.herokuapp.com 」になるので注意です。
 ダッシュボードに戻ると入力した名前のAppができています。
0.PNG

5.公開するファイルをローカルフォルダに置く

 任意の名前のフォルダを用意します。
 そのフォルダ内に以下4つのファイルを置きます。

  • composer.json
  • index.html
  • index.php
  • Procfile

 以下各ファイルの説明をします。

composer.json

The Heroku PHP Support will be applied to applications only when the application has >a file named in the root directory. Even if an application has no Composer >dependencies, it must include at least an empty () in order to be recognized as a PHP >application.composer.json{}composer.json』

(Heroku Dev Centerから引用)

 要するに「composer.json」がないとHeroku PHPにサポートされないということです。
 実際このファイル無しでアプリをアップロードすると警告が出ます。
 指示に従い「composer.json」という名前でファイルを作成し、中身には「{}」と記述します。

composer.json
{}

index.html
 今回アプリとして公開するhtmlファイルです。

index.php
 今回の肝となるファイルです。
 中身は以下にしてください。

index.php
<?php include_once("htmlファイル名"); ?>

Procfile
 Procfileは起動時にアプリによって実行されるコマンドを指定するファイルです。
 あくまで「Procfile」です。いかなる拡張子もつけてはいけません。
 詳しくはこのサイトこのサイトを参考してください。       
 名前は「Procfile」にして下さい。Pは大文字で「.txt」等、拡張子はつけてはいけません。
 中身は以下にしてください。

Procfile
web: vendor/bin/heroku-php-apache2

6.ファイルをHerokuにアップする

 Herokuを再度開き作成したappを開きます。
heroku_new_app9.PNG

 タブの「Deploy」を押します。
3.PNG

 「Deployment method」の「Heroku Git」を押します。
 オレンジ枠で囲った手順に従ってお使いのPCのコマンドプロンプトにコマンドを入力します。
 緑枠の部分は作成したappの名前によってHerokuが自動的に表示します。
 青枠の部分は””で囲って入力してしてください。
2.PNG

コマンドプロンプト
   heroku login
  cd 作成したファイルまでのPath
  git init
   heroku git:remote -a 作成した任意のapp名(今回はrensyuwebclc)
   git add .
   git commit -am “何かしらのコメント”
  git push heroku master

 これは初めてアプリを作成する場合です。

 アプリ作成後は更新した内容を反映させる用にherokuの記述が変わります。
4.PNG

コマンドプロンプト
   heroku login
  heroku git:clone -a 作成した任意のapp名(今回はrensyuwebclc)
   git add .
   git commit -am “何かしらのコメント”
  git push heroku master

 「git add .」の「.」はよく忘れるので忘れないようにします。

 URLが作られるのでコピーしてブラウザで開きます。
 以下はこの記事の著者がherokuを使って公開したアプリのURLです。
 https://rensyuwebclc.herokuapp.com/

 人によって作成したURLは異なるので注意して下さい。あくまで例です。

5.PNG

7.アプリが表示されない場合

 サイトを開き以下の画面が出たら、phpファイル、htmlファイル名が
 両方とも上記で述べた名前以外になっている可能性があります。
9.PNG

 その場合URLに「/htmlファイルの名前」を付け足します。
7.PNG
これはherokuのデフォルトドキュメントの設定が以下のようになっているためです。

default_include.conf
DirectoryIndex index.php index.html index.htm

phpファイルやhtmlの名前を変えてしまうとデフォルトドキュメントとして呼ばれなくなるので、ファイルが見つからないとして403エラーが出たのです。

8.まとめ

 herokuを使って無事に会社でWebアプリを紹介することができました。
 アップした手順をまとめることで同じような悩みを持つ方の参考になればと思い
 記事を作成しました。
 ご意見ご感想があれば教えていただけたら幸いです。

引用・参考サイト

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【PHP】XAMPP→MAMP phpMyAdmin→Sequel Proへの移行【環境構築】

作業メモ

実施日: 2020年 9月19日
環境: macOS Catalina10.15.6

サクサクできると思っていたら
2日かかってしまったので、メモ代わりに残しておきます。

状況

PHP+MySQLの学習を始めるにあたって購入した教材が一通り終わる。
その際の環境構築は教材に習い、XAMPPをインストールして実施。

せっかくMacを使っているので、MacOS向けのツールを使用した環境構築に切り替えたい。
(つまりはミーハーな理由)

変更ツール

① パッケージをXAMPPからMAMPに変更
(XAMPPのアンインストールは未実施)

② DBのGUIツールをphpMyAdminからSequel Proに変更
(Ruby学習中はSequel Proを使用していたので統一したい)

手順

① MAMPをインストール

・MAMP
  インストーラーのダウンロードはこちらから

Free Downloadに飛んでインストーラーをダウンロードします。

ポイント:今回はMAMP PROではなく、MAMP(無料版)だけインストールしたいので
インストーラーメニューのインストールの種類という項目で「カスタマイズ」を選択して
MAMP PROのチェックを外しましょう。数MBですが容量を節約します。

・比較的新しいQiita参考記事:
 MAMP(FREE)のインストールから表示まで(MAC )

インストールが完了したら、Apache ServerとMySQL Serverが立ち上がることを確認します。

② XAMPP環境にあったファイルをMAMP環境にコピーする

XAMPPを使用していたら、もうおなじみかと思いますが
XAMPP内のhtdocs内で作成したディレクトリやファイル群をコピーして
MAMP内のhtdocsにも入れてあげます。

③ MAMP環境でウェルカムページを表示させる。

MAMPでサーバーを立ち上げたら、Open WebStart pageのボタンを押して

localhost:8888/MAMP/?language=English
いわゆるMAMPのウェルカムページに遷移しましょう。

画像のような画面が表示されたらOKです。
image.png

④ MAMP環境でhtdocs内のページを表示させる。

上のWelcome to MAMP画面が表示されたら
アドレスバーでパス指定してhtdocsにコピーしたファイルが表示されるか確認しましょう。

この時はDB接続が必要ないTOP画面のファイルが無難です。
とりあえずはhtmlファイルでも大丈夫です。

初期設定時はhtdocsより下の階層からパスで指定する必要があります

大体の人は
localhost:8888/ディレクトリ名/ファイル名
の流れで表示されると思います。

⑤ XAMPP環境のDB情報をコピーする。

ここからはXAMPPのDB情報をMAMP環境へコピーしていきます。

まずはMAMPのサーバーを一旦停止してXAMPPでサーバーを立ち上げます。
立ち上がったらphpMyAdminへ飛びましょう。

XAMPP環境でphpMyAdminに入れたら
DBのdumpファイルを作成していきます。

画面左側でコピーするデータベース名を選択します。
次は画面上部にあるエクスポートのメニューを選択します。

画面に以下のような表示がされていることを確認しましょう。

データベース "○○" からテーブルをエクスポート
(""の中にはデータベースの名称が入ります)

表示に問題なければ

エクスポート方法:簡易
フォーマット:SQL
エンコーディングへの変換:なし

で、エクスポートの実行をしましょう。
sql形式のファイルが作成されるはずです。

⑥ MAMP環境でDB情報を読み込む

前の章で作成したsqlファイルを利用して
MAMP側のDBを整えていきます。

まずはXAMPPのサーバーを停止してMAMPのサーバーを立ち上げましょう。
立ち上がったらウェルカムページからphpMyAdminに飛びます。

MAMP環境でphpMyAdminに入れたら
XAMPPと同じデータベース名、同じ形式でMAMP側にもデータベースを作成します。

同じ名称のデータベースが作成できたら
XAMPP側で作成したsqlファイルをインポートしていきます。

エクスポートした時と同じように
MAMP側のphpMyAdminで新しく作成したデータベース名を選択したら
上部メニューのインポートを選択しましょう。

ファイルを選択のボタンからXAMPP側のDBで作成したsqlファイルをアップロードし
その他はとりあえずデフォルトで実行ボタンを押してください。
sql内に書かれていたクエリが複数実行されると思います。

全部のクエリが実行され、XAMPP側と同じテーブル、同じレコードが作成されたら
MAMP環境へのDB情報の移行は終了です。

⑦ MAMP環境のMySQLへSequel Proで接続

最後にSequel Proを利用して、MAMP環境のMySQLへ接続していきます。

・Sequel Pro
 インストーラーのダウンロードはこちらから

・比較的新しいQiita参考記事
 Mac MySQL Sequel Proの導入方法

インストールが完了したらSequel Proを立ち上げます。
Image from Gyazo

画像と同じ画面が表示されたらソケットタブにて情報を入力していきます。

名前: localhost
ユーザー名: root
パスワード: root
データベース:
ソケット: /Applications/MAMP/tmp/mysql/mysql.sock

【ポイント】
・ユーザー名とパスワードはMAMPインストール時から初期設定のままであれば、どちらもrootです。
・データベースはとりあえず空欄推奨。
・ソケットはmysql.sockまでのパスを入力します。

以上の情報を入力したら接続をテストボタンを押して
テストが成功したら接続ボタンを実行しましょう。

接続が完了したら
Sequel Pro画面左上のデータベースを選択をクリックして
MAMPのphpMyAdminにて先ほど作成したデータベース名が表示されると思います。

そちらを選択してphpMyAdminと同じ情報が表示されていればOKです。

これにて記事タイトルの内容は終了です。

その他おまけ

【注意事項】

① MAMP側のhtdocs配下に置くソースコードはXAMPP側からコピーした後に一部修正する必要があります。
DBへ接続するPDOに関する記述は要修正です。

例: new PDO()の中のpasswordに関する部分。

XAMPP環境ではpasswordがデフォルトで空だったと思いますが
MAMP環境ではデフォルトでrootになっています。



② サーバーのポート番号を変更する場合はMAMPアプリケーションのメニューから行うことはオススメしない

Image from Gyazo

こちらのメニューにある
Set Web & MySQL ports to 80 & 3306 ボタンを押すと
一発でApache,Nginx,MySQLのポート番号が切り替わるのですが
このボタンを押してポート番号を変更すると、WebサーバーからDBサーバーへ、うまく接続できませんでした。
(私だけであればいいのですが...。)

【Mac】MAMPのエラーでポート番号を変更できない場合の解決方法
私はこちらの記事を参考にしました。

MySQLのポート番号はMAMPアプリケーションで変更し、Apacheのポート番号は
/アプリケーション/MAMP/conf/apache/httpd.conf

のソースコードを書き換える事で無事解決できました。

最後に

ザッと手順を思い出しながら書きましたので、もしかしたら間違いがあるかもしれません。
その際はコメントにて教えていただけると助かります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VScodeでXdebugを使う時に、デバッグする方法

こんにちは! kouです。
今日は、vscodeでxdebugを使うために注意すべきことについて説明します!
この記事は、Visual Studio CodeでPHPをデバッグする方法に、補足を加えたものです

実施環境

lunch.jsonファイル

実行したいファイルがあるフォルダーを開き、実行したいファイルを選択>左メニューバーからデバッグボタンをクリック
create-launch.json.PNG
"launch.jsonファイルを作成します"をクリックし、PHPを選択launch.PNG

launch.jsonに、["runtimeExecutable": "C:\xampp\php\php.exe"]という行を追加し、下記のように修正。"runtimeExecutable"パスには、php.exeのpathを入力

*修正後

lunch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000,
            "runtimeExecutable": "C:\\xampp\\php\\php.exe"
        }
    ]
}

デバックの方法1-Webサーバーを使わないでデバック

「Launch currently open script」が選択されていることを確認し、デバック開始ボタンを押す
launch-current.PNG

デバックの方法2-Webサーバーからデバック

xmappで、Actions>Start からapacheを起動し、adminをクリックxmapp-ctrl.PNG
すると、このような画面が開く
localhost.PNG
そこで、vscode上で、左サイドバー>listen for XDebugをクリック
その状態でapache上から実行したいファイルを開くと、デバッグができる

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VScodeでXdebugでデバックするときの、実行方法

こんにちは! kouです。
今日は、vscodeでxdebugを使うために注意すべきことについて説明します!
この記事は、Visual Studio CodeでPHPをデバッグする方法に、補足を加えたものです

実施環境

lunch.jsonファイル

実行したいファイルがあるフォルダーを開き、実行したいファイルを選択>左メニューバーからデバッグボタンをクリック
create-launch.json.PNG
"launch.jsonファイルを作成します"をクリックし、PHPを選択launch.PNG

launch.jsonに、["runtimeExecutable": "C:\xampp\php\php.exe"]という行を追加し、下記のように修正。"runtimeExecutable"パスには、php.exeのpathを入力

*修正後

lunch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000,
            "runtimeExecutable": "C:\\xampp\\php\\php.exe"
        }
    ]
}

デバックの方法1-Webサーバーを使わないでデバック

「Launch currently open script」が選択されていることを確認し、デバック開始ボタンを押す
launch-current.PNG

デバックの方法2-Webサーバーからデバック

xmappで、Actions>Start からapacheを起動し、adminをクリックxmapp-ctrl.PNG
すると、このような画面が開く
localhost.PNG
そこで、vscode上で、左サイドバー>listen for XDebugをクリック
その状態でapache上から実行したいファイルを開くと、デバッグができる

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【PHP】ajax処理でステータスコード200を返しているのに正常に動かないエラー

PHPについて学習内容を備忘録としてまとめます。
今回は実装中に起きたエラーについて解決法まで記載します。

ステータスコード200を返しているのにajax処理が正常に動かない

下記はテキストボックスに文字を入力して編集完了ボタンをクリックすると、
testの部分が書き換わるajax機能を用いたものになります。
image.png
ただ編集完了ボタンをクリックしても文字が変わらないため、
jqueryのコードにjqXHR.statusを追記してステータスコードを確認してみます。

    }).fail(function(jqXHR, textStatus, errorThrown){
       $("div.result").text("エラーが発生しました。ステータス:" + jqXHR.status);
    });

image.png
↓編集完了をクリック
image.png

すると上記のようにステータスコードは200を返しており正常にレスポンスが取得できています。

原因

下記のようにtextstatusを確認してみたところパースエラーと表示されていました。
datatypejsonとしていたためレスポンスが厳格な作法によってパースされるため、少しでも奇形の場合はパースエラーが返されてしまうとのことです。
image.png

解決方法

datatypetextで指定すると、正常に動きました
image.png
↓編集完了をクリック
image.png

参考URL

https://trialanderror.jp/ajax-fail/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelでどれだけ関数があるか調べたい時にBashでやったこと

このプロジェクトに関数がいくつあるか知りたい ってこと無いですか?ないですか。僕はありました。

Laravelのプロジェクトなんですけど、パブリックな関数がいくつあるのか知りたかったんですね。PhpStormのプラグインだったり、色々と探したんですが、なんか欲しい情報を簡単に出せるのがありませんでした。

最近shell(bash)の書き方を覚えたばかりなので、使って書いたほうが早そうという結論に。

前提

  • Bashで書いてます。shell初心者です。
  • コメントアウトも拾っちゃいます。
  • 文字列とかも拾っちゃいます。
  • とにかく public function って文字列は無差別に拾います。
  • 行数カウントです。
  • プロジェクトルートから実行するのを想定。

ワンライナー

$ result_file="class_analysis"; [[ -f "$result_file" ]] && rm "$result_file"; touch "$result_file"; targets=("Services" "Repositories"); for target in "${targets[@]}"; do ls -1 app/"$target"/ | grep ".*Interface.php" | while IFS= read file; do echo "app/$target/$file,$(grep -c "public function" "app/$target/$file")" >> $result_file; done; done;

分解

まずは出力先ファイル名を設定。

$ result_file="class_analysis";

出力先ファイルが既に存在する場合は、削除しちゃいます。

[[ -f "$result_file" ]] && rm "$result_file";

新規で出力先ファイルを作ります。

touch "$result_file";

今回は「すべてのディレクトリ」ではなく、ある程度絞って数を見たかったため、ディレクトリをある程度絞りました。
プロジェクト的に重要なロジックが詰まっている以下の2つを対象としています。

targets=("Services" "Repositories");

対象ディレクトリで回して行きます。

for target in "${targets[@]}"; do

app 配下のファイルを1ファイル1行で表示し、パイプで出力を次の処理へ渡す。

    ls -1 app/"$target"/ |

今回対象のプロジェクトではInterfaceを具象クラスと同じディレクトリに格納していたため、Interfaceだけ見ればいいや、ということでインターフェースだけで絞り込みました。
Interfaceという文字列で grep した結果を、またまたパイプで次の処理へ渡します。

    grep ".*Interface.php" |

1ファイルずつ回して public function という文字列を含む行数を抜き出して、カンマ区切りでファイル名とともに echo して、その結果を出力先ファイルに追加。

    while IFS= read file; do
        echo "app/$target/$file,$(grep -c "public function" "app/$target/$file")" >> $result_file;
    done;

ループお終い。

done;

以上

あとがき

上記、ニーズに合わせてカスタマイズして使っていただければと。
ファイルの grep 周りをもうちょっときれいにできる気がしてる。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】Collectionのtakeメソッド

はじめに

今回もLaravelのCollectionのメソッドについてまとめたいと思います。

takeメソッドで指定した件数だけデータ取得する

Collectionの中から特定の件数だけを取得することができます。

$collection = collect(['赤', '青', '黄', '緑', '白',]);
$chunk = $collection->take(3);
print_r($chunk->toArray());

実行結果は下記になります。

Array
(
    [0] => 赤
    [1] => 青
    [2] => 黄
)

先ほどは正の数でしたが負の数を用いていて実装すると、後ろから指定した数の値を取得することができます。

$collection = collect(['赤', '青', '黄', '緑', '白',]);
$chunk = $collection->take(-2);
print_r($chunk->toArray());

実行結果は下記になります。

Array
(
    [4] => 白
    [3] => 緑
)

おわりに

いかがでしたでしょうか。
takeメソッドでは負の数も用いることができるので必要な時があれば試してみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP: らくらくPDOクラス(初心者向け)

データベース操作をらくらくに!

PDOStatementクラスを呼び出す

PDOクラスの呼び出しに必要な情報
//PDOクラス呼び出し時には引数が必要です。(ここでは最低限の説明とします)
$dsh = '{ホスト};{データベース};{エンコード}';
$username = '{ユーザー}';
$password = '{パスワード}';

//呼び出し例1: 上の変数を使った例。
$dbh = new PDO($dsh, $username, $password);

//呼び出し例2: 1行で纏めてみた例。注:スペースで区切らない。
$dbh = new PDO('mysql:host={ホスト名};dbname={データベース名};charset=utf8', '{ユーザー名}', '{パスワード}');

・DBに接続する!

DBに接続してみる
//try catchを使う -> 接続できなければエラーメッセージを出力して終了。
try {
    $dbh = new PDO('mysql:host={ホスト名};dbname={データベース名};charset=utf8', '{ユーザー名}', '{パスワード}');
} catch {
    echo $e->getMessage();
    exit();
}
//確認
var_dump($dbh); //-> object(PDO)として確認できれば接続OK。

プリペアドステートメントを利用してストアドプロシージャをコールする!

なんのこっちゃとお思いでしょうが、サーバーリソースにやさしいPDOの使い方だと覚えてください笑

DBから検索してRead
$name = $_POST['name'];

//プリペアドステートメントの作成(SQLパターンの作成)-> $stmt
//$dbh -> 上で初期化済み&接続済みのPDOクラス。
$stmt = $dbh->prepare('SELECT * id, name FROM `users` WHERE name = ?');

//ストアドプロシージャをコールする(SQLの実行)
//executeメソッド: 引数は配列なので要注意。prepareの'?'(疑問符プレースホルダ)に入力されます。
//$stmt = $stmt->execute([{?}, {?}, {?}]); -> プレースホルダの数だけ入力
$stmt = $stmt->execute([$name]); //$name -> name = {?}
//ここでDBからの呼び出し結果がPDOクラス内プロパティに格納されます。

//呼び出し結果を連想配列に直して出力 -> 一つずつ試してみてください。
$user = $stmt->fetch(PDO::FETCH_ASSOC);     //最初の1行分だけを取り出す。-> 連想配列(1record)
$users = $stmt->fetchAll(PDO::FETCH_ASSOC); //呼び出し結果の全行を取り出す。-> 2次元配列(all record)
//注: 変数名は呼び出すテーブル名を踏襲しましょう! -> `users` -> $users

//結果の確認
var_dump($users); //若しくは$user
//配列が確認できればOK!

//結果の表示
//fetch -> $user: DBレコード1行分。
echo $user['id'] . ' : ';
echo $user['name'] . '<br>';

//fetchAll -> $users: DBレコードから呼び出した全行分(2次元配列)。
foreach ($users as $user) {
    echo $user['id'] . ' : ';
    echo $user['name'] . '<br>';
}

・ショートコードでちょっとだけDBの負荷を減らす。

Traversableインターフェース

$stmt->execute();から直接出力する
//Traversableを実装しているためfetchAllは省略できる。 
$users = $stmt->execute([$name]);
foreach ($users as $user) {
    echo $user['id'] . ' : ' . $user['name'] . '<br>';
}
//上記のようにfetchAllで配列に変更しなくとも出力できます。
//-> 配列に変換する分の負荷が減ります。
//ITraversableはvar_dumpで配列の確認ができません。
//使い分けしてください。

・おまけ知識(接続、および接続の管理)

持続的な接続でキャッシュを効かせてパフォーマンスの向上
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, 
    array(PDO::ATTR_PERSISTENT => true)
);
?>

LGTMお願いします!
モチベーションがあがります!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【備忘録】php データーベース でのエラーを見る方法

ini_set('display_errors', 1);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelでVue.jsを使う

目次

Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方

Laravelバージョン

動作確認はLaravel Framework 7.19.1で行っています

前提条件

eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

LaravelでJavaScript、CSSを使う
本記事は上記が完了している前提で書かれています

Vue.jsを使う準備

Laravelの認証(web画面)
を実行した人はもう準備が済んでいます
上記記事で行った
composer require laravel/ui
php artisan ui vue --auth
でVue.jsを使うのに必要なものがインストールされていました
やってない人は
composer require laravel/ui
php artisan ui vue
npm install
をしましょう
package.jsonを見てみるとvueが追加されているはずです

コンポーネント作成

/sample/resources/js/components/Sample.vue作成

Sample.vue
<template>
  <div>
    <div>{{ message }}</div>
  </div>
</template>


<script>
export default {
  props: {
      message: {title: String, default: 'hello world'}
  }
}
</script>

コンポーネント登録

/sample/resources/js/app.jsに
Vue.component('sample', require('./components/Sample.vue').default);
を追記

app.js
‥‥
Vue.component('example-component', require('./components/ExampleComponent.vue').default);
Vue.component('sample', require('./components/Sample.vue').default);
‥‥

app.jsを見るとVue.component('example-component', require('./components/ExampleComponent.vue').default);が既に書かれていたと思います。また、resources/js/components/ExampleComponent.vueが既に存在していたはずです
Laravelでは事前にapp.jsにVue.jsを使う準備ができており、開発者はそこにVue.jsのグローバルコンポーネントを登録すれば使えるようになっています

Controllerにメソッド追加

(1) /sample/app/Http/Controllers/SampleController.phpにvueメソッドを追記

    public function vue()
    {
        return view('sample.vue');
    }

(2) /sample/routes/web.phpに下記を追記
Route::get('sample/vue', 'SampleController@vue');

viewの作成

/sample/resources/views/sample/vue.blade.phpファイル作成

vue.blade.php
<html>
    <head>
        <title>sample</title>
        <script src="{{ asset('js/app.js') }}" defer></script>
    </head>
    <body>
        <div id="app">
            <sample />
        </div>
    </body>
</html>

JavaScriptビルド実行

コマンドラインで
cd sample
npm run dev

動作確認

http://localhost/laravelSample/sample/vue

実行結果

hello world
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPで変数を使う

PHPで変数を用いる方法を解説

1<?php $sum = 100+1050+200; ?>

(1の説明)$sumに計算したいものを入れます(PHPでは変数にドル記号を用いる)

2合計金額は:<?php print($sum); ?>円です

(2の説明)合計金額は1の時に$に入れた計算式をprint($sum)で呼び出す

3税込価格は:<?php print($sum*1.10); ?>円です

(3の説明)税込金額ではprint($sumに1.10をかけるアスタリスク*を用いる)

上記の結果はブラウザで以下のようになる

合計金額は:1350円です
税込価格は:1485円です

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む