PHP関連のことを調べてみた2020年01月09日

PHP関連のことを調べてみた2020年01月09日

LaravelのMigrationは書いた順に実行されるわけじゃない

LaravelのMigrationが記述した順番に実行されると勘違いして嵌ったので、メモとして書いておきます。

# LaravelのMigrationは書いた順に実行されるわけじゃない
Laravelで以下のようなMigrationファイルを作成するとします。すこし複雑ですが、aというカラムをprimary keyではなくし、代わりにbというカラムをprimary keyにする、そのためにnullableの条件を変える、というようなMigrationですね。

“`php:2020_01_09_000000_sample.php

元記事を表示

PHPでbool値をechoするとtrueは1に、falseは出力されない

とあるシステムのテンプレートをみてたら下記の様にbool値をecho してるプログラムを発見しました。

“`php

個人的に直近で探究したいギジュツ!

こんにちは!

先日、[PHPの言語仕様の理解を深める特殊な立ち回り](https://qiita.com/huuya/items/f9bedb6b600c55613c4b)でコアな内容を記しましたが、直近で私自身が探究したいギジュツを備忘録代わりにまとめておきます!

## 暗号学を知る

PHPの[mt_rand()](https://www.php.net/manual/ja/function.mt-rand.php)で扱われているメルセンヌ・ツイスターが以前より、暗号化の処理として扱うことは望ましくないとされてきました。
先日、その疑似乱数生成器(PRNG)の一種であるメルセンヌ・ツイスターでブルートフォースを介すこと無くシード値を取得できてしまうことが発見されました。

[Breaking PHP’s mt_rand() with 2 values and no bruteforce](https://www.ambionics.io/blog/php-mt-rand-prediction)

これにより、メルセンヌ・ツイスターによって暗号化した値を復号化することは容易である

元記事を表示

phpでapiを切りの良い時刻までキャッシュする

##まず、何故キャッシュする必要があるのか
例えばなにもキャッシュせずに天気apiを使用して天気を表示するプログラムを作って自分のサイトで一般公開したとしよう。

ユーザー1がアクセスしてきました。
ユーザー1⇄サーバー⇄別のサーバー

数秒後にユーザー2がアクセスしてきました。
ユーザー2⇄サーバー⇄別のサーバー

また数秒後にユーザー3とユーザー4が同時にアクセスしてきました。
ユーザー3⇄サーバー⇄別のサーバー
ユーザー4⇄サーバー⇄別のサーバー

もう分かりましたよね?**無駄すぎる**
天気apiなんか数時間に一回程度しか結果が変わらないのに数秒単位でアクセスするのは無駄すぎるのです。

もう1つの理由は、利用するユーザーが増えてくると結果をキャッシュしないとapiサーバー(他人のサーバー)に負荷を掛けることになるのです。
あまりにも負荷を掛けすぎると、利用停止等の罰が下されます。

そうならない為にもキャッシュしておく事は非常に重要です。

Q.**じゃあどうやってキャッシュするの?**
A.少しコードを**(/・ω・)/追加ッ!追加ッ!**するだけです!

サンプルコード

元記事を表示

イメージファイルをターミナル用の色付アスキーアートに変換するWebAPIを公開しました。

*こちらのエントリは、自分のブログサイトの1エントリのコピーです。*

* [イメージファイルをターミナル用の色付アスキーアートに変換するWebAPIを公開しました。 – ゲンゾウ用ポストイット](https://genzouw.com/entry/2019/09/27/131222 )

はじめに

ANSI エスケープシーケンス といって、Unix系のターミナル上に色付きの文字列を出力することができます。

例えば、 echo コマンドでは出力したい文字列の前に \e[35m (数値部分は任意。)といった制御文字を出力させることでターミナルに出力される文字列に色を付けることができます。

$ echo '\e[35mHello\e[0m! \e[31mWorld\e[0m!'
Hello! World!

さくっとLaravel+Nginx+MySQL環境をDockerに構築するテンプレート

# TL;DR
コードだけ欲しい方は[こちら](https://github.com/sskmy1024y/Dockerfile-Template-for-Laravel)を参照。テンプレート化してあるので、そのままお使いいただけます。

# はじめに
今回の記事は、[こちらの記事](https://qiita.com/A-Kira/items/1c55ef689c0f91420e81)を参考にさせていただいた際にちょっと気になった点を修正したものを載せただけです。
仕組みとか詳しく説明いただいています。アリガタヤ :pray:

# 何が気になったのか
__インストーラがアップデートしてハッシュ値が変わると使えなくなる__という問題。
https://getcomposer.org/download/ に書かれているクイックインストールスクリプトをそのままDockerfileに記述してあるためですね。

ダウンロードページの方にも

>WARNING: Please do not redistribute the install code. It will change wit

元記事を表示

PHP(Laravel)のZipArchiveを使って、S3にある画像をzipダウンロードする。

# 実現したいこと
S3にある画像をまとめてダウンロードする。JavaScriptで無理やりやる方法もあるが、
ブラウザ側でアラートが発生するため、zipダウンロードを選択しました。

# 環境
– macOS Mojave 10.14.6
– Laravel6系
– PHP7.2

# 流れ
– S3を利用する設定をする。
– S3->サーバーに画像をダウンロード
– ZipArchiveを利用して画像をzipファイルにまとめる
– ダウンロードレスポンスとして、ブラウザに返す。

※当初、ZipArchiveよりも少し簡単に利用できそうな、
Zipperというパッケージの利用を考えていましたが、Laravel6系に対応していませんでした。

# 実装
※現時点では、自身のMacbook上でのみ動作を確認していおります。

## S3を利用する設定をする。

envファイルに設定情報を記述します。

“`:.env
AWS_ACCESS_KEY_ID=***
AWS_SECRET_ACCESS_KEY=***
AWS_DEFAULT_REGION=***
AWS_BUCKET=

元記事を表示

PHPでCSVダウンロード

# PHPでCSVダウンロード
PHPでCSVダウンロードする際のモジュール

## UTF-8で出力する場合
“`php
function export($file_name, $data)
{
$fp = fopen(‘php://output’, ‘w’);

foreach ($data as $row) {
fputcsv($fp, $row, ‘,’, ‘”‘);
}
fclose($fp);
header(‘Content-Type: application/octet-stream’);
header(“Content-Disposition: attachment; filename={$file_name}”);
header(‘Content-Transfer-Encoding: binary’);
exit;
}
“`

## SJIS-winで出力する場合
“`php
function export($file_name, $data)
{
$fp = fop

元記事を表示

PHP入門

JavaやJavaScriptなどと並行して学習を進めており、基礎的な文法は省略しているところも多いが、初心者がゼロからphpに関して学習した内容を以下に記述しています。

#PHPプログラミングの手順
  ①エディタを使用してプログラミングを記述
  ②任意の名前.phpで保存
  ③保存したphpファイルをサーバーへアップロード

#環境構築
  今回はMAMPをインストールして利用した。

#PHPの書き方
  

#出力の方法
   **echo** ”Hello World”;
  または、
   **print** ”Hello World”;

  改行したい場合
   **echo** ”1行目<br>2行目”;

#変数
  変数名の前には**$**をつける
  大文字と小文字は区別される
  変数名の先頭に数字、_以外の数字は変数名に使えない
 例)
  $ABC $abc $Abc

####代入
  変数に値を代入するには「**=**」を使う
  $a = 1;
  $a = “文字列”;  

元記事を表示

初心者がLaravelをインストールしてみた!

[前回](https://qiita.com/youth_case/items/6e3459533b2563824e05)にて下調べを行ったLaravelを、早速インストールしてみました!
#スペック
OS:Windows10 Home 64bit
xampp Version: 7.3.9
Composer version:1.8.6

#xamppとComposerのインストール
Laravelは公式サイトからダウンロードしたりするのではなく、Composerにコマンドを打ち込んでインストールします。
その為、Laravelを使うにはxamppとComposerがインストールされている必要があります。
私はLaravelを使い始める前に既にインストールした為、説明は割愛させていただきます。
こちらの記事を読んで下さった方でまだxamppとComposerをインストールされていない方は、下記の公式サイトからダウンロードして下さい。

xampp:https://www.apachefriends.org/jp/index.html

Composer:https://getcompos

元記事を表示

Why PHP Array!?!? バグを生みそうなPHPの配列の仕様

#すべてが1になる

“`php
“a”,
“1” => “b”,
1.5 => “c”,
true => “d”,
);
var_dump($array);
?>
“`

この結果ってなんになると思います?

“`
array(1) {
[1]=>
string(1) “d”
}
“`

Why PHP Array!?
なんでこうなるの!?
どうやら「1」「”1″」「1.5」「true」は、すべて「1」と見なされるみたい。
結局の所

“`php
“a”,
1 => “b”,
1 => “c”,
1 => “d”,
);
var_dump($array);
?>
“`

ってことらしい。
まぁ`1==true`は成り立つしね、まぁまぁ。
「1.5」は意味わからんけど。

#マイナス思考

“`php
-10

元記事を表示

PHPで出力が始まってるかどうか調べる

PHPでheader()を利用する際、既にechoやprintなどで出力が始まっているとエラー(Warning)が出る場合がある。header()の前に出力が始まってるかどうか判定したい思って調べた。

次のようにするとバッファされてるせいかエラーが出ない。

“`php:no_err.php

元記事を表示

csvから取得した値を1件ずつ処理して出力

“`PHP

元記事を表示

?【CakePHP2】配列で指定した値に対してINまたはNOT INの複数件アップデートを行う

## 環境
PHP 7.2.21
CakePHP 2.10.18
MySQL 5.7.27

## やりたいこと
CakePHP2のupdateAll()を用いると条件式や任意のSQLにてbulk updateができますが
配列になっている値をカラム指定してINやNOT INで指定してupdateを行う方法を試したい

## やったこと
updateAll()の第一引数は配列にて「’カラム名’ => 値」のSET句を指定
INの第二引数は「’カラム名’ => 更新対象」を指定する
NOT INの場合は’NOT’ => の配列にして条件を一段ネスト

尚、modifiedは自動で更新されないのでこちらも必要に応じて第一引数に追加してやります

### 更新するテーブル(Hogehoge)

|id|content|del_flg|modified|
|:——:|:——:|:——:|:——:|
|1|’test’|0|’2020-01-08 10:00:00’|
|2|’neko’|0|’2020-01-08 11:00:00’|
|3|’hoge’|0|’

元記事を表示

Magento上のフォームでJSバリデーションを駆使する

Webアプリケーションで避けて通れないものといえば「値チェック」。サーバーサイドで行うものはもちろん必要ですが、データを送信する前にJSでチェックするほうがUI/UX的に良いのは当たり前でしょう。
Magentoでは1系ではprototype.jsをベースにしたバリデーションが実装されていました。
2系はjQueryベースになっていますが、概ね同じ方式が使えます。

#MagentoのJSバリデーションが定義されている場所
Magento2系の場合、同じ様な定義が以下の箇所にあります。チェック処理の形式も似ていて、紛らわしいので注意が必要です。

– lib/web/jquery/jquery.validate.js
– lib/web/mage/validation.js
– lib/web/mage/validation/validation.js
– lib/web/mage/backend/validation.js
– lib/web/prototype/validation.js
– vendor/magento/module-ui/view/base/web/js/lib

元記事を表示

?【Laravel6】MariaDBから取得したJSON型の任意の値をBladeで表示する

## 環境
PHP 7.3.10
Laravel 6.5.0

## やりたいこと

MariaDBのに下記のようなデータがあり、
その内のcontentカラム(JSON型)のデータからvalueの内容である
「テストの内容です?」や「2の内容!!」をBladeテンプレートに直接表示したい

|id|content|del_flg|
|:——————:|:——————:|:——————:|
|1|{“data_kind”: “1”, “value”: “テストの内容です?”}|0|
|2|{“data_kind”: “2”, “value”: “2の内容!!”}|0|
|3|{“data_kind”: “1”, “value”: “削除済データ???”}|1|

本来であればVue.jsやReactとかで取得データを処理して表示するのが賢い方法だと思うが
それ以前の環境とかで無理やり表示したいことがあった

## やったこと

COntrollerでは普通にJSONの文字列としてデータ取得しでViewに渡す
Vie

元記事を表示

PHP HTMLのformから飛ばされた内容を受け取って表示する

# 目的

– HTMLのformタグ内でのinputとtextareaでの入力を受け取って出力する方法をまとめる。

# 具体的な例

– 下記にformタグの部分を抜粋したHTMLの内容を記載する。

“`html



“`

– 下記に前述のformタグから送られてきたデータを受け取り表示するPHPの内容を記載する。

“`php
echo $_POST[“name”];
echo $_POST[“body”];
“`

元記事を表示

perlなどのsprintf()で整数のゼロ埋めと少数の有効数字の設定を同時にしたい

## 実現したいこと
3.5を003.500のように設定したい

“`perl
# 答え
my $text = sprintf(“%07.3f”, 3.5); # -> 003.500となる
“`

## 1. 整数のゼロ埋め
例)3を003のようにゼロ埋めしたい

“`perl
my $text = sprintf(“%03d”, 3);
“`

## 2. 少数の有効数字の設定
例)3.5を3.500のようにしたい

“`perl
my $text = sprintf(“%.3f”, 3.5);
“`

## 3. 1と2を組み合わせたい
例)3.5を003.500のように表現したい
以下のように1と2の書式を単純に組み合わせた場合、意図した形式にならない。

“`perl
# 意図した形式にならない例
my $text = sprintf(“%03.3f\n”, 3.5); # -> 3.500となる
“`
以下のように設定することで意図した形式になる。

“`perl
# 意図した形式になる例
my $text = sprintf(“%07.3f”, 3.5

元記事を表示

【未経験エンジニア2日目(復習①)】URLの.htmlの削除

# URLの.htmlの削除

## やったこと
・URLの.htmlの削除

## 学んだこと
###hraccessの存在
###RewriteRule
 ディレクトリー内のURLを正規表現を用いて定義をすることができる
###RewriteCond
 RewriteRuleの条件を絞るこむために記載される(RewriteRuleの直前に記載される) 

## 実際のコード

“`.htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
“`

参考サイト

.phpや.htmlなどの拡張子をURL表示させない方法
.htaccess でのリダイレクト(転送)設定の書き方

元記事を表示

PHP 関数の作り方

# 目的

– PHPでの関数の作り方をまとめる

# 書き方の例

– 下記に関数の定義方法を記載する。

“`php
//関数の定義(引数の有無に関わらず括弧をつけて変数を定義する)
function 関数名(第一引数を格納する変数A, 第二引数を格納する変数B){
関数内で実行する処理;
}

//関数の呼び出し(定義時に引数が格納される変数の定義の有無に関わらず括弧をつけて呼び出す)
関数名(第一引数, 第二引数);
“`

– 関数内での結果を変数に格納したい

“`php
//関数の定義
function 関数名(第一引数を格納する変数A, 第二引数を格納する変数B){
return 任意の処理;
}

$foo = 関数名(第一引数, 第二引数);
“`

元記事を表示

OTHERカテゴリの最新記事