20210507のPHPに関する記事は19件です。

備忘録:laravel学習①

学習目的 LaravelでのSNS実装(ログイン、タイムライン、タグ、フォローなど)イメージの構築 Dockerで開発環境立てる練習 LaravelでのCRUD理解強化 Vue.jsの導入の糸口を掴む dockerの利点 Webサーバーや、データベース本体やその設定内容をファイル化できる。 仮想マシンと比べて、カーネルを仮想化しないので、軽量である。 簡単にWebサーバーや、データベースの環境を作れるLaradockというアプリケーションを使用 .envファイルとはなんぞや UNIX系のOSで使える「env」の本体ファイルでシェル起動時に読み込み リポジトリにコミットされず、環境ごとに変更したい情報をまとめられる。(開発環境、本番環境の切り替え、DBの接続情報の変更) .envファイルについて 例に沿って、.envファイルの編集 APP_CODE_PATH_HOST=../laravel DATA_PATH_HOST=../data COMPOSE_PROJECT_NAME=laravel-sns NGINX_PORT=80 POSTGRES_DB=default POSTGRES_USER=default POSTGRES_PASSWORD=secret POSTGRES_PORT=5432 POSTGRES_VERSION=11.6 dockerイメージダウンロード workspace php-fpm nginx postgres $ docker-compose up -d workspace php-fpm nginx postgres docker-composeコマンドで4つのイメージをダウンロードして、up(起動)し、-d(ターミナルの操作へ) コンテナの停止 $ docker-compose stop Laravelインストール $ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.20.0" workspaceコンテナにLaravelインストール $ docker-compose exec #{container} ${command} 対象のコンテナで対象のコマンドを実行 ポートはdocker-compose.ymlで確認可能 アプリケーション作成基本の流れ (モデル、テーブル作成) 1. ルート記入 2. コントローラー作成 3. view作成 PHPの型キャストって? 前提としてPHPは変数定義時に型宣言を必要としない。代入するものの型に合わせられる。 C言語などでは、変数の型を宣言する。その役割を担う。 <?php $foo = 10; // $foo は整数です $bar = (boolean) $foo; // $bar はbooleanです ?> VIewへの変数の引き渡し方 withメソッド compact関数 MDBootstrapとは CSSフレームワークBootstrap4のマテリアルデザイン版(スマホで見ても画面が崩れないシンプルなデザイン) CDN(Contents Delivery Network)とは ホームページの表示をいい感じにするために用意されたネットワーク ユーザーはCDNに上げられている近くのWebサーバーのファイルを受け取ることができるので、高速に表示できたりする。 感想 やっぱbootstrap使うと、それなりのデザインになリますね。 次から本格的に理解しながらアプリ作成します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

備忘録:laravel学習①

学習目的 LaravelでのSNS実装(ログイン、タイムライン、タグ、フォローなど)イメージの構築 Dockerで開発環境立てる練習 LaravelでのCRUD理解強化 Vue.jsの導入の糸口を掴む dockerの利点 Webサーバーや、データベース本体やその設定内容をファイル化できる。 仮想マシンと比べて、カーネルを仮想化しないので、軽量である。 簡単にWebサーバーや、データベースの環境を作れるLaradockというアプリケーションを使用 .envファイルとはなんぞや UNIX系のOSで使える「env」の本体ファイルでシェル起動時に読み込み リポジトリにコミットされず、環境ごとに変更したい情報をまとめられる。(開発環境、本番環境の切り替え、DBの接続情報の変更) .envファイルについて 例に沿って、.envファイルの編集 APP_CODE_PATH_HOST=../laravel DATA_PATH_HOST=../data COMPOSE_PROJECT_NAME=laravel-sns NGINX_PORT=80 POSTGRES_DB=default POSTGRES_USER=default POSTGRES_PASSWORD=secret POSTGRES_PORT=5432 POSTGRES_VERSION=11.6 dockerイメージダウンロード workspace php-fpm nginx postgres $ docker-compose up -d workspace php-fpm nginx postgres docker-composeコマンドで4つのイメージをダウンロードして、up(起動)し、-d(ターミナルの操作へ) コンテナの停止 $ docker-compose stop Laravelインストール $ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.20.0" workspaceコンテナにLaravelインストール $ docker-compose exec #{container} ${command} 対象のコンテナで対象のコマンドを実行 ポートはdocker-compose.ymlで確認可能 アプリケーション作成基本の流れ (モデル、テーブル作成) 1. ルート記入 2. コントローラー作成 3. view作成 PHPの型キャストって? 前提としてPHPは変数定義時に型宣言を必要としない。代入するものの型に合わせられる。 C言語などでは、変数の型を宣言する。その役割を担う。 <?php $foo = 10; // $foo は整数です $bar = (boolean) $foo; // $bar はbooleanです ?> VIewへの変数の引き渡し方 withメソッド compact関数 MDBootstrapとは CSSフレームワークBootstrap4のマテリアルデザイン版(スマホで見ても画面が崩れないシンプルなデザイン) CDN(Contents Delivery Network)とは ホームページの表示をいい感じにするために用意されたネットワーク ユーザーはCDNに上げられている近くのWebサーバーのファイルを受け取ることができるので、高速に表示できたりする。 感想 やっぱbootstrap使うと、それなりのデザインになリますね。 次から本格的に理解しながらアプリ作成します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPとは

