PHP関連のことを調べてみた2021年08月10日

PHP関連のことを調べてみた2021年08月10日

基礎③〜for文、while文〜 php

# はじめに
前回はif文について触れたので今回はfor文とwhile文について触れてみたいと思います。

# 内容

## for文について
・for文とは繰り返し処理を行うことを意味します。

例:

“`php
for($i = 1; $i=100; $i++){

echo $i;

}
“`
結果: 123456789101112131415…..100

1〜100までが出力されることになります。

上記の例を説明すると
・$i = 1 というのは1から始まります。
・$i=100は100までループするよというループ条件を表しています。
・$i++は条件を満たすまで更新し続けることを表しています。

##while文について
・while文もfor文と同様に繰り返し処理ができる1つです。

例:

“`php
$i = 1;

while($i <= 100){ echo $i; $i++ } ``` 結果: 123456789101112131415.....100 上記の例を説明すると ・$iに1という変数を代入する ・($i <

元記事を表示

PHP フレームワーク比較 

#■背景
普段、私自身LaravelやCakePHPを使用しているが、PHPのフレームワークは数多く存在する。
下記、調査しましたので記事に残して置きます。
・フレームワークの種類
・GitHubスター数の比較
・案件数
・Google Trendsによるトレンド比較

#■PHPフレームワークの種類
PHPには下記フレームワークが存在します。
 ◆Laravel
Laravelは2011年にリリースされたPHPのフレームワークです。
PHPフレームワークの中では後発ながら、その手軽さや扱いさすさから人気を集め、今やPHPの中でも代表的なフレームワーク。
 ◆CakePHP
CakePHP は2005年に登場したフレームワークです。
「Ruby on Rails」の概念を踏襲したフレームワークとなっていて、Railsの良い部分をPHPで実現したフレームワークだと言えるもです。
 ◆Symfony
Symfonyは、2005年に登場したMITライセンスに基づくオープンソースのPHP5用フレームワークです。SymfonyはMojaviから派生し、Ruby用フレームワークRuby on Ra

元記事を表示

mb_convert_encoding()のHTML-ENTITIESの変換は逆変換できない

[`mb_convert_encoding()`](https://www.php.net/manual/ja/function.mb-convert-encoding.php)の第2引数に`HTML-ENTITIES`を指定すると、文字列中の漢字やひらがななどをHTMLの文字実体参照・文字数値参照(` `,`€`みたいなやつ)に変換してくれます。

「漢字やひらがななど」とあえてふわっと書きましたが、正確にはASCII (0x00-0x7F) の範囲外の文字が変換対象のようです(このあたりドキュメントが見つからなかったのでおそらくですが)。

逆に、第3引数に`HTML-ENTITIES`を指定すれば、文字実体参照などをデコードできます。

“`php

元記事を表示

PHP、CakePHP、LaravelのそれぞれのCSRF対策

# CSRFとは
CSRF(Cross Site Request Forgery)とは、Webアプリのユーザー自身が、意図しない処理を実行するようにする脆弱性または攻撃手法のことです。
悪意のあるWebサイトにスクリプトや自動転送(HTTPリダイレクト)を仕込むことによって、ユーザーに別のWebサイト上で何らかの操作を意図せずに行わせる攻撃となっています。

## CSRF対策をしていないサイトの例と攻撃方法
今回、会員サイトのパスワード変更画面を例にします
ログイン後にパスワード変更を行う場合を想定しております
(今回テーマから逸れてしまうので、ログイン画面とパスワード変更完了時のサニタイズ処理は省略しております)。

### パスワード変更_入力画面
“`php

パスワード変更

プログラミング初心者がphp artisan db:seedしたらエラーが出た

はじめに
—–

現在プログラミングスクールにてGitHubを用いて共同開発中なのですが
相方が作ってくれたコードをローカルでマージして、DBにシーダーファイルのデータを登録しようとしたところ
エラーが発生しました。
※Laravelのverは6.20.16です。

エラーの内容
—–
“php artisan db:seed“をしたところ下記のようなエラーが出ました。
![シーダーエラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1478204/d7262b12-f255-abf5-01ba-1fc70418afb2.png)

“UsersTableSeederクラス“が存在しないよと書かれていますが
ちゃんとフォルダの中には存在しています笑

困ったので色々と調べたところ下記のコマンドが有効でした。

“`
composer dump-autoload
“`

こちらを打ち込んだところ“Generating optimized autoload files“となり

元記事を表示

【講義11.php_ファイルアップロード】詰んだことでパーミッションの理解が深まった話

#本記事について
今後の開発の参考になればと思い、PHPについて、講義での実体験をまとめたもの。

##PHPのファイルアップロードについて
PHPではformを利用して画像ファイルの受け取り、アップロードが可能。
アップロードの流れは以下の通り
1.formからアップロード
2.tmp領域(一時保存場所)に保存
3.サーバの保存領域に移動
4.データベースに保存場所のパスを登録

##詰んだ内容
ファイルの権限設定をし忘れたことに気づかず、コードの記述ミスやパーミッション権限を疑ってハマった。
パーミッションはアップしたデータの修正、削除のみに使うため、疑うべきところが謝っていた。

##試したこと、疑ったコード
コメントしているfilename_to_save関数まではvar_dumpで確認できた。
そのため、パーミッション部分(if (move_uploaded_file以降以下)を疑った。
以下は、実際に記述したコード。

 

“`php
$img = $_FILES[‘img’][‘name’];
$img_data = “”;

if (isset($_FILES[‘i

元記事を表示

setErrors 上書き出来ない cakePHP

# はじめに
気力と体力がほとんどないのでちょっと乱雑な文章になりそうですが、
共有したいことは共有出来ているはずなので優しい心でお願いします!:bow:

バリデーションエラーの一部をなかったことにしたいけど少し戸惑ったのでここに残しておきます!

ちなみになぜそうしたかったかですが、Formでエラー表示しないとしてもエレメントで確認すると表示に違いがあるな〜〜〜と思い、これじゃだめだ!!!!だめなんだ!!!となりました、、

ちなみに表示させたくなかった文言は『このメールアドレスはすでに使用されています。』です。どのメールアドレスが登録されているかバレちゃうので、、:rolling_eyes:

# では早速

“`PHP

$fix_errors = $user->getErrors();
$fix_errors[‘email’] = null; //キーごと無くすunsetでは上手くいかなく戸惑いました、
$user->setErrors($fix_errors, true); //メソッド確認したら上書きするかの指定しないといけなかったのね、、と

“`

ちなみに

元記事を表示

GETとPOSTとは PHP

#■はじめにリクエスト行う方法を認識する。
●ブラウザのアドレス欄にURLを直接入力する。
●お気に入りからアクセスする。
●ページ内のリンクやボタン、画像などをクリックする。
●入力フォームに情報を入力して送信ボタンをクリックする。
などがあります。

#■リクエストを行う際サーバーに渡したいデータ
●見たい商品や動画のID
●ページ移動する際のページ番号
●ログイン画面に入力するメールアドレスやパスワード
●注文画面に入力する名前や住所などの個人情報

#■GETとPOSTというのはリクエストの方式の1つです。

####▼GET
リクエストを行う時にURLの末尾にデータ名を記載しくっつけて送る方法です。
?以降にデータが記載している。

■できない事
URLに長さの制限がある。長い文章や画像のようなデータ量が多いデータをURLにくっつけて送る事はできない。
個人情報やパスワードなどの情報をURLに記載されていたらまずい。

▼使い分け
画面表示のために必要
表示したい画像や動画のID、ページ番号など

GETは取得するためのリクエスト

“`
/search?id=なになに
`

元記事を表示

queryとprepareの使いわけ php

#■queryとprepareとは
PHPからデータベースを操作する手順です。

①データベースに接続
②実行したいSQL文をセットする。
③SQLに対してパラメーターをセットする。
④実際にSQLを実行する。
⑤結果を取得する。
⑥データベースから切断する。

###▼PHPからデータベースを操作するには簡易版と詳細版がある。
#■簡易版にはqueryをつかう。
上記の②③④の手順を簡易的に一括で行えるのがquery。

▼使い分け
SQL文の中に変動値がない場合queryを使う。

“` php
//変動値がないSQL文 例
$sql = “SELECT * FROM テーブル名”;
“`
▼使い方
セットから実行まで一括で行なっている。

“` php
$dbh->query($sql);
“`

#■詳細版にはprepareを使う。
上記の手順通り個別に行う。②③④に個別にメソッドが用意されている。
②prepareメソッド
③bindValueメソッド
④executeメソッド

▼使い分け
SQL文の中に変動値がある場合prepareを使う。
プレースホルダを使

元記事を表示

プレースホルダ php

#■プレースホルダとは
SQLインジェクション(DBに対して第三者が不必要なSQLを実行する事)等から守る方法
開発者の想定しない命令テーブルのデータ消去等を悪意のある第三者にさせないために使う。

万が一不正な値が入力されても第三者にSQL文の命令はできなくなる。

###▼SQL文の中にPHPの変数を直接書いてはダメ!!!
SQLインジェクションが容易に行えるようになってしまう!!

“` php
//■ダメな例
$sql = “SELECT * FROM user WHERE name= ‘$name'”;
“`

#■プレースホルダを使用する。
①変動箇所を:で指定。文字列カラムでもシングルクオテーションは不要。
プレースホルダの名前はカラム名と同じにしておくと分かりやすい。

“` php
$sql = “SELECT * FROM user WHERE name= :name”;
“`

②プレースホルダに実際の値をバインドする。
実際にプレースホルダを使えるようにここで指定してる。

“` php
$sql = “SELECT * FROM user WHER

元記事を表示

PHP7.4でzipがインストールできない

PHPのインストールでzip(**php74-php-pecl-zip**)のインストールに依存関係の問題で少しはまったのでメモ。php -m で「zip」が表示されてない状態。

環境:PHP/7.4 OS/Amazon Linux2

結論からいうと、Amazon Linux2のリポジトリが邪魔して、依存関係を解決できない状態になってました。

###1.**libzip-1.3.2-1.amzn2.0.1.x86_64**が邪魔してインストールできない

“`
[root@ ~]# yum install php74-php-pecl-zip

–> トランザクションの確認を実行しています。
—> パッケージ php74-php-pecl-zip.x86_64 0:1.19.3-2.el7.remi を インストール
–> 依存性の処理をしています: libzip5(x86-64) >= 1.8.0 のパッケージ: php74-php-pecl-zip-1.19.3-2.el7.remi.x86_64
–> トランザクションの確認を実行しています。
—> パッケー

元記事を表示

【Laravel】APIテストで自分で用意したテスト用ファイルをアップロードする。

## 背景

Laravelでファイルアップロードをテストする際には`UploadedFile::fake()`でダミーデータを送信することができる。[^1]

“`php
public function test_import_success()
{
Excel::fake();
Storage::fake();

$response = $this->post(route(‘users.excel.import.upload’), [
‘users’ => UploadedFile::fake()->create(
name: ‘users.xlsx’,
mimeType: ‘application/vnd.openxmlformats-officedocument.spread’
)
]);

$response->assertOk();
}
“`

しかし、CS

元記事を表示

未経験の学生が2ヶ月の共同開発を終えての感想

#はじめに
**・投稿した経緯**
 6月から2ヶ月間、一人の方と私立探求学園の共同開発に参加しました。結論として
とても良い経験で、僕と同じ未経験の方にはとてもお勧めできる内容でした。
振り返りと学習したことのアウトプットも兼ねて今後参加したいと思う方の参考になればと思い
ます。

#目次
・参加前の状況
・参加した理由
・共同開発の概要(簡単に)
・共同開発で身についたこと
・共同開発で苦労したこと
・全体的な感想
・まとめとこれから

#参加前の状況
・大学2年生20歳
・2ヶ月間別のプログラミングスクールに通い、文法などの基礎学習と
 個人アプリをテンプレートの教材をもとに作成した程度
・個人で1からアプリを作るといった経験はなし

#参加した理由
・Laravelのアプリを開発できる
・実務では必須のチーム開発を経験することができる
・一緒に開発する仲間がいる
・講師の方に質問、相談できる環境だった

#共同開発の概要(簡単に)
・2ヶ月間で掲示板アプリとECサイトの作成
・今回の開発人数は2人(基本は3〜4人程度)
・週2回のMTG
・Gitでバージョン管理
・GitHu

元記事を表示

【Laravel8・PHP8】PHPUnitのテストケースの中でseedingすると「PDOException There is no active transaction」とエラーが発生する。

## 背景

テストでマスターデータが必要になった。

テストケース中でシーディングするときに詰まったのでメモ。

## 環境

– Laravel 8.40
– PHP 8.0
– MySQL 8.0

## 事象

テストケースの中でシーディング実行するとエラー発生

“`
$ php artisan test ./tests/Unit/UserTest.php

FAIL Tests\Unit\UserTest
⨯ seed

• Tests\Unit\UserTest > seed
PDOException

There is no active transaction

at vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:279
275▕ */
276▕ protected function performRollBack($toLevel)
277▕ {

元記事を表示

PHP $this::と$this->何が違う?

Qiita投稿 #28

今回は・・・
sqlの基本を復習した時の備忘録です。

今回は生成したオブジェクトの接続方法についての備忘録です。
チュートリアル等を進めていると`$this->`とか`$this::`を使うことが多いと思いますが、この違いはなんでしょうか?
実際に動かして確認してみます。

“`php
class Hoge
{
const hello = “こんにちは”;

public function hello(){
return “こんにちは”;
}
}
“`

上記のサンプルはHogeクラスにhello定数とhello関数を定義しています。ちなみにクラス内に直接`$hello`変数を作るとエラーになります。
それではそれぞれの挙動を確認します。
###$this->hello()

“`php
$hoge = new Hoge();
echo $hoge->hello();
//結果:こんにちは
“`
`$hoge`はオブジェクトを指しますので**`$this=$hoge`**です。
上記の結果から **->**

元記事を表示

区間和問題 paiza問題集

# はじめに
ここ数カ月、毎日こつこつ仕事終わりに勉強しています(主にpaizaスキルチェック、問題集)
そんな中で、今まであまり気にしていなかった累積和の考え方について自分用に記録する。

# 対象の問題
[Paiza問題集「区間和 PHP編」](https://paiza.jp/works/mondai/query_primer/query_primer__interval_sum)

## 問題・条件・入力値
> 〇問題文
長さ N の数列 A と、K 個の区間 (l_1,r_1) … (l_K,r_K) が与えられるので、各区間についての A の区間和 A_{l_i} + … + A_{r_i} (1 ≦ i ≦ K) を求めてください。

>・1 行目では、配列 A の要素数 N と与えられる整数の数 K が与えられます。
・続く N 行では、配列 A の要素が A_1 から順に与えられます。
・続く K 行では、和を求めるのに使う区間の値 l , r が与えられます。

> 〇条件
・1 ≦ N , K ≦ 100,000
・-100 ≦ A_i ≦ 100 (1

元記事を表示

composerを用いてライブラリ(Faker)を使ってみた

今回はcomposerを使って便利なライブラリ「Faker」を使ってみたいと思います。

#前提条件
composerのインストールまでは完了している事とします。

composerバージョンチェック
`composer –version`

“`
Composer version 2.0.8 2020-12-03 17:20:38
“`

任意のディレクトリに移動
`cd <任意のディレクトリ>`

composer.jsonを作成する
`composer require fakerphp/faker`

“`
Using version ^1.15 for fakerphp/faker
./composer.json has been created
Running composer update fakerphp/faker
Loading composer repositories with package information
Updating dependencies
Lock file operations: 3 installs, 0 updates, 0

元記事を表示

【レビュー指摘】phpunitで書いたテストコードのレビューで受けた指摘をまとめてみる。

最近は、Laravelで作られたアプリのテストコードをphpunitで書いています。

今回はphpunitのテストコードについてレビューを受けた際の指摘内容について、二度と同じ指摘をされないようにするためにまとめておこうと思います。中にはphpunitの書き方への指摘というよりはプログラムの書き方自体への指摘や、プロジェクト固有の指摘もあるので、そこら辺は参考程度に見てもらえると嬉しいです。

## 指摘1 :man: <( expectとactualの順序は正しくね ) 第一引数が`expect`、第二が`actual`。 ```.php $this->assertSame($expect, $actual);
“`

## 指摘2 :man: <( プロパティはprotectedに。型の説明も記載しましょう ) テストクラスのプロパティには`protected`を使う。 読みやすいように変数の型も記載する。 **■Before** ```.php private $UserProfileModel; ``` ■**After** ```php protected Us

元記事を表示

データベースからデータを取り出す PHP/MYSQL

#■はじめに
PHPでデータベースと接続しておく
以前に記事を書いたのでそちらを参照ください。
https://qiita.com/pito555/items/77d2f141846a40d8c659

#■①SQL文の準備
$sqlとしてSQL文を入れる変数を用意

●下記SQL文の意味
左から読むとわかりやすい!
テーブル名 FROM(から) *(全部) SELECT(選択)

“` php
$sql = ‘SELECT * FROM テーブル名’;
“`

#■②SQLの実行
$SQL文を実行するために記述します。

▼ $dbh 以前データベースに接続するために書いたPDOを格納しているもの
▼ query 問い合わせる
▼ $sql 実行するSQL文
▼ $stmt PDOStatementとして実行される。

“` php
$stmt = $dbh->query($sql);
“`

#■③SQLの結果を受け取る。
▼fetchAll
全ての行を返す。

フェッチモードを使いデータの結果を受け取る。
PDOでデータベースからデータを取り出した時に配列の形式を指

元記事を表示

In PackageManifest.php line 122: Undefined index: nameでなんか詰まった話

composer2にしたら起きている問題らしい
とりあえずやったことをメモメモ

なんかkey:generateしたらこれが出た

“`
In PackageManifest.php line 122: Undefined index: name
“`

composerのバージョンが1 から 2にしたときに起きたみたい。
合わせいないといけないものだったため、composerを1にする方法で解決した。

バージョン確認して

“`
composer –version
“`

とりあえず 下げてみる
下げるコマンド

“`
composer self-update –1
“`

ちなみに2にする場合はコマンドの1を2にすればいい

以上!!!!

元記事を表示

OTHERカテゴリの最新記事