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

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

PHP7 正規表現 preg_match(): Compilation failed: invalid range in character class at offsetについて

#preg_match関数で正規表現を用いた文字列検索でエラー
PHP7.3以降、正規表現を用いたpreg_match()関数

`preg_match(‘|http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?|i’,$line,$data)`

こんな形でURL文字列検索を行ったら以下のようなエラーが、、、
preg_match(): Compilation failed: invalid range in character class at offset

#解決法
正規表現の書き方自体は間違ってないはず(?)と思ってgoogle大先生に聞いてみると、
StackOverflowで以下のような回答を見つけました。
https://stackoverflow.com/questions/24764212/preg-match-compilation-failed-invalid-range-in-character-class-at-offset

まぁ要するに、PHP7.3以降挙動が変わったらしく、-(ハイフン)にはエスケープが必要になった

元記事を表示

Dockerのコンテナビルドでphp-radisのインストールに失敗する

Dockerでコンテナをビルドする中でphp-radisをインストールする際に下のエラーが出た
“`
E: Failed to fetch http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/p/php-redis/php-redis_4.2.0-1+ubuntu16.04.1+deb.sury.org+1_amd64.deb 404 Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?

“`
php-redisのバージョンが新しくなり古いファイルが見つからないようだ
Dockerfileでアップデートしたものをインストールする場合は同じRUNの中でアップデートインストールしないいけないらしい
http://docs.docker.jp/engine/articles/dockerfile_best-practice.html
なのでDockerfileの記述は下のように
“`doc

元記事を表示

vimで.phpファイルに書いたhtmlを自動でインデントする方法

“`
” Better indent support for PHP by making it possible to indent HTML sections
” as well.
if exists(“b:did_indent”)
finish
endif
” This script pulls in the default indent/php.vim with the :runtime command
” which could re-run this script recursively unless we catch that:
if exists(‘s:doing_indent_inits’)
finish
endif
let s:doing_indent_inits = 1
runtime! indent/html.vim
unlet b:did_indent
runtime! indent/php.vim
unlet s:doing_indent_inits
function! GetPhpHtmlIndent(lnum)
if exists(‘*Htm

元記事を表示

PHP 復習2

[PHP復習](https://qiita.com/aliceroot0678/items/f421e5bcef4bb30ab716)の続き
ちょっとだけ

#関数
自分で作るやつと組み込み関数がある
組み込み関数は調べたら色々出てくるので割愛。(組み込み関数忘れてた:sweat_smile:)
`rand(a,b)`とかあったよ!これは数字a〜bの間の整数をランダムにかえしてくれるよ!
##関数の作り方
`function 関数名(){処理} `
##関数の呼び出し
関数名();

#formの受け取り
“`html


“`

“`php:受け取るphp側

echo $_POST[キー名];
“`

`$_POST`の中身は連想配列になっている。
キー名:name、値:実際にフォームに入力した値(value)
となるようになっている。
なので、nameの中身は受け取るときにわかりやすいものにしとくとよい。
キー名は

元記事を表示

[PHP] Warning: “continue” targeting switch is equivalent to “break”. Did you mean to use “continue 2”? という警告

##どんな警告か?
この警告は、forループ内のswitch文で「**continue**」を記述した場合に表示されます。
switch文内部では「**continue**」が「**break**」と同じ動作となるそう。
以下、公式リファレンスを引用

>注意: PHP では、continue の動作に関しては switch 文がループ構造とみなされます。
>continue に引数を渡さなかった場合の動きは break と同じですが、間違いの元なので警告が生成されます。
>switch がループ内にある場合、 continue 2 とすると、外側のループの次回の処理から続行します。

引用元:[PHP公式リファレンス](https://www.php.net/manual/ja/control-structures.continue.php)

##じゃあどうすればいいの?
forループ内のswitch文で「**continue**」を使用したい場合、
「**continue 2**」と指定します。
これで、「**

元記事を表示

PHP復習

最近、あまりPHP書いてないので、なまらないように見直す。
ついでに後で見返すようにまとめ!:dancer_tone3::dancer_tone3::dancer_tone3:

#文字列結合
`.`

“`php
$fruits = ‘orange’;
echo $fruits.’ジュース’
“`

#変数展開
`”{$変数}”`
:warning:出力するときは**ダブルクオーテーション**で囲む。
シングルクオーテーションだと{$変数}がそのまま文字列として出力される

“`php
$food = burger;
echo “{$food}ください”;
“`
##かつ、または
かつ`&&`
または`||`
#switch文
あんまり使わない?らしい

“`php
switch (条件式){
case 0:
echo ‘大吉です。’;
break;
case 1:
echo ‘中吉です。’;
break;
default:
echo ‘凶です。’;

元記事を表示

項目をランダム選択しその結果(good/bad)もランダムにする。ただしbadの上限あり

こんにちは。@mashiです。

この記事は一応この記事( https://qiita.com/mashi/items/93a088c90839251ef820 )の続きです。

【大項目/小項目/結果(good/bad)という表があり、各大項目にて1つの小項目を選択し、good/badもランダムにする】というものです。

文章だけではよく分からないため、下記の出力イメージです。
技術・勤怠・コミュニケーションにてそれぞれ小項目1つをランダムで選び、goodかbadもランダムにするというものです。
badの個数も0~1の間でランダムです。

|大項目 |小項目 |good |bad |
|—|—|—|—|—|
|技術 |速度 |||
|技術 |品質 |〇||
|技術 |納期 |||
|技術 |ドキュメント |||
|勤怠 |遅刻 ||〇|
|勤怠 |勤怠忘れ |||
|コミュニケーション|挨拶|||
|コミュニケーション|タスク共有|〇||
|コミュニケーション|会議内容|||

前回のコードを用いて実装すると下記のような感じになりました

元記事を表示

PHPのインクルード4つを解説

#まえがき、インクルードとは?

PHPにはインクルードという便利な処理があります。

**各htmlページに同じ処理を何度も書く手間を省いて、共通事項になっている処理を別所から参照できる機能**でもあるし**1つのページの複雑化/長文化を避ける為に別所にソースコードを仕分ける機能**とも言えます。
特に大きくなってしまったウェブページ/サイトを修正する手間を効率化してくれるものと言えるでしょう。

しかし、このPHPのインクルード処理は4種類もの処理があります。そしてそれらは微妙に使い方が違ってきますのでそれを解説したいと思います。

読み込みエラーがある場合で、その後のデータを処理する/しない。
そして、1度だけ読み込む/何度でも読み込む
の、違いで4種類に分かれています。

#「include」…読み込みに失敗しても処理継続するインクルード

例えば、includeを使って、「text.php」を開こうとした際に、「text.php」が無いと言う時、そのIncludeはエラーと処理して、その後の処理を読み込んでいきます。
下記の例だと、

“`php:test.php

元記事を表示

PHP入門する①

少しPHPに関して勉強しようと思います。
というのも、今までRubyonRailsで個人開発していたのですが、
ほかの言語の特性も把握しておこうかな、ということで公式リファレンスを読みながらメモ書きしていく事になった次第です。

PHPタグ

“`

“`
このPHPタグで囲んだ範囲がPHPコードということになります。
ファイル内のどこに書かれていてもPHPがこのタグを探してくれるので、どんな形式のドキュメントにも埋め込むことができます。

またドキュメントの最後の行が終了タグ

“`
?>
“`

この場合は省略することが望ましいです。
この終了タグの後に空白や文字列が入るとPHPが予期せぬ動作をする可能性がある為です。

条件式
PHPにももちろん条件式はあります。
if文を見てみます。

“`

“`

一般的なif文だと思います。
$foo == 100が真なら、echo “fooは100

元記事を表示

重複しないランダムな数値を取得する

こんにちは。@mashiです。

重複しないランダムな数値が欲しいなーと思いましたので作りました。

ちなみに、重複してよいのであればこれですよね。

// 連続している数値候補の中から重複する可能性がある値を取得する
for ($i = 0; $i < 3; $i++) {
  $num = random(0, 1);
}

重複しない数値が欲しい際というとif文かなと最初は思ったのですが、改修の際にあちこち触ることになりそうAnd見づらそうと思ってしまいモヤっとしたので、違う観点で作りました。というか、そもそもこういう関数って存在しないのかな。

// 連続している数値候補の中から重複しない値を取得する
function randomNotDuplicate ($from_num, $to_num, $count) {
$number_array = range($from_num, $to_num);
$random_array = array();
shuffle($number_array);
$random_array =

元記事を表示

PHPでSingly linked list

まじめにデータ構造などの学習をしてなかったんですが、最近ちょっとずつやり始めたので、業務で使用しているPHPでアウトプットしてみます。

# Singly Linked list

データを持つノードが連なったデータ構造で、各ノードは次or前のノードへのリンクを持っています。
いくつか種類がありますが、今回扱う Singly linked listは、データと次のノードへのリンクのみを持つノードが連なったものです。

![Singly-linked-list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329016/37797c5c-157a-d301-212e-54b77f8d18c3.png)

# PHPで実装してみる

## クラス定義

まずノードのクラスを実装。
データ用フィールドと次のノードへのリンク用のフィールドを持っています。

```php

元記事を表示

【Vagrant】VagrantでLAMP開発環境を整える(centos+apache+MySQL+PHP)

自分用のメモとして残します。

#やり方
##1.VagrantのBoxダウンロード~mysql、apache、phpインストール

いろいろ探しましたが、Masaki Yamadaさんのスタッフブログに投稿されたものが一番わかりやすく且つ丁寧で、初心者でも構築しやすいと思います。

[(外部サイト)VirtualBox + Vagrantで「CentOS7 + LAMP環境」を構築する](https://www.willstyle.co.jp/blog/2832/ "(外部サイト)VirtualBox + Vagrantで「CentOS7 + LAMP環境」を構築する")

手順通りであれば http://192.168.33.10/phpmyadmin にアクセスしてPHPMyAdminが表示されれば、ひとまずLAMP環境がきちんと構築できています。
尚デフォルトドキュメントルートは`/var/www/html`になっています。

尚、CentOSのタイムゾーン、mysqlのmy.cnf調整等は必要なので、後述で調整の仕方を説明します。

##2.調整等
###ホストOS

元記事を表示

VSCode の php-cs-fixer で使っている設定

## このページについて
PHP を VSCode を使用して開発する事がことが多く、
現場が変わる度に設定を調べ直すのが面倒だったので、ここにメモがわりに書くことにする。

```settings.json
"php-cs-fixer.onsave": true,
"php-cs-fixer.executablePath": "${extensionPath}/php-cs-fixer.phar",
"php-cs-fixer.lastDownload": 999999999999999,
"php-cs-fixer.rules": {
"@PSR2": true, // PSR-2 Coding Style Guide に即した形式にフォーマットする
"no_unused_imports": true, // 使用していない use 句を削除する
// "ordered_imports": true, // use 句をアルファベット順にソートする
"array_syntax": { "syntax": "short" }, // 配

元記事を表示

PHP超初心者が書くPHP超初心者向け文法まとめ

#はじめに-この記事の投稿理由-#
ProgateでPHPを学び始めて、いざアプリ開発!!!と意気込んだわ良いものの「あれ、このやり方どうやるんだっけ?」と毎回Progateを開いて確認・ネットで調べる日々。最低限の基礎だけでもサラッと見直せる一覧があったら楽だと思いこの記事を書きました。同じような思いの方の少しでも役に立てれば幸いです。また、私自身はプログラミング初心者です。もし誤った情報があればご指摘していただけるととてもありがたいです。

○この記事の想定対象読者
・過去の自分
・PHP 超初心者:

では、本題へ入ります↓↓↓

##PHPの書き方・出力方法##

```PHP:qiita.php
//書き方
//phpの命令は~の部分に記述します

//出力方法

元記事を表示

PHPのerror_log関数を使用しての仮想環境vagrantへのpath

自分用忘備録
var_dump等で値を確認できない時。
仮想環境vagrant上で開発時にデスクトップ上にerror_logファイルを作成しようとしたが、仮想環境のpathが違い少しハマった。
### 経緯
画面がエラーで表示されず、値を返さない裏側の処理があり、
デバッグで変数情報をファイル出力するerror_log関数で追っていくことにした。

開いているディレクトリは権限があり、
error_log(print_r($Data,true),"3","/vagrant/system/debug.log");

$Data = 値を確認したい変数をセット
/vagrant/system/ = vagrant上のpath(ディレクトリsystem以下にファイルが作成される)
debug.log = 新規ファイル名(なんでも構わない)

ファイルが作成された後は同じファイル名で再度叩くと同ファイルに値の内容が上書きされる。
## vagranのpath確認コマンド
```
$vagrant up

$vagrant ssh(vagrantへログイン)

[vagrant@localh

元記事を表示

WordPressのREST APIにアイキャッチ画像のURLを追加する

WordPressのREST APIでアイキャッチ画像のURLを取得して表示しようとしたら画像のIDしか返ってこなくて微妙だったのでURLが返ってくるようにカスタマイズしたメモ。

# 環境

- WordPress 5.5.1
- PHP7.4.0

# コード

``` functons.php
add_action('rest_api_init', 'customize_api_response');
function customize_api_response() {
// アイキャッチ画像のレスポンスを追加する投稿タイプ
$post_types = ['hoge', 'fuga'];

foreach ($post_types as $post_type) {
register_rest_field(
$post_type,
'thumbnail',
array(
'get_callback' => function ($post) {
$thumbnail_id = get_po

元記事を表示

PHP で湯婆婆を実装してみる (OOP)

## はじめに

様々な言語で湯婆婆を実装するのが流行っているようなので PHP で実装しました。

作った後で[既に PHP で実装している人がいる](https://qiita.com/hinatao3o/items/52b8d457c650c3e00ea4)ことに気が付きましたが、
なるべくオブジェクト指向っぽく表現した版という名目でここに供養します。

- 元ネタ: [Javaで湯婆婆を実装してみる \- Qiita](https://qiita.com/Nemesis/items/c7192a7c510788d2cba2)
- まとめ: [【毎日自動更新】湯婆婆 LGTMランキング! \- Qiita](https://qiita.com/torifukukaiou/items/c8361231cdc56e493245)

## 実行環境

- PHP 7.4

## 登場するクラス

- メインクラス: Main (プログラムの入り口)
- 契約書クラス: Contract
- 湯婆婆クラス: Yubaba
- あなたクラス: You (作中で言うところの千尋のこと)

#

元記事を表示

PHPプロジェクトで導入すると便利そうなツール5選

# はじめに
PHPプロジェクトで導入すると便利そうなツールをまとめてみました。

## 自動テスト
### PHPUnit
PHPでの単体テストと言えばPHPUnitが最も有名かと思います。
やり方についてはググればいくらでもでてきますので、ここでは個人的所感を書いていきます。

###### 手動テストが不要になるわけではない
自動テストを頑張って書いていればある程度の動作保証にはなると思いますが、それによって手動テストが完全に必要なくなるかと言われればそうはならないと思っています。

###### ただ凡ミスは防げる
リファクタリング時にテストを実施した際に「あ、やべここ壊れれてた。危ない危ない。」というのは何回かありました。

###### 複雑なパターンの検証には便利
少しずつ条件を変えてテストしなければならない箇所には、自動テストがかなり力を発揮してくれるかと思います。

###### テスタビリティの高いコードはいいコード
これが大きいメリットかなと個人的には思っています。
魔のメソッドを生み出してしまった際これどうやってテストコードに落とし込むの?と自問自答してしまうこ

元記事を表示

朝活ラインボットを作成しました!

![10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574568/de7450c3-7edd-bee4-fd96-83e767fc4520.jpeg)
#記事の概要
作成した朝活ラインボットについて、以下の項目に沿って説明します。
####開発の背景
ラインボットの開発に至った経緯について説明します。
####朝活ラインボットの機能
このラインボットの機能について説明します。
####今後のアップデート項目
このラインボットも加えていきたい機能について説明します。
####開発環境
開発環境を簡単に説明します。
#開発の背景
朝活をやりたいメンバーでライングループを作り、朝活に励んでいました。
そこでは毎朝6時台に起きて、「おはよう」とメッセージを送り、各々朝活をしています。
寝坊した場合は罰ゲームとして、飲みに行ったときに「寝坊した回数×1杯」を他のメンバーに奢るというルールがありました。
実際に何度か寝坊するメンバーがいて、「寝坊しました」と自己申告してはいましたが、回数を集計するのがとても面倒

元記事を表示

XAMPPで複数バージョンのPHPを切り替えてApache + MySQL を使う方法 on Windows

## 目標

**XAMPPでPHP7.4.xとPHP5.6.xを切り替えてApacheとMySQL、phpMyAdminを使えるようにする**

## 前提
`PHP`のバージョンが新しい方、もしくは古い方のどちらかで`Apache`と`MySQL`を稼働できていること

## 作業
### バージョンの異なるXAMPPファイルの入手

[ここ](https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/)から欲しいバージョンのPHPが含まれている`XAMPP`の**`zip`**ファイルをダウンロードする。
`PHP`単体でなく、`XAMPP`全体をダウンロードするのは`Apache`や`phpMyAdmin`がそれぞれのPHPバージョンに対応した設定になっているから。
今回の方法では`PHP`のバージョンを切り替えた際、`Apache`と`phpMyAdmin`のファイルや設定もそれに対応したものにする。
特定のファイルを変更するわけじゃないため作業自体や変更自体は少ないが、少し容量に余裕が必要なことに注意。

##

元記事を表示

OTHERカテゴリの最新記事