PHP PHPとは動的にWebページを生成することができるサーバーサイドのスクリプト言語です。他の言語と比べて文法もわかりやすく初心者には勉強しやすい言語になっています。 また、MySQLなどのデータベースとの連携が容易なことなどから、WordPressを含めたWebアプリケーションの開発にもよく使われる有名なスクリプト言語です。 言語バージョン こちらの記事では PHP version 7.3.11 ブラウザ Google Chrome 基本的な書き方 PHPを使用した書き方は以下のようになります index.php <?php //処理したい内容 ?> <?php ?>の間に処理の内容を書いていきます。 ?とphpの間に半角スペースを入れるとエラーになるので注意です 「?>」の省略について ?>のあとにHTMLやJavaScriptなどの他の言語のコードがない時は「?>」を省力することができます index.php <?php //処理したい内容 HTML内に記述 PHPはHTML内に記述することができます。 index.php <h1><?php echo 'Hello World!'; ?></h1> 下記と同じ内容になります。 index.html <h1>Hello World!</h1> 今回は以上です
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacからComposerをアンインストールする

前書き Dockerって便利ですよね。 最近Dockerメインで開発しているので、開発環境を汚さないって素晴らしいなと思うようになりました。 そこで自分のMac環境を整理しようと思い立ち、今回Composerをアンインストールしたので、その際の手順をメモします。(いざアンインストールしようと思ったら、やり方がわからないことに気づいたのです。。) これからComposerくんにはDockerの中でお世話になります! アンインストールする手順 // Composerの場所を確認する $ which composer /usr/local/bin/composer // Composerの場所に移動し、ディレクトリごと削除する $ cd usr/local/bin $ rm -r composer // 関連するファイルたちも削除する $ cd /Users/<YourName> $ rm -r .composer これでアンインストール完了です。お疲れ様でした!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows PHP と Apache の導入

