20210112のPHPに関する記事は7件です。

DLしたLaravelの環境構築方法(Linux)

 【前提条件】composerがインストール済み Lamp環境が正常に構築できている。

    githubからDLしたLaravelプロジェクトをとりあえず動かせる
    用にするまでの設定します。 

1、laravelプロジェクトをDLしてみる

ギットハブにアクセスしてとりあえず適当なLaravelのプロジェクトをDLしてみましょう【プロジェクト名testlaravel】
laravel1.png

2、composerをインストールする

DLしたtestlaravelプロジェクトのserveを起動しようとするとこのようなエラーが出てきます。

/var/www/html/testlaravel$ php artisan serve
こんなエラーが出てきます↓
PHP Warning:  require(/var/www/html/testlaravel/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/testlaravel/artisan on line 18

Warning: require(/var/www/html/testlaravel/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/testlaravel/artisan on line 18
PHP Fatal error:  require(): Failed opening required '/var/www/html/testlaravel/vendor/autoload.php' (include_path='.:/usr/share/php') in /var/www/html/testlaravel/artisan on line 18

Fatal error: require(): Failed opening required '/var/www/html/testlaravel/vendor/autoload.php' (include_path='.:/usr/share/php') in /var/www/html/testlaravel/artisan on line 18

Composerが入っていないためLaravelプロジェクトが起動できないのでcomposerをインストールします

/var/www/html/testlaravel# composer install

3、composerのインストールが完了したら

composerのインストールが完了したら早速testlaravelプロジェクトを立ち上げてみましょう

 /var/www/html/testlaravel# php artisan serve

立ち上がることは立ち上がりますが、ここで必ず500サーバーエラーが発生します。
500serve.png

4、.envファイルとAPP_KEYの設定を行う

ここでエラーが発生する要因としてlaravelに.envファイルが作成されていない
APP_keyが作成されていない事が要因でサーバーエラーが発生しています。

まずは.envファイルを作成してみます。コマンドで以下の用に入力します

cp .env.example .env

この段階ではまだenvファイルは作成されてませんのでAPP_KEYの作成をしてみます

php artisan key:generate

vi .envと入力して無事.envファイルが作成されていれば完成です
↓こんな奴です

APP_NAME=
APP_ENV=
APP_KEY=
APP_DEBUG=
APP_URL=

LOG_CHANNEL=

DB_CONNECTION=
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
(以下略)

改めてtestalaravelプロジェクトを立ち上げてみていつものあのページが出てきたら成功です。
thelaravel.png

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

順番通りにnewしないと落ちる謎コード

問題のコード

a.php
<?php
require_once('b.php');
class A {
    public function __construct(){
        echo("A construct call\n");
    }
}

// この順番でコールしないと落ちる
$a = new A();
$b = new B();
$c = new C();

// この順番でコールすると落ちる
//$a = new A();
//$c = new C();
//$b = new B();
b.php
<?php
class B {
    public function __construct(){
        require_once('c.php');
        echo("B construct call\n");
    }
}
c.php
<?php
class C {
    public function __construct(){
        echo("C construct call\n");
    }
}

実行結果

$ php a.php
A construct call
B construct call
C construct call
$ php a.php
A construct call

Fatal error: Uncaught Error: Class 'C' not found in a.php:16
Stack trace:
#0 {main}
  thrown in a.php on line 16

解説

Bのコンストラクタにcのrequireが入っているのでBのインスタンスを立てないとCが呼び出せないようになっている。
今回の例で言うと関係のある3ファイルを見ればすぐ分かるが、実際のコードになり呼び出し関係が複雑になると状況が掴めず
「順番通りにnewしないと落ちる謎コード」
となる。

回避策

  • オートロードを使いましょう
  • 正しい位置・分かりやすい位置でrequireしましょう
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

プログラムを少しかじった私がバックエンドエンジニアとして働くためにECサイトを作り始めてみた その⑤

対象者

・バックエンドエンジニアを志す人
・web開発初学者
・ECサイトを作成しようと思っている人
・初学者の勉強仮定を見たい方

はじめに

こんにちは!
この投稿はその④の続きです。

前回は年末年始を挟んであんまり実装が進まない状態でした。
実装する機能の洗い出し、スケジュール、実装を進めていきました。
並行で行っている開発との兼ね合いもあり今回の更新内容は少なめです。

目次

1.今回の作業報告
2.反省点
3.次回までの目標
4.最後に

1.今回の作業報告

まずは改めて実装する機能を洗いだしてスケジュールを立て直しました。

ざっくり機能を洗い出してスケジュールを立てています。
スケジュール崩れは間違いなく起こると思うので毎日スケジュールを引きなおすように設定しました。
スクリーンショット 2021-01-12 7.47.08.png

ECサイトの作成としてメールでのログイン機能の実装に取り掛かりました。
現在は実装途中です。さっそくスケジュールが崩れましたので調整しなおします。

2.振り返り
作業項目を改めて書き出した事により作業内容が明確になったのは良かったかと思います。
項目の抜け漏れはあるかと思いますが、それは実装進めていくなかで分かってくるのかなと思います。

スケジュールを立てたことにより多少やることが明確になりました。
ただ、作業ボリュームが不明確の中で立てているのであんまり当てにならないのかな
と思っています。今回はペースメーカー的な役割で利用するようになると思います。

締め切りよりかなり前に作業が終わるように設定していますが、結局、ギリギリまでかかるのかなと思っています。

3.次のステップ:引き続き実装!
機能ごとに予定を立てたのであとは実装を進めるだけかなと思います。
次回は実装結果の報告と振り返りがメインになりそうです。

4.次のステップ:最後に
今回のECサイトの制作にあたりqiitaの記事をはじめて書くことを習慣にしました。

・作業途中の自分の思考の振り返りことにより反省点の明確化になっている
・思い出すことによる記憶の定着が起こっている
・反省点を踏まえてのアクションプランへの転換のしやすい

などを感じており書いてよかったなと思っています。

文章の見直しなどほとんど行っておらず個人の雑記のようになっているので
読まれる投稿にして技術コミュニティに貢献していければと思っています。
(文章の書き方もちゃんと振り返らないと良くならないだろうな・・)

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

グーテンベルクのカラーパレットにコーポレートカラーを設定

wordpressのグーテンベルクにはカラーパレットがついていますが、毎回コーポレートカラーコードを設定するのは面倒!という事で、カラーパレットに色を登録する方法を実装しました。

プラグインを追加すれば簡単に実装出来るのですが、セキュリティ対策で極力プラグインの仕様を抑える!を目標にwordpressの設計をしているので、今回もプラグインなしで実装していきます。

カラーパレットをカスタマイズ出来るプラグイン"Central Color Palette"

このプラグインでカラーパレットをカスタマイズ出来るようですが、今回はプラグインを使わない方法を紹介しています。
image.png

カスタマイズする箇所

wordpressグーテンベルクのカラーパレットです。基本的な色が設定されています。
テーマによって、入っている色が異なるかもしれません。

今回は、このカラーパレットにコーポレートカラーをカスタマイズして、色を使いやすくする方法を紹介します。
image.png

デフォルトのカラーパレットから、よく使う色だけに変更
image.png

追加する色

以下の3色を追加したいと思います。
他の名前と被らないように、Corporate Colorという事で【c】をNAMEなどにつける事にしました。

image.png
6A3906
NAME:c-brown

image.png
0E9665
NAME:c-green

image.png
E7D7BA
NAME:c-pink

finction.phpに追記

以下のコードを追記しました
※function.phpに追記する場合は子テーマを作ってから作業をしてくださいね。

function my_color_set()
    {
    add_theme_support('editor-color-palette', array(
        array(
            'name' => __('c-brown','C茶色') ,
            'slug' => 'c-brown',
            'color' => '#6A3906',
        ) ,
        array(
            'name' => __('c-green','C緑') ,
            'slug' => 'c-green',
            'color' => '#0E9665',
        )
,
        array(
            'name' => __('c-pink','C薄ピンク') ,
            'slug' => 'c-pink',
            'color' => '#E7D7BA',
        )
    ));
    }

add_action('after_setup_theme', 'my_color_set');

カラーパレットが書き換わりました。

以下はテーマのカラーパレットに色を追加する方法ですが、実行させるタイミングを合わせないとうまくいなかいみたいです。

function aktk_add_my_editor_color_palette() {
    $palette = get_theme_support( 'editor-color-palette' );
    if ( ! empty( $palette ) ) {
        $palette = array_merge( $palette[0], array(
        array(
            'name' => __('c-brown','C茶色') ,
            'slug' => 'c-brown',
            'color' => '#6A3906',
        ) ,
        array(
            'name' => __('c-green','C緑') ,
            'slug' => 'c-green',
            'color' => '#0E9665',
        )
,
        array(
            'name' => __('c-pink','C薄ピンク') ,
            'slug' => 'c-pink',
            'color' => '#E7D7BA',
        )
        ) );
        add_theme_support( 'editor-color-palette', $palette );
    }
}

add_action( 'after_setup_theme', 'aktk_add_my_editor_color_palette', 11 );

style.cssに追記

クラス名
has-c-【functionでつけたスラッグ名】-color
で文字色

has-【functionでつけたスラッグ名】-background-color
で背景色を設定します

.has-c-brown-color{color:#6A3906}
.has-c-brown-background-color{background-color:#6A3906}

.has-c-green-color{color:#0E9665}
.has-c-green-background-color{background-color:#0E9665}

.has-c-pink-color{color:#E7D7BA}
.has-c-pink-background-color{background-color:#E7D7BA}

まとめ

カラーパレットを書き換えるのではなく、追加したかったのですがうまく動きませんでした。
3色では逆に使いにくいので、よく使いそうな色をもう少し追加しておこうと思います。

ドキュメント

https://developer.wordpress.org/block-editor/developers/themes/theme-support/

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

PHP strpos()関数の注意点

文字列の中に特定の文字列があるかどうかの判定を行うためにstrpos()を使用するが、注意が必要である。

strpos()

if(strpos($対象となる文字列, $特定の文字列)){
    //省略
}

返り値

特定する文字列があった場合

 →最初の文字のインデックス番号
  例:helloの特定文字列、ellの返り値は1

特定する文字列がない場合

 →(bool)false

注意(これが今回のメイン)

strpos('hello', 'ell')
の返り値は1。
しかし
strpos('hello', 'hell')
の返り値は0になる。(当然だけど)

だからif文を使用する場合、'hell'という特定の文字列があったとしても、
結果はfalseになる。(返り値が0だから)

解決策

返り値はint型もしくはfalse(bool型)だから、この両方をtrueの結果にしてあげる必要がある。

$i = 'hello';
if(strpos($i, 'hell') !== false){
    echo 'including';
}else{
    echo 'not including';
}

//結果 including
$i = 'hello';
if(strpos($i, 'ell') !== false){
    echo 'including';
}else{
    echo 'not including';
}

//結果 including
$i = 'hello';
if(strpos($i, 'abc') !== false){
    echo 'including';
}else{
    echo 'not including';
}

//結果 not including
$i = 'hello123';
if(strpos($i, 'o1') !== false){
    echo 'including';
}else{
    echo 'not including';

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

データベースサーバー

起動

sudo service mysqld start

起動状態確認

sudo service mysqld status

停止

sudo service mysqld stop

データベースサーバへの接続

mysql -u root

データベースサーバからの切断

mysql> exit

データベースの作成

mysql> CREATE DATABASE ???;

データベース一覧の確認

mysql> show databases;

データベースを削除

mysql> DROP DATABASE ???;

操作するデータベースを選択

mysql> USE ???;

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

データベースとは

データベースは、たくさんのデータを一元管理し、データの保存、取得することに特化したソフトウェア(ミドルウェア)。データベースは データを永続的に保存 するのに適している。アプリケーションはデータを処理しますが、保存することができない。

最も利用されている種類はリレーショナルデータベース。リレーショナルデータベースを管理するシステムを、リレーショナルデータベース管理システム(RDBMS)

リレーショナルデータベースの特徴には下記の3つ。

・テーブルは、カラム(縦)とレコード(横)で構成される
・カラムに、保存されるデータの制約を設定できる
・データの保存や取得などの処理に、SQLという言語を使用する。

ユーザーテーブル(users)から全員分の名前(name)を取得するには、下記のような命令文。

select name from users;

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