- 投稿日:2020-05-31T20:05:38+09:00
【PHP(Laravel)】ControllerからViewにデータを渡す2つの方法
概要
- ビューメソッドを使用してデータを渡すビューを指定する。
- データを渡す。(方法2つ)
1.ビューメソッドを使用してビューを指定する
例)articlesコントローラーのindexファイルを指定する
return view('articles.index')2.データを渡す。(方法2つ)
データが入った変数 $articles をビューに渡す。
1.Withメソッドでデータを渡す。
return view('articles.index')->with(['articles' => $articles]);2.Compact関数でデータを渡す。
return view('articles.index', compact('articles'));
- 投稿日:2020-05-31T18:07:44+09:00
PHPで定数define()を使う方法
定数とは
〇一度宣言すると、後から値を変更できない。(値の変更が可能なのは変数)
〇プログラム内で何度も参照される値で、プログラム実行時に変更する必要のないものに使われる。
〇大文字・小文字どちらでも使用できるが、慣習的に大文字で定義されることが多い。定数のルール
使える文字
- 英数字
- アンダースコア
- 日本語(使用できるが一般的には使用しない)
定義する際のルール
- 先頭数字はNG
- 大文字と小文字は区別される
- 記号で使用可能なのはアンダースコアのみ
- 定義済みの定数は上書きできない
定数の種類
〇PHPでは
- define()
- const
の2種類の定数が使用可能。
define()
define('定数の名前','格納する値');
index.php// 定数を定義 define('MSG01','Emailの形式で入力してください'); define('MSG02','パスワードが正しくありません'); echo MSG01; //「Emailの形式で入力してください」が出力されます。 echo MSG02; //「パスワードが正しくありません」が出力されます。 // 同じ定数名で再定義 define('MSG01','文字数オーバーです'); // 定数は上書きされません echo MSG01; // 「Emailの形式で入力してください」が出力されます。
- 投稿日:2020-05-31T17:53:36+09:00
Laravelでメモリリーク??? 実はそんなわけなかったというしょうもない話
タイトルで若干ネタバレしてますが、ほんとしょうもない話です。ただ、おそらく同様のことで悩まれている方が何人かいるようなので、記事にしてみます。最後の方にちょっとした知見もありますが、ほぼ読み物です。
ちなみにSQSキューワーカーでメモリリークが起きるという記事がQiitaにありますが、今回の記事はこの件と直接関係はありません。
参考)
https://qiita.com/sh-ogawa/items/d64cafce2a2646b7abc6単純な処理でなぜか延々と膨れ上がるメモリ使用量
Laravel 6.xでデータベース(今回はMySQLですがこの話に関係はない)に数万行のデータをインポートしようと試みたある日のことでした。CSVファイルから1000行ずつデータを読み出して1行ずつインサートするという
手抜き超簡単なプログラムです(Laravel Excelを使用)。インポートプログラムが完成して数万行あるCSVファイルを食わせてバッチを実行したところ、数千行まで処理が走った瞬間にPHP Fatal error: Allowed memory size of xxx bytes exhausted.「ああん? いやいや、たかが数千行でメモリ食い潰すほどのことはなかろう。てか、1000行ずつデータとってBULK INSERTすらもせずゆっくりインサートしてるのにどこでこんなにメモリなんか使ってるんだ??? ははーん・・・・、これはなんかメモリリーク的なことが起きてるのでは????」
そもそもPHPでは意図的にメモリを確保したり解放したりなんてまずしませんし、メモリリーク的なことが起きるとしても循環参照が起きるなどでかなりレアケースではありますが…。以下を参考。
【PHP7.4新機能】弱参照(WeakReference)とGCとメモリリークについて整理したよ!
https://qiita.com/miracle-FJSW/items/f35c3e90a5d14eb6eba3なんて変に勘ぐってしまったのが事の始まりでした。
プロセスのメモリ使用量を監視してみると、確かに徐々にメモリ使用量が膨れ上がり、1分間くらいで数十MBずつくらい物理メモリ(RES)が盛り盛りと増えていくのです。これは何事か!?
4000行くらい入れただけで436MBも使っちゃってる・・・さらっと調べてみてもどうも同様のケースは見つけられない
データを読み込んで、そのデータをDBにインサートするだけという普通のことをしているだけなので、さすがに調べたら見つかるだろうと思ったのですが、どうにも見つかりません。でてくるのは「クエリログがメモリを食い潰しているのでそれを切れ!(
\DB::connection()->disableQueryLog();
)」的な記事がちらほら出てくるのですが、どうもLaravel5.5時代の話のようです。
参考
Memory leak on database insert function
https://github.com/laravel/framework/issues/30012今はデフォルト設定でそのようなことは起きない模様。
ただ、DBのインサートをする行だけコメントアウトしてプログラムを実行すると、たしかにメモリ使用量は増えないので、Eloquentあたりになにかバグでもあってそれを踏んでいるのだろうか?なんてこの時点では思ってしまいました。
Laravel Telescope の存在に気づく
こまったなぁ、と思いつつ解決できないこと数か月・・・(一時的にphp.iniの設定をいじり、メモリがっつり増やせばデータは全件入るのでめちゃくちゃ困ってるわけではなかった)。
ある日、ぼんやりとプロジェクトファイル全体を眺めていたら、Laravel Telescopeを入れていることにふと気づきました。今までまったく使ってないのになんでこんなもん入れてるんだ? なんて思いつつ、すごく嫌な予感がしました。Laravel Telescopeをご存じでない方に、説明ページの冒頭を引用させていただきます。
Laravel TelescopeはLaravelフレームワークのエレガントなデバッグアシスタントです。Telescopeはアプリケーションへ送信されたリクエスト、例外、ログエンティティ、データクエリ、キュージョブ、メール、通知、キャッシュ操作、スケジュールされたタスク、さまざまなダンプなどを提示します。TelescopeはLaravelローカル開発環境における、素晴らしいコンパニオンです。
あー、これは危険な香りがプンプンする!!!ということで、これを無効にする設定(.envに
TELESCOPE_ENABLED=false
)をいれてphp artisan config:cache
したあとにスクリプトを実行すると・・・ はいビンゴでした。君か・・・ 数か月も見つけられなかったよ・・・
Laravel Telescope の一部機能を無効にする方法は色々ある模様
上の例では機能全体を無効にしましたが、一部機能だけ無効にすることもできます。詳しくはLaravel Telescopeのドキュメントを見ていただくといいと思いますが、今回の場合だと、Queryワッチャーをオフにすればメモリの使用量は大幅に減ります。ただ、Queryワッチャー以外でもメモリは使用しているので、ちょろちょろとメモリ使用量が増えてはいきます。
コード内の一部のみLaravel Telescopeを無効にしたい場合は
use Laravel\Telescope\Telescope; //〜略〜 Telescope::stopRecording(); //Laravel Telescopeでメモリ食いの処理 Telescope::startRecording();という感じで書けばメモリ問題も上手く捌けるようです。
参考)
Query builder memory leak on large insert
https://github.com/laravel/framework/issues/27539
↑
この記事はLaravel Telescopeの件で気づいた後に見つけたけど、やっぱりメモリリークって勘違いするよなぁw結論
Laravel Telescopeはメモリ食うから気をつけろ。
そして、入れたことを忘れるな(普通は忘れないよねw)
- 投稿日:2020-05-31T17:51:17+09:00
AWS 上の ALB の HealthChecker に 200 を返す方法
AWS 上の ALB のターゲットの Moodle で HealthChecker に認識させることはできないのは、config.php が読み込んでいる lib/setuplib.php でリダイレクトしているからで、ターゲットでは 303 になりうまくいきません。
config.php の最上部で、以下のように記述すれば、200 を返す事ができます。
コツは、lib/setuplib.php を読み込む前に処理を入れることです。$http_user_agent = $_SERVER['HTTP_USER_AGENT']; if (strstr($http_user_agent, "ELB-HealthChecker")) { echo "ok"; die; }
- 投稿日:2020-05-31T15:03:00+09:00
phpのcURL、SplFileObjectでsslエラーが出たときに試したいこと
あぁ、休日の一覧データが欲しい。
欲しい、
欲しい、別のサーバ(内閣府)からcsvで取得してみる。
せっかくなのでcurlとSplFileObjectの2方法で試す。$url = 'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv'; # curl $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); # SplFileObject $file = new NoRewindIterator(new SplFileObject($url));curlは$dataに設定されない。(errnoは35)
SplFileObjectはエラーが発生。PHP Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too smallcurl_errno([35] => 'CURLE_SSL_CONNECT_ERROR')
調べて見つけたページ
ふーん。。。接続先の鍵が短いのか?(たぶんopensslのバージョンが古いかなにか。)
なら短い鍵でも大丈夫なようにすれば良さそう。
オプションを調べる。curl_setoptにCURLOPT_SSL_CIPHER_LISTを発見。
stream_context_createのsslオプションにciphersを発見。sslオプションを設定してみる。
$url = 'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv'; # curl $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); $data = curl_exec($ch); curl_close($ch); #SplFileObject $ctx = stream_context_create([ 'ssl' => array( 'ciphers' => 'TLSv1' ) ]); $file = new NoRewindIterator(new SplFileObject($url, 'r', false, $ctx));できた!
内閣府のsslキーって短いんだ。。。大丈夫なのか?
終わり
- 投稿日:2020-05-31T13:25:00+09:00
Laravelでメール送信する
前提条件
eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っていますGmailのアプリパスワード取得
今回はLaravelからGmailを使ってメールを送信しようと思います
そのためにGmailのアプリパスワードを取得します(1) googleアカウントにアクセス
(2) セキュリティをクリックし2段階認証プロセスをONにする
(3) セキュリティをクリックしアプリパスワードをクリックする
(4) パスワードの取得
アプリを選択→メール
デバイスを選択→その他(名前入力) 適当な名前を入力する
生成をクリック表示されたパスワードをメモしておく
SMTPサーバの情報を設定
/sample/.envを編集
‥‥ MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=XXXXX@gmail.com MAIL_PASSWORD=XXXXXXXXXX MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=XXXXX@gmail.com MAIL_FROM_NAME="sample sender" ‥‥MAIL_USERNAME、MAIL_FROM_ADDRESSは送信元のGmailアドレス
MAIL_FROM_NAMEは送信者名
MAIL_PASSWORDは先ほど取得したアプリパスワード(半角スペースはいらない)ここで設定した値は/sample/config/mail.phpで使われます
Mailableクラス作成
(1)コマンドラインで
cd sample
php artisan make:mail SampleMail
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/app/Mail/SampleMail.phpが現れます(2) SampleMail.php修正
SampleMail.php<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class SampleMail extends Mailable { use Queueable, SerializesModels; public $sample; private $imgName; private $imgMineType; private $imgData; public function __construct($sample, $imgName, $imgMineType, $imgData) { $this->sample = $sample; $this->imgName = $imgName; $this->imgMineType = $imgMineType; $this->imgData = $imgData; } public function build() { return $this->view('sample.mailContentHtml') ->text('sample.mailContentText') ->subject('sample mail') ->attachData( $this->imgData, $this->imgName, [ 'mime' => $this->imgMineType, ]); } }変数宣言
$sample
、$imgName
、$imgMineType
、$imgData
を追記
public変数はメール本文のview内で使用できるようになります
コンストラクタを変数受け取れるように修正
buildメソッド実装
viewはメール本文HTML用。後でmailContentHtml.blade.phpを作成します
textはメール本文HTML用。後でmailContentText.blade.phpを作成します
subjectはメールタイトル
attachDataは添付ファイルControllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpに下記を追記
use App\Mail\SampleMail;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
(2) /sample/app/Http/Controllers/SampleController.phpにmailメソッドを追記
public function mail() { $stream = Storage::readStream('sample.png'); $imgData = stream_get_contents($stream); fclose($stream); Mail::to("XXXXXXXXXXXXXXXX@gmail.com") ->cc("XXXXXXXXXXXXXXX@gmail.com") ->bcc("XXXXXXXXXXXXXXXXX@gmail.com") ->send(new SampleMail('sample text', 'sample.png', 'image/png', $imgData)); return view('sample.mail'); }Storageクラスは/sample/storage/app配下のファイルを扱えるクラス。どのフォルダを扱えるようにするかは、/sample/config/filesystems.phpで設定されている
Storage::readStream('sample.png')で/sample/storage/app/sample.pngのリソースを取得している
toは送信先
ccはカーボンコピー
bccはブラインドカーボンコピー
sendで先ほど作成したMailableクラスを指定(3) サンプル用の添付ファイル
適当な画像作成ソフトでsample.pngを作成し、/sample/storage/app/sample.pngに保存(4) /sample/routes/web.phpに下記を追記
Route::get('sample/mail', 'SampleController@mail');
viewの作成
(1) /sample/resources/views/sample/mail.blade.phpファイル作成
mail.blade.php<html> <head> <title>sample</title> </head> <body> メール送信しました </body> </html>(2) /sample/resources/views/sample/mailContentHtml.blade.phpファイル作成
mailContentHtml.blade.php<html> <body> <div style="font-weight: bold; color: red;">{{ $sample }}</div> </body> </html>(3) /sample/resources/views/sample/mailContentText.blade.phpファイル作成
mailContentText.blade.php{{ $sample }}Mailableクラスのpublic変数sampleを出力しています。
Mailableクラスのpublic変数はメール本文のviewで使うことができます動作確認
http://localhost/laravelSample/sample/mail
メール送信しましたメールが送信され受信できました
- 投稿日:2020-05-31T10:20:01+09:00
【WSL2】インストールしたての時に開発環境構築時にハマったこと
WSL2をインストール時にすんなりとうまくいったらなにも問題ないのですが、
エラーが出力して原因を探ったり、一見うまくいったように見えても実は間違っていたりと、
使いこなすのがなかなか大変です。
ハマったことを色々書いていこうと思います。Ubuntu 18.04.4 LTSを使用しています。
phpをインストールしてみるとエラーが出力されて、インストールできない
Err:6 http://security.ubuntu.com/ubuntu bionic-updates/main amd64 apache2-bin amd64 2.4.29-1ubuntu4.6 404 Not Found [IP: XX.XXX.XX.XXX 80] Err:7 http://security.ubuntu.com/ubuntu bionic-updates/main amd64 apache2-utils amd64 2.4.29-1ubuntu4.6 404 Not Found [IP: XX.XXX.XX.XXX 80] Err:8 http://security.ubuntu.com/ubuntu bionic-updates/main amd64 apache2-data all 2.4.29-1ubuntu4.6 404 Not Found [IP: XX.XXX.XX.XXX 80]パッケージの更新とアップグレードをしていなかった
sudo apt update && sudo apt upgradeこの後に、もう一度phpをインストールする
参考:
https://docs.microsoft.com/ja-jp/windows/wsl/user-supportこの調子でnodeもインストールしたが、vue.jsの開発環境をうまく構築できない
エラーなどなにも出力されずに、インストールもうまくいったように見えました。
ところが、apt-getに登録されているnodeのバージョンが古いままになっているので、これだと失敗します。作りたい開発環境にあわせてnodeをインストールする。
参考:
https://docs.microsoft.com/ja-jp/windows/nodejs/setup-on-wsl2Ubutu日本語化/英語切り替える
https://www.atmarkit.co.jp/ait/articles/1806/28/news043.html
まとめ
開発環境を作ろうとして調べると、いろんな情報が手に入ります。
そもそもWSL2やUbuntuを理解していないとハマってしまいがちでした。
- 投稿日:2020-05-31T09:40:11+09:00
さくらVPSでLAMP + Wordpress環境を構築する方法まとめ
さくらVPSでLAMP + Wordpress環境を構築する方法まとめ
学習用にさくらVPSでLAMP環境を構築したので、手順をまとめます.
目次
動作環境
OS : macOS Mojave 10.14.6
VPS OS : centOS
手順
さくらVPSの申し込み
さくらのwebサイト>VPS>2週間無料でお試し
にアクセス
サーバをカートに入れ申し込み.メールに記載されているIDとパスワードでログインし,VPSコントロールパネルにログイン
各種設定>OSインストール
*OSをインストールする際にVPSにログインするためのパスワードを入力するので忘れずにメモします.
これでさくらVPSの申し込みからOSのインストールまでが完了です.
ssh接続
つぎにローカルPCからインターネット上のVPSに接続するためのSSH接続の設定手順をまとめます.
1. Terminal起動とroot権限でログイン
手元のMACでTerminalを起動します.
そして以下のsshコマンドで接続します.
パスワードはOSをインストールした際に入力したものです.$ ssh root@VPSのIPアドレス
2. ソフトウエアのupdate
$ yum update
3. 一般ユーザの作成
$ adduser jun1 #user追加 $ passwd jun1 #password設定sudoが使えるように設定
$ visudo
wheel ALL=(ALL) ALL #コメントアウトを外すjun1ユーザをwheelグループに追加
$ usermod -aG wheel jun1 $ groups jun1 jun1 : jun1 wheeljun1でログインできるか確認
$ ssh jun1@VPSのIPアドレス $ パスワード入力4. ssh鍵認証の設定
ローカルのPCのターミナルを起動して実行
MAC$ ssh-keygen -t rsa -v MAC$ ls ~/.ssh config id_rsa id_rsa.pub known_hostssshでVPSに接続
VPS$ mkdir .ssh VPS$ chmod 700 .sshローカルPCからVPSへ公開鍵を転送
ローカルPCMAC$ scp ~/.ssh/id_rsa.pub jun1@VPSのIPアドレス:~/.ssh/authorized_keys MAC$ VPSのパスワード入力鍵を利用してサーバにログイン
ローカルPCMAC$ ssh -i ~/.ssh/id_rsa jun1@VPSのIPアドレスssh接続のセキュリティ設定
1.ポート番号の設定
VPS$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ort #設定ファイルのバックアップ $ sudo vim /etc/ssh/sshd_configPortを検索し、#を消して, 22 -> 56789(任意の番号で可)
2.パスワード認証の無効化
PasswordAuthenticationを検索し、
noに変更3.rootログインの無効化
PermitRootLoginで検索し,noに変更
4.設定ファイルの確認
VPS$ sudo sshd -t #設定ファイルに構文ミスがないか確認.何も出なければOK $ sudo systemctl restart sshd #sshdの再起動5.ファイアウォールの設定
VPS$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-56789.xml $ sudo vim /etc/firewalld/services/ssh-56789.xmlport番号を22 -> 56789に変更
VPS$ sudo firewall-cmd --reload >success $ sudo firewall-cmd --permanent --add-service=ssh-56789 >success $ sudo firewall-cmd --reload >success $ sudo firewall-cmd --list-all >ssh-567896.SSH動作確認
上記で開いていたターミナルを閉じずに別タブを開く
MAC$ ssh -p 56789 -i ~/.ssh/id_rsa jun1@VPSのIPアドレス7. sshをファイアウォールから削除
VPS$ sudo firewall-cmd --permanent --remove-service=ssh $ sudo firewall-cmd --reload最後に念の為、ssh接続できるか確認
MAC$ ssh -p 56789 -i ~/.ssh/id_rsa jun1@VPSのIPアドレスapacheのインストール
VPS$ sudo yum install httpdApacheを起動
VPS$ sudo systemctl start httpd $ systemctl status httpd #Activeと表示されているか確認Firewallの設定
VPS$ sudo firewall-cmd --add-service=http --zone=public --permanent $ sudo firewall-cmd --add-service=https --zone=public --permanent $ sudo systemctl restart firewalldさくらVPSのパケットフィルタの設定
さくらVPSのコントロールパネル>設定>パケットフィルタ>WEBを許可
ブラウザからApacheの動作確認
ブラウザにVPSのIPアドレスを入力し,以下のテストページが表示されればOK
Apacheの自動起動の設定
VPS$sudo systemctl enable httpd権限の設定
ドキュメントルートの所有権をapacheに変更します.
VPS$sudo groupadd web #グループの作成 $sudo usermod -aG web jun1 #グループにユーザの追加VPS$sudo chown apache:web /va/www/html/ $sudo chmod -R 775 /var/www/html/htmlファイルを作成しApacheの動作確認
VPS$ vim /var/www/html/index.html #適当に編集して保存ブラウザから開いて確認
ドメインの設定
ドメイン取得サイトから購入
今回はバリュードメインに会員登録し、購入します。
DNS設定
バリュードメインにログインし、DNSを設定
詳細は各ドメインサイトから確認します.バリュードメインの設定画面a VPSのIPアドレスブラウザにドメインを入力し、表示されるか確認
*DNSの反映には1日かかることもあります.リポジトリの設定
2つのリポジトリをインストールします.
epelリポジトリ(Linuxのリポジトリ)
remiリポジトリ(PHPのリポジトリ)epelリポジトリ
VPS$sudo yum repolist #epelリポジトリがない場合は以下実行 $sudo yum install epelremiリポジトリ
ブラウザからremiリポジトリのURLをコピー
VPS$sudo yum localinstall remiのurl
phpのインストール
インストールできるバージョンを確認
VPS$ yum list available | grep php-php71-common.x86_64を確認
VPS$ sudo yum --enablerepo=remi-php71 install php php-devel php-mysql php-gd php-mbstringApaceh再起動
VPS$ sudo systemctl restart httpdPHPの設定
VPS$ sudo cp /etc/php.ini /etc/php.ini.org #設定ファイルのバックアップ $ sudo vim /etc/php.iniファイルのアップロード上限を変更
php.inipost_max_size = 128M #8M -> 128M upload_max_filesize = 128M #2M -> 128MApaceh再起動
VPS$ sudo systemctl restart httpdPHPの動作確認
/var/www/html/index.php<?php echo 'Hello World';ブラウザにドメイン名を入力し,index.phpを確認する
mysqlのインストール
MariaDBの削除
VPS$ sudo yum remove mariadb-libs $ sudo rm -rf /var/lib/mysqlMySQLインストール
MySQL 5.7をインストールする
VPS$ sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm $ sudo yum install mysql-community-serverMySQLの設定
VPS$ sudo systemctl start mysqld $ sudo cat /var/log/mysqld.log | grep 'temporary password' #初期接続パスワードを確認VPS$ mysql_secure_installation #以下、指示どおり設定していくVPS$ mysql -u root -p #ログインできるか確認文字コードをUTFに変更
VPS$ sudo vim /etc/my.confmy.confcharacter-set-server=utf8VPS$ sudo systemctl restart mysqld自動起動の設定
VPS$ sudo systemctl enable mysqldsslの設定
certbotを利用するためバーチャルホストを設定
VPS$ sudo vim /etc/httpd/conf.d/ドメイン名.confドメイン名.conf<VirtualHost *:80> DocumentRoot /var/www/html ServerName ドメイン名 </VirtualHost>certbotをインストール
certbotのwebサイトからソフトウエアとOSを選択
VPS$ sudo vim install certbot-apache証明書を取得
VPS$ sudo certbot --apache動作確認
ブラウザにドメイン名を入力し、httpsになっているか確認
wordpressのインストール
DBの準備
VPS$ mysql -u root -p mysql> create database myblog; mysql> create user 'myblog_user'@'localhost' identified with mysql_native_password by '任意のpassword' mysql> grant all privileges on myblog.* to 'myblog_user'@'localhost'; mysql> flush privileges;wordpressのダウンロード
VPS$ wget https://ja.wordpress.org/latest-ja.tar.gz $ sudo tart -zxvf latest-ja.tar.gz -C /var/www/ #圧縮ファイルを展開 $sudo chown -R apache:web wordpress/ $sudo vim /etc/httpd/conf/httpd.confhttpd.confDocumentRoot "/var/www/wordpress" <Directory "/var/www/wordpress">ドメイン名.confDocumentRoot /var/www/wordpressドメイン名-le-ssl.confDocumentRoot /var/www/wordpresswordpressの確認
終わりに
今回はさくらVPSにLAMP環境を構築する学習の内容をまとめました。
Linuxコマンドの勉強になりました。
- 投稿日:2020-05-31T07:03:42+09:00
PHPと Vue.jsで簡易掲示板を作ろう〜その2( SCSS編)〜
初めに
前回にの
PHPと Vue.jsで簡易掲示板を作ろう〜その1(PHP編)〜
の続きです。
3つのパートに分けて
1.PHPでとりあえず動く掲示板を作る
2.SCSSで簡単なデザインを作る←今回はここ
3.Vue.jsで少しリッチな動きをつける目次
・このパートでの完成イメージ
・HTML部分の変更の記述
・SCSSの記述
・まとめこのパートでの完成イメージ
・ボタンホバー時
・テキスト入力欄フォーカス時
・投稿されたメッセージのホバー時
今回はSCSSでこれらのスタイルをつけていきます。
HTML部分の変更の記述
前回のHTML部分にclassと一つだけdivをつけていきます
<div class="container"> <h1 class="title">簡易掲示板へようこそ(XSS対策済み)</h1> <!-- 投稿ボタン --> <form method="post" class="text-form"><!-- 中の投稿ボタンが押されたらPOSTのリクエストを送る --> <!-- NEW class追加 --> <input class="text" type="text" name="text"> <!-- NEW class追加 --> <input class="submit" type="submit" value="投稿する"> <!-- NEW class追加 --> </form> <div class="frame"> <!-- NEW 追加 --> <table class="contents"> <!-- NEW class追加 --> <?php foreach((array)$all_data as $post_data) : ?> <tr> <form method="post"> <td class="text"> <!-- $post_data[2]は$post_text(テキストデータ) --> <!-- NEW class追加 --> <?php echo h($post_data[2]); ?> </td> <td class="date"> <!-- $post_data[1]は$date(日付) --> <!-- NEW class追加 --> <?php echo $post_data[1]; ?> </td> </form> </tr> <?php endforeach; ?> </table> </div> </div>SCSSの記述
style.scss.container { border: 1px solid black; text-align: center; // 入力欄と投稿ボタン & .text-form { // text入力欄 & .text { width: 70%; padding: 11px 15px; font-size: 16px; border-radius: 3px; border: 2px solid #ddd; box-sizing: border-box; // フォーカス時 &:focus { border: 2px solid #ff9900; z-index: 10; //前面に表示 outline: 0; // 元からある線を消す } } // 投稿ボタン & .submit { border-radius : 5%; font-size: 16px; text-align: center; cursor: pointer; padding: 9px 15px; background : #000066; color : #ffffff; transition : .3s; box-sizing: border-box; // ホバー時 &:hover { border: 2px solid #000066; color: #000066; background: #ffffff; } } } // 枠線 & .frame { margin-top: 15px; border: 13px solid #993300; // メッセージと日付 & .contents { width: 100%; background: #009900; // メッセージ & .text { font-size: normal; border: 1px solid white; border-radius: 5px; // ホバー時 &:hover { background: white; } } // 日付 & .date { font-size: normal; float: right; } } } }まとめ
今回のパートではSCSSで少しだけ見た目をつけました!なんの計画もなしにスタイルを作成するとデザインが壊滅することが分かりました?
次回はVue.jsでリッチな動きをつけます。
この記事を見てくださったあなたの成長を応援します!!
ーーーー
次のパート:coming soonこの記事もいかがですか?
・初心者に捧げる〜PHPを使って九九の表を作ろう〜
・Vue.jsで作る!自動保存するToDoリスト~その1~
・初心者に捧げるハンバーガーメニューの作り方
- 投稿日:2020-05-31T02:57:42+09:00
PHPで閲覧中のデバイスの画面サイズを返す。
下記サイトサンプルを修正、実行後リダイレクトしデバイスのwidthとheightを取得。
https://stackoverflow.com/questions/23239157/get-browser-width-using-phpget_screensize.php <?php session_start(); if(isset($_POST['width'])){ $_SESSION['screen_size'] = array(); $_SESSION['screen_size']['width'] = intval($_POST['width']); $_SESSION['screen_size']['height'] = intval($_POST['height']); } if(!isset($_SESSION['screen_size'])){ ?> <html> <head> <script> function getSize(){ document.getElementById('inp_width').value=screen.width; document.getElementById('inp_height').value=screen.height; document.getElementById('form_size').submit(); } </script> </head> <body onload='getSize()'> <form method='post' id='form_size'> <input type='hidden' name='width' id='inp_width'/> <input type='hidden' name='height' id='inp_height'/> </form> </body> </html> <?php }else{ //var_dump($_SESSION['screen_size']); header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/screensize_out.php'); } ?> screensize_out.php <?php session_start(); echo "閲覧中のディスプレイサイズは下記の通りです!!<BR>"; echo "width: ".$_SESSION['screen_size']['width']."<BR>"; echo "hight: ".$_SESSION['screen_size']['height']; ?>