phpで作られたサイトの修正確認が、ローカルでも出来れば便利です。 gulpとBrowser-syncを利用してローカルサーバーを立てるため、Apache・PHPの導入までを記載しています。 環境 Windows10 Pro PHP 7.4 (7.4.19) Apache 2.4.41 名称 設置場所 PHP C:\php Apache C:\Apache24 Apacheのインストール まず、Apacheをインストールする。(今回は最新版ではなく、version2.4.41) 下記サイトより、Apache 2.4.41 Win64 の「httpd-2.4.41-win64-VC14.zip」を選択 https://www.apachelounge.com/download/VC14/ 「C:\」に「Apache24」のみ解凍し、「C:\Apache24」となるようにする。 以上でApacheのインストールは完了。 httpd.conf の設定 続いてApacheの設定を行う。 「C:\Apache24\conf\httpd.conf」を開き、必要に応じて書き換えていく。 リダイレクトの許可 URLのリダイレクトや書き換えを許可する。 「rewrite_module modules」で検索し、下記のコメントアウトをはずす。 #LoadModule rewrite_module modules/mod_rewrite.so ↓ LoadModule rewrite_module modules/mod_rewrite.so 以上で設定は完了。 Apacheの起動 Apacheが正常に起動するか確認する。 「C:\Apache24\bin\ApacheMonitor.exe」を右クリックし、「管理者として実行」を選択 『この不明な発行元からのアプリがデバイスに変更を・・・』>「はい」を選択 画面の右下に(矢印をクリックで表示)Apacheのアイコンが追加されている。 アイコン>右クリック>「Open Apache Monitor」を選択 スタートをクリックし、名前の左側のアイコンが赤から黄緑に変化すれば成功。 PHPのインストール 続いてPHPをインストールする。公式サイトよりダウンロード。 Apacheを使用するため、PHP 7.4 (7.4.19) の「VC15 x64 Thread Safe (zip)」を選択 https://windows.php.net/download 「C:\」に「php」ディレクトリを新規作成し、その中に「php-7.4.19-Win32-vc15-x64.zip」の中身を解凍。 「C:\php」となるようにする。 環境変数の設定 Windowsマーク>検索>「システム環境変数の編集」>「環境変数」を開く。 **のユーザー環境変数>「Path」>「編集」 「新規」>「C:\php」を追加し、「OK」 「システム環境変数」>「Path」から、同様に「新規」で「C:\php」を追加。 コマンドプロンプト、もしくはGit Bash等を開き、「php -v」でバージョンを確認する。 下記の様に表示されればインストール成功。 php.ini の設定 続いてphp.iniの設定を行う。 「C:\php\php.ini-production」をコピー・ペーストし、「php.ini」にリネームする。 以降、必要に応じてリネームした「php.ini」の中身を書き換えていく。 マルチバイト関数の有効化 日本語などマルチバイト文字を使うには、mbstringを有効にする。 「extension=mbstring」で検索し、下記のコメントアウトをはずす。 ;extension=mbstring ↓ extension=mbstring 次に、言語に日本語を指定する。 「mbstring.language」で検索し、下記のコメントアウトをはずす。 ;mbstring.language = Japanese ↓ mbstring.language = Japanese 次に、文字コードを指定する。 「;mbstring.internal_encoding」で検索し、下記のコメントアウトをはずし、「UTF-8」を追記。 ;mbstring.internal_encoding = ↓ mbstring.internal_encoding = UTF-8 次に、HTTP通信時に自動で文字変換を行わない様に指定する。 「mbstring.http_input」で検索し、下記のコメントアウトをはずし、「pass」を追記。 「mbstring.http_output」で検索し、下記のコメントアウトをはずし、「pass」を追記。 「mbstring.encoding_translation」で検索し、下記のコメントアウトをはずす。 ;mbstring.http_input ↓ ;mbstring.http_input = pass ~ ~ ;mbstring.http_output ↓ mbstring.http_output = pass ~ ~ ;mbstring.encoding_translation = Off ↓ mbstring.encoding_translation = Off 次に、文字コードの自動判別の順番について指定する。 「mbstring.detect_order」で検索し、下記のコメントアウトをはずし、「auto」を書き換える。 ;mbstring.detect_order = auto ↓ mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII 次に、変換に失敗した際、文字を出力しないよう指定する。 「mbstring.substitute_character」で検索し、下記のコメントアウトをはずす。 ;mbstring.substitute_character = none ↓ mbstring.substitute_character = none SQLiteの有効化 データベースを有効にする。 「pdo_sqlite」で検索し、下記のコメントアウトをはずす。 「sqlite3」で検索し、下記のコメントアウトをはずす。 ;extension=pdo_sqlite ↓ extension=pdo_sqlite ~ ~ ;extension=sqlite3 ↓ extension=sqlite3 設定が完了したら、Apacheを再起動し、php.iniの設定を反映させる。 また設定した内容は、phpinfo.phpで確認する事ができる。 以上でPHPの導入と設定は完了。 参考 php.iniの設定については、下記のサイトがわかりやすく大変勉強になりました。 Let'sプログラミング:https://www.javadrive.jp/php/install/index8.html Apache の環境変数:https://httpd.apache.org/docs/current/ja/env.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPの導入

phpで作られたサイトの修正確認が、ローカルでも出来れば便利です。 gulpとBrowser-syncを利用してローカルサーバーを立てるため、PHPの導入について記載しています。 環境 Windows10 Pro PHP 7.4 (7.4.19) 名称 設置場所 PHP C:\php PHPのインストール PHPをインストールする。公式サイトよりダウンロード。 Apacheを使用するため、PHP 7.4 (7.4.19) の「VC15 x64 Thread Safe (zip)」を選択 https://windows.php.net/download 「C:\」に「php」ディレクトリを新規作成し、その中に「php-7.4.19-Win32-vc15-x64.zip」の中身を解凍。 「C:\php」となるようにする。 環境変数の設定 Windowsマーク>検索>「システム環境変数の編集」>「環境変数」を開く。 **のユーザー環境変数>「Path」>「編集」 「新規」>「C:\php」を追加し、「OK」 「システム環境変数」>「Path」から、同様に「新規」で「C:\php」を追加。 コマンドプロンプト、もしくはGit Bash等を開き、「php -v」でバージョンを確認する。 下記の様に表示されればインストール成功。 php.ini の設定 続いてphp.iniの設定を行う。 「C:\php\php.ini-production」をコピー・ペーストし、「php.ini」にリネームする。 以降、必要に応じてリネームした「php.ini」の中身を書き換えていく。 マルチバイト関数の有効化 日本語などマルチバイト文字を使うには、mbstringを有効にする。 「extension=mbstring」で検索し、下記のコメントアウトをはずす。 ;extension=mbstring ↓ extension=mbstring 次に、言語に日本語を指定する。 「mbstring.language」で検索し、下記のコメントアウトをはずす。 ;mbstring.language = Japanese ↓ mbstring.language = Japanese 次に、文字コードを指定する。 「;mbstring.internal_encoding」で検索し、下記のコメントアウトをはずし、「UTF-8」を追記。 ;mbstring.internal_encoding = ↓ mbstring.internal_encoding = UTF-8 次に、HTTP通信時に自動で文字変換を行わない様に指定する。 「mbstring.http_input」で検索し、下記のコメントアウトをはずし、「pass」を追記。 「mbstring.http_output」で検索し、下記のコメントアウトをはずし、「pass」を追記。 「mbstring.encoding_translation」で検索し、下記のコメントアウトをはずす。 ;mbstring.http_input ↓ ;mbstring.http_input = pass ~ ~ ;mbstring.http_output ↓ mbstring.http_output = pass ~ ~ ;mbstring.encoding_translation = Off ↓ mbstring.encoding_translation = Off 次に、文字コードの自動判別の順番について指定する。 「mbstring.detect_order」で検索し、下記のコメントアウトをはずし、「auto」を書き換える。 ;mbstring.detect_order = auto ↓ mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII 次に、変換に失敗した際、文字を出力しないよう指定する。 「mbstring.substitute_character」で検索し、下記のコメントアウトをはずす。 ;mbstring.substitute_character = none ↓ mbstring.substitute_character = none SQLiteの有効化 データベースを有効にする。 「pdo_sqlite」で検索し、下記のコメントアウトをはずす。 「sqlite3」で検索し、下記のコメントアウトをはずす。 ;extension=pdo_sqlite ↓ extension=pdo_sqlite ~ ~ ;extension=sqlite3 ↓ extension=sqlite3 設定が完了したら、Apacheを再起動し、php.iniの設定を反映させる。 また設定した内容は、phpinfo.phpで確認する事ができる。 以上でPHPの導入と設定は完了。 参考 php.iniの設定については、下記のサイトがわかりやすく大変勉強になりました。 Let'sプログラミング:https://www.javadrive.jp/php/install/index8.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】bladeの@includeと@componentの違い

bladeの@includeと@componentを使い分けるためのメモ。 結論だけ述べると、どちらを使っても同じ見た目は作れる。 @includeはタグの数が決まっている場合と相性がよく、 @componentはタグの数が不定の場合と相性が良い。 前提 バージョン:Laravel6 @includeの使い方 @include('読込ファイル', ['変数名' => '代入値',...]) 読込ファイル内に変数が存在するときは第2引数で指定することで値を渡すことができる。 @componentの使い方 @component('読込ファイル', ['変数名' => '代入値',...]) /* {{ $slot }}に入る内容 */ @slot('スロット名') /* {{ $スロット名 }}に入る内容 */ @endslot @endcomponent 読込ファイル内に変数が存在するときは第2引数で指定することで値を渡すことができる。 また@component内に書いた内容は読込ファイル内の{{ $slot }}へと挿入される。@slotを使用することで任意の変数名にすることも可能。 使い分け例 ①ボタンの使い回し 例えば同じ見た目のボタンを表示名と色を変えて使いまわすことを考える。 button.blade.php <button type="button" class="btn btn-{{ $color }}">{{ $name }}</button> view.blade.php <div class="m-3"> <p>includeで作成</p> @include('button',[ 'color' => 'primary', 'name' => 'ボタン1' ]) @include('button',[ 'color' => 'success', 'name' => 'ボタン2' ]) @include('button',[ 'color' => 'danger', 'name' => 'ボタン3' ]) </div> <div class="m-3"> <p>componentで作成</p> @component('button',[ 'color' => 'primary', 'name' => 'ボタン1' ]) @endcomponent @component('button',[ 'color' => 'success', 'name' => 'ボタン2' ]) @endcomponent @component('button') @slot('color') danger @endslot @slot('name') ボタン3 @endslot @endcomponent 結果は下の画像の通り。 例のように決まった要素数のものを使いまわすのであれば、@includeも@componentも大して変わらない書き方になる。 @componentでは@endcomponentを書くため微妙に@includeの方が見やすいかもしれない。 また、@componentは変数で渡すかスロットとして取り込むかで2通りの書き方がある。 ②レイアウトの使い回し 例えば、コンテンツを配置する枠は使いまわすけれど、中身は不定という場合を考える。 frame.blade.php <div class="container-fluid my-3"> <h3 class="text-white text-center bg-dark rounded-top m-0"> {{ $title }} </h3> <div class="border border-dark rounded-bottom p-2"> {{ $slot }} // includeの場合は{!! $slot !!} </div> </div> view.blade.php <div class="m-3"> <p>includeで作成</p> @include('frame', [ 'title' => 'テキスト', 'slot' => '<p>これはテキストです。</p>', ]) @php $list = ''; for($i = 1; $i <= 5; $i++) { $list = "$list<li class='list-group-item'>アイテム$i</li>"; } @endphp @include('frame', [ 'title' => 'リスト', 'slot' => $list, ]) </div> <div class="m-3"> <p>componentで作成</p> @component('frame', ['title' => 'テキスト']) <p>これはテキストです。</p> @endcomponent @component('frame', ['title' => 'リスト']) <ul class="list-group"> @for($i = 1; $i <= 5; $i++) <li class="list-group-item">アイテム{{ $i }}</li> @endfor <ul> @endcomponent </div> 結果は下の画像の通り。 要素数や種類が変わる場合には@includeでは変数に格納するために見づらい書き方をとらざるをえない。変数として渡すため、制御構文を使いたければ外側に書く必要がある。 @componentでは要素や制御構文をそのままの形で使用できるため整った見た目になる。 なお、@includeに要素を渡すときに{{ }}のままではエスケープされてしまう(下記画像)。正しく表示するには{!! !!}にしなければならない。 結論 制御構文を使ったり、内容となるhtml要素に自由度を持たせたい場合は@componentを使うとで見やすいコードとなる。 一方、制御構文を使わない(使うとしても渡すのは構文内の変数だけ)であったり、内容となるhtml要素は固定で表示内容や属性に変数を渡すだけの場合は@includeを使うとで見やすいコードとなる。 表示結果についてはどちらを使っても同じものは実装できる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

.envファイルに#(シャープ)を含める

ECRのサービス起動時の環境変数の指定でenvファイルを切り替える試験をしている最中に設定した値がちゃんと認識されない。 原因はenvファイルの値に#(シャープ)が含まれていることだった。 以下のようにダブルクォーテーションで囲って解決。 HOGE_ENV="hoge#moge" そもそも色々とenvファイルに書くのもよろしくないので ルールを決めてAWS Systems Managerのパラメータストア使ったほうが良い。 あくまで#の回避方法のメモ。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelアプリにGoogleログイン機能を追加し本番環境に反映させる

概要 Laraelアプリに追加でGoogleログイン機能を追加したので本番環境(Heroku)に反映させます。 https://qiita.com/u-dai/items/91df3b923dc82fed5b76 ↑こちらの記事を参考にさせて頂きました。ありがとうございます。 ここからは、ローカル環境でGoogleログインが正常に動いている事を前提で進めていきます。 本番環境に反映 本番環境のURIを追加します。 URI http://アプリケーション名.herokuapp.com/login/google/callback Herokuの場合はこんな感じです。 そして最も大事な環境変数を設定していきます。 記事通りに進めていくと、app/config/services.phpにて services.php 'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('APP_URL') . '/login/google/callback' ] このように記述したと思いますが、これら3つの環境変数をHerokuに設定していきます。 terminal % heroku config:set APP_URL=http://アプリケーション名.herokuapp.com % heroku config:set GOOGLE_CLIENT_ID=○○◯○.apps.googleusercontent.com % heroku config:set GOOGLE_CLIENT_SECRET=△△△△ 後はデプロイすれば本番環境に反映されます。 めでたし、めでたし。 おまけ おまけというか個人的にはこちらが本題だったりします。 ローカルで動いたGoogleログインですが、本番で動かず焦った私は何を血迷ったのか、せっかく作った認証情報を削除して作り直してしまうのです。 それによりローカルでせっかく動いたGoogleログインにて、『エラー 401: deleted_client the oauth client was deleted.』と怒られる始末⤵︎ このエラーに半日費やしてしまうわけで…。 このエラーの解決方法は terminal % php artisan clear-compiled % composer dump-autoload % php artisan optimize googleログインで他にもエラーが出ていたのですが、これらのコマンドで直った旨をメモしていたのが功を奏しました。このエラーにも使えるとは。 ありがたや、ありがたや。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WordPressちゃんとやろうと思ってVScodeにphpcs入れたらめっちゃ怒られた

この記事は 久しぶりにWordPressに触れる機会があったのでちゃんとしようと思ってVScodeにphpcsていうプラグイン入れたら早速めっちゃ怒られたので一個ずつ解決していくぅ ちなみに普段ほとんどWordPress触らないからマジで初心者向けです。 phpcsはこれ https://marketplace.visualstudio.com/items?itemName=ikappas.phpcs エラー内容と解決方法 共通 1. 改行前スペース Whitespace found at end of line 改行前に半角スペースが入っていたりするとこう怒られる。 半角スペースを消すと怒られなくなる。 2. コード後の改行 File must end with a newline character コードのあとに改行がないときの怒られ方。改行を足すと機嫌は直る。 3. コメントの下の空改行 There must be no blank lines after the function comment コメントの下に空の改行があるとこれが出る。空改行を消すとエラーが消える。 4. ドットの左右は半角スペースを Contact operator must be surrounded by a single space ドットの左右に半角スペースを入れないとこうなる。入れると直る。 5. コメントが見つからない Missing file doc comment WordPressのファイルは、それぞれがなんのファイルなのかをコメントで記す必要があるらしい。 それがないって怒っているのが上記のエラーメッセージ。 /** * Header * @package ThemeName */ こんな感じで、概要と@package ほにゃららを入れてあげると直る。 @package以下はなんでもよいらしい。テーマの名前。 このサイトわかりやすかった WordPress コーディングスタンダードの正式な書き方をまとめてみる – ミルログ functions.php 1. コメントが見つからない その2 Missing file doc comment 一個前のエラーと一緒だけど、関数を作成している場合には関数ごとにもコメントが必要 //functions.phpのDoc /** * Functions * * @package ThemeName */ //関数$my_enqueue_scripts(任意の関数名)のDoc /** * $my_enqueue_scripts. */ 2. バージョン記載 Resource version not set in call to wp_enqueue_style(). this means new versions of the style will not always be loaded due to browser caching. 読み込んだCSSファイルにバージョン記載がない場合の内容。何らかバージョン情報を記載してあげると機嫌が直った。 //怒られる wp_enqueue_style( 'common-css', get_template_directory_uri() . '/assets/css/styles.min.css', ''); //怒られない wp_enqueue_style( 'common-css', get_template_directory_uri() . '/assets/css/styles.min.css', '', '1.0.0' ); header.php 1. スタイルシート等の読み込み方法 Stylesheets must be registered/enqueued via wp_enqueue_style スタイルシートはwp_enqueue_styleで読み込んでねという。 JSもwp_enqueue_scriptsで読み込んでないと同じように怒られる。 2. 読み込みはfunctions.phpに All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found 'get_template_directory_uri.' JS,jQuery,CSS周りの記述をheadに入れていたら言われた。 これは主にURLをエスケープ処理してない場合に出る文言らしい。 そもそもfunctions.phpに入れてしまえば怒られなくなったから大人しくfunctions.phpにほっぽった。 まとめ とりあえずここまで。まだいっぱい出る気がするのでそのときは追記していくぅ(2021/05/07)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP は初期値なし reduce できない

reduce とか fold とか呼ばれる関数の一般的なイメージってこうですよね。 def reduce(f, xs): l = len(xs) if l == 0: return None # or error elif l == 1: return xs[0] # 単要素なら確定 else: # 単要素になるまで削って再帰 xs2 = copy.copy(xs) # (ミュータブルはめんどくさいな) x = xs2.pop(-1) return f(x, reduce(f, xs2)) で、これだと len(xs) == 0 のときが厄介なので、ご都合で、配列の先頭要素に一時的に入ってくれる初期値引数をオプションで持っていたりします。 def reduce(f, xs, i = None): if i is not None: xs2 = copy.copy(xs) return reduce(f, xs2.insert(0, i)) l = len(xs) # 以下上と同じ Python の reduce はこんな感じ: % python3 Python 3.9.2 (default, Mar 15 2021, 17:27:56) ... >>> from functools import reduce >>> reduce(max, [-1, -2, -3]) -1 >>> reduce(max, [-1, -2, -3], 0) 0 >>> reduce(min, [-1, -2, -3]) -3 >>> reduce(min, [-1, -2, -3], 0) -3 >>> Ruby の reduce (= inject): % irb irb(main):001:0> [-1,-2,-3].inject{|a,b| a > b ? a : b} => -1 irb(main):002:0> [-1,-2,-3].inject(0){|a,b| a > b ? a : b} => 0 irb(main):003:0> [-1,-2,-3].inject{|a,b| a < b ? a : b} => -3 irb(main):004:0> [-1,-2,-3].inject(0){|a,b| a < b ? a : b} => -3 irb(main):005:0> (Ruby なんでもメソッドなので 2 引数の min/max 関数ないの地味にめんどい) では本題... 「PHP は他の言語と違って reduce の初期値がつねに効いてくるから注意な」 「えっ? なにそれどういうこと??」 % php -a Interactive shell php > echo array_reduce([-1,-2,-3], 'max', 0); 0 php > echo array_reduce([-1,-2,-3], 'max'); -1 同じな気がするんだけどな... php > echo array_reduce([-1,-2,-3], 'min', 0); -3 php > echo array_reduce([-1,-2,-3], 'min'); php > は? えっ??? array_reduce ( array $array, callable $callback, mixed $initial = null ) : mixed この $initial = null なんですが、「引数なしでコールして null のままだったら初期値を配列の先頭要素から取ってくる普通の reduce になる」って意味ではなく、本当に $callback の初回コール初期値に null をぶっ込んできます。 というわけで種明かし。 % php -a Interactive shell php > var_dump(max(null, -1)); int(-1) php > var_dump(min(null, -1)); NULL max は null と比較したら null でない方を返すけど、min は null と比較したら null を返す関数だったので、array_reduce の初期値 null がずっと生き残っていて echo null になったというわけです。 初回で null との比較が起きることを想定した関数なんて逆に書きにくいですね。こうすれば普通の初期値なし reduce になるのかな? $xs = [-1,-2,-3]; echo array_reduce(array_slice($xs, 1), 'min', $xs[0] ?? null); うーん... echo array_reduce([-1,-2,-3], 'min', PHP_INT_MAX); やっぱ素直にこういう「ループで書いたら初期値こうだよね」って感じのコード書くのが妥当な気がします。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPでSESSIONが保存できなくなった話

経緯 phpで作ったログインフォームが、昨日突然ログインできなくなった。 原因が分からず色々試しているうちにサーバをrebootしたら復旧した。 解決かと思ったら、今朝またログインできなくなっていた。 調べる login.php <?php session_start(); if($_POST["id"] == "admin" && $_POST["password"] == "ABC123"){ $_SESSION['login'] = true; $_SESSION['id'] = $_POST["id"]; header('Location: index.php'); exit; } echo '<form action="login.php" method="POST">'; echo 'id:<input type="text" name="id">'; echo 'password:<input type="password" name="password">'; echo '<input type="submit" value="ログイン">'; echo '</form>'; index.php <?php $session_return = session_start(); if(!$session_return){ echo "セッションエラー"; } if(!$_SESSION['login']){ var_dump($_SESSION); // header('Location: login.php'); exit; } echo "ログイン成功"; array(0) {} どうやら$_SESSIONに書き込みができなくなっているようだ。 しばらくしてlogin.phpがエラーを吐いている事に気がついた。 Warning: Unknown: write failed: No space left on device (28) in Unknown on line 0 Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0 「No space left on device」って・・・あ。 # df Filesystem 1K-blocks Used Available Use% Mounted on tmpfs 249360 0 249360 0% /dev/shm /dev/vda4 15948532 15250520 0 100% / /dev/vda2 487652 130694 327262 29% /boot tmpfs 49872 0 49872 0% /run/user/0 ・・・ディスク埋まってる。 # du -k / | sort -rn | head -10 15374837 / 13146344 /var 12804060 /var/log 12739304 /var/log/httpd 2042276 /usr 828688 /usr/lib 491660 /usr/lib/firmware 447940 /usr/share 262768 /usr/bin 220276 /var/lib そういえばapacheのログの設定してなかったな。 # ls -l /var/log/httpd/ total 12739300 -rw-r--r-- 1 root root 2170880 May 7 12:55 access_log -rw-r--r-- 1 root root 13038845952 May 7 12:55 error_log Oh! 解決 # rm /var/log/httpd/error_log # vi /etc/httpd/conf/httpd.conf ErrorLog "/dev/null" LogLevel alert # service httpd restart これでよし。 ログイン成功 めでたしめでたし?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelキューでのメール送信時に任意の言語設定を反映させる

はじめに メール本文の言語設定を画面と揃えたい場合と、固定したい場合があったので備忘録として残しておきます。 セッションに格納されているlocaleを使用したい場合 Mail::to($to)->locale(session('locale'))->queue($mail_object); session('locale')の部分は環境に合わせて置き換えてください。 固定したい場合 Mail::to($to)->locale('en')->queue($mail_object); そのままです。 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows PHP マルチバイト関数の有効化

環境 Windows10 Pro PHP-8.0.6(Microsoftのサポート対象外) php.ini の設定 「php.ini-production」をコピー・ペーストし、「php.ini」にリネームする。 以降、必要に応じてリネームした「php.ini」の中身を書き換えていく。 マルチバイト関数の有効化 日本語などマルチバイト文字を使うには、php_mbstring.dllを有効にする。 「extension=mbstring」で検索し、下記のコメントアウトをはずす。 ;extension=mbstring ↓ extension=mbstring 次に、言語に日本語を指定する。 「mbstring.language」で検索し、下記のコメントアウトをはずす。 ;mbstring.language = Japanese ↓ mbstring.language = Japanese 次に、文字コードを指定する。 「;mbstring.internal_encoding」で検索し、下記のコメントアウトをはずし、「UTF-8」を追記。 ;mbstring.internal_encoding = ↓ mbstring.internal_encoding = UTF-8 次に、HTTP通信時に自動で文字変換を行わない様に指定する。 「mbstring.http_input」で検索し、下記のコメントアウトをはずし、「pass」を追記。 「mbstring.http_output」で検索し、下記のコメントアウトをはずし、「pass」を追記。 「mbstring.encoding_translation」で検索し、下記のコメントアウトをはずす。 ;mbstring.http_input ↓ ;mbstring.http_input = pass ~ ~ ;mbstring.http_output ↓ mbstring.http_output = pass ~ ~ ;mbstring.encoding_translation = Off ↓ mbstring.encoding_translation = Off 次に、文字コードの自動判別の順番について指定する。 「mbstring.detect_order」で検索し、下記のコメントアウトをはずし、「auto」を書き換える。 ;mbstring.detect_order = auto ↓ mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII 次に、変換に失敗した際、文字を出力しないよう指定する。 「mbstring.substitute_character」で検索し、下記のコメントアウトをはずす。 ;mbstring.substitute_character = none ↓ mbstring.substitute_character = none 以上で設定は完了。Apacheを再起動し、「phpinfo.php」で設定を確認する。 参考:https://www.javadrive.jp/php/install/index8.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows PHP php.ini の設定

環境 Windows10 Pro PHP 8.0.6(Microsoftのサポート対象外) Apache 2.4.41 php.ini の設定 「php.ini-production」をコピー・ペーストし、「php.ini」にリネームする。 以降、必要に応じてリネームした「php.ini」の中身を書き換えていく。 マルチバイト関数の有効化 日本語などマルチバイト文字を使うには、mbstringを有効にする。 「extension=mbstring」で検索し、下記のコメントアウトをはずす。 ;extension=mbstring ↓ extension=mbstring 次に、言語に日本語を指定する。 「mbstring.language」で検索し、下記のコメントアウトをはずす。 ;mbstring.language = Japanese ↓ mbstring.language = Japanese 次に、文字コードを指定する。 「;mbstring.internal_encoding」で検索し、下記のコメントアウトをはずし、「UTF-8」を追記。 ;mbstring.internal_encoding = ↓ mbstring.internal_encoding = UTF-8 次に、HTTP通信時に自動で文字変換を行わない様に指定する。 「mbstring.http_input」で検索し、下記のコメントアウトをはずし、「pass」を追記。 「mbstring.http_output」で検索し、下記のコメントアウトをはずし、「pass」を追記。 「mbstring.encoding_translation」で検索し、下記のコメントアウトをはずす。 ;mbstring.http_input ↓ ;mbstring.http_input = pass ~ ~ ;mbstring.http_output ↓ mbstring.http_output = pass ~ ~ ;mbstring.encoding_translation = Off ↓ mbstring.encoding_translation = Off 次に、文字コードの自動判別の順番について指定する。 「mbstring.detect_order」で検索し、下記のコメントアウトをはずし、「auto」を書き換える。 ;mbstring.detect_order = auto ↓ mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII 次に、変換に失敗した際、文字を出力しないよう指定する。 「mbstring.substitute_character」で検索し、下記のコメントアウトをはずす。 ;mbstring.substitute_character = none ↓ mbstring.substitute_character = none SQLiteの有効化 データベースを有効にする。 「pdo_sqlite」で検索し、下記のコメントアウトをはずす。 「sqlite3」で検索し、下記のコメントアウトをはずす。 ;extension=pdo_sqlite ↓ extension=pdo_sqlite ~ ~ ;extension=sqlite3 ↓ extension=sqlite3 以上で設定は完了。Apacheを再起動し、「phpinfo.php」で設定を確認する。 参考 Let'sプログラミング:https://www.javadrive.jp/php/install/index8.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS ほぼコピペでできる phpMyAdmin入れ方!!

ターミナルから操作するLinuxコマンド一覧 個人で設定されているものが入る場合は赤文字 <システムの更新> $sudo yum update MySQLへの接続確認 $sudo yum install mysql ここから $mysql -u admin -p -h MySQLDBのエンドポイント RDSで設定した -h の後 エンドポイント -u の後 ユーザーID 僕の場合admin コマンド入力後RDSで設定したパスワードがもとめられる求められる ここまで >quit $sudo yum install httpd $sudo systemctl enable httpd $sudo systemctl start httpd (httpが正常に稼働しているかブラウザで確認) $sudo amazon-linux-extras enable php7.4 $sudo amazon-linux-extras install php7.4 $sudo yum install php-mbstring php-xml $sudo systemctl enable php-fpm $sudo systemctl start php-fpm $sudo systemctl restart httpd $sudo nano /var/www/html/index.php (phpが正常に稼働しているかブラウザで確認) $cd /var/www/html $sudo wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz $sudo mkdir phpMyAdmin $sudo tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1 $sudo rm phpMyAdmin-latest-all-languages.tar.gz $sudo cp phpMyAdmin/config.sample.inc.php phpMyAdmin/config.inc.php $sudo nano phpMyAdmin/config.inc.php (ファイルから下記の内容を探し、修正) ここから $cfg['Servers'][$i]['host'] = 'localhost'; ↑を↓に修正 $cfg['Servers'][$i]['host'] = '先程と同じエンドポイント'; ここまで (phpMyAdminが正常に稼働しているかブラウザで確認) AWSインスタンスからパブリック IPv4 DNS オープンアドレスに http://元々のアドレス/phpMyAdmin/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

配列を用いて曜日を日本語表示する

説明が長すぎたので、すっきり書くと <?php $week_name = ['日','月','火','水','木','金','土']; print($week_name[6]); ?php> //$week_name=[..]の部分で、 //'$week_name'の代入するものを定義する(今回は、曜日) //その後、printを使って、曜日を呼び出す //[]内部の数値で曜日を呼ぶが、プログラム上は0から数えるので、例えば月なら、1を入れると呼び出せる。同様に、'土'を呼び出すのは、6を入力することで呼び出せる
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPでタイムゾーンの修正をする

date_default_timezone_set('Asia/Tokyo'); // これでタイムゾーンを修正する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP記述の基本

Udemyで学んだPHPの内容をここに記載します。 初心者が学んだ内容なので、誤りがあればご指摘いただければ幸いです。(ただし、優しく指摘をお願いします。) PHPの記述方法の基本 <?php //ここにコードを書く ?>
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む