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

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

ubuntu 22.04環境にnginx + php-fpmでLaravelアプリケーションを構築

# 概要

サーバにインストールしたUbuntu 22.04環境で本番向けのLaravelアプリケーションを動かします。

nginxはhttpのウェブサーバで、php-fpmとはPHPのCGI(ウェブサーバでスクリプトを実行して、動的コンテンツを生成する仕組み)です。
今回はnginxをウェブサーバとして動かして、php-fpmと連携させることでLaravelのアプリケーションが動作するようにしていきます。

今回は、dockerなどのコンテナは使用せずに、ubuntu上に直接必要なソフトウェアをインストールしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70029/b1646470-3bd5-9fda-6215-1577ddfba5bc.png)

# 必要なパッケージのインストール

## nginxのインストール

“`bash
$ sudo apt update
$ sudo apt install nginx
“`

## PHPのインストール

“`

元記事を表示

Python,Ruby,PHP,Java,JavaScript,PerlのMySQLの比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,PerlのMySQLの比較

# Python

https://qiita.com/ab-boy_ringo/items/f05bb6329f51e1632965

# Ruby

https://qiita.com/hukuro310/items/ec91beaecd11157e0640

# PHP

https://qiita.com/ab-boy_ringo/items/8274c66b6692966fdc55

# Java

https://qiita.com/namari/items/50d9aac0faf6b7e7b314

# JavaScript

https://qiita.com/PianoScoreJP/items/7ed172cd0e7846641e13

# Perl

https://perlzemi.co

元記事を表示

Laravel で ルーティングしたら Invalid route action: []. で怒られた

# エラー時の状況

Laravel で ADR の設計で REST API の開発をしているとき、Action を `routes/api.php` にルーティングを設定したら怒られたので備忘録。

“`
UnexpectedValueException

Invalid route action: [App\Http\Actions\Todo\GetAction].

`App\Http\Actions\Todo\GetAction` was not found.
Controller class `App\Http\Actions\Todo\GetAction` for one of your routes was not found. Are you sure this controller exists and is imported correctly?
“`

エラーログの内容を要約すると以下の通りです。

– Action が無効だよ
– `App\Http\Actions\Todo\GetAction` は存在しないよ、ちゃんとインポートしている?

## 環境

元記事を表示

【PSR-4 Autoload】第三回 composerからautoloadを利用

## この記事でできるようになること :muscle:
【第一回】 autoloadの概要を理解
【第二回】 仕組みを理解したうえでautoloadを実装
**【第三回】 composerからautoloadを利用**
## そもそも… :thinking:
### Composerとは :mag_right:
#### 概説
PHPのプロジェクトで使用するライブラリ・パッケージの管理(インストール・アップデート等)を単一のファイル(`composer.json`)から一括で行えるツールです。
ComposerにはAutoload機能も用意されており、自作Autoloadクラスを作らなくてもファイルの自動読み込みを実現することが可能になります。便利ですね。
>Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for y

元記事を表示

OAuth 2.0 Server PHP と Google OAuth2.0 Playground を接続する

# 1.はじめに

 本稿は[OAuth 2.0 Server PHPを使ってサーバー認証をやってみる。](https://qiita.com/SSaitou/items/1dc9e67f420c6bf5acd1 )の続きです。本稿ではとりあえず作ったOAuth2.0 PHP Serverが外部からの呼び出し(ここではGoogleサービス)に対して適切に動作しているか確認してから、その上で動作するアプリ作成に入ろう、という目論みです。というか、[Googleのドキュメント](https://developers.google.com/assistant/smarthome/develop/create )を追って行ったらいつの間にか[Google OAuth2.0 Playground](https://developers.google.com/oauthplayground/ )にさ迷いこんでいたというのが正直なところで、今となってはどこから入り込んだのか解りません。ただ、OAuth2.0サーバー認証のみの確認ができるので結果的にはとても良かったです。サービスアプリ(みたいなもの)

元記事を表示

PHP 8.0 + Laravel 6.x でSoapClient使うとエラーになるみたい

# 概要
表題の通り、PHP 8.0 + Laravel 6.x でSoapClient使うとエラーになるみたい

# 詳細
[Laravelのサポートポリシー](https://readouble.com/laravel/8.x/ja/releases.html#support-policy)見る限り、Laravel 6.x でも PHP8.0使えるっぽいけど…

PHP 8.0 にしたら、SoapClient使ってるとこで
“`
include(): Failed opening ‘/home/runner/work/hoge/vendor/composer/../phpunit/phpunit/src/Framework/ExceptionWrapper.php’ for inclusion (include_path=’.:/usr/share/php’)
“`
的なエラーが出ちゃう

# 対策
Laravel 7.x までアップしたら解決。
※ Laravel 7.x もサポート切れてるから…ちゃんとアップしようね

元記事を表示

[PHP] readfileでcsvをダウンロードさせると余計なものが挿入される

# 何が起きたのか
webアプリケーション上でcsvダウンロードボタンを作った。
動いたものの、元のcsvファイルデータと一緒にPHPの警告や、htmlソースがデータ化されてしまっている。。。
| column_1 | column_2 |
|:———–|————:|
|1|tree|
|2|mono|
|3|ace|
|4|believe|
|\|||
|\|||

# 解決した

“`diff_php
$filename = ‘child.csv’;
$csvFilename = ‘/tmp/child.csv’;

header(‘Content-Type: application/stream’);
header(‘Content-Disposition: attachment; filename=’.$fileName);
header(‘Content-Length: ‘.filesize($csvFileName));
readfile($csvFileName);
– un

元記事を表示

apacheで現在のフォルダをサーブしたい

# 経緯
apacheサーバーで運用している開発案件に参画
apacheじゃ無いと、jqueryの読み込み順序がバグる。
.htaccessも使いたい。
でも、docker-composeとか毎回書くのだるい。

### やりたいこと
apacheでコマンド1つで現在ディレクトリを配信するサーバーを構築したい。

# 解決策
`serve`とコマンドを打つと、apacheのdockerコンテナが起動するようにfish functionを作った。
zshやbashでも同じように作れると思う。

“`bash:tree
# ~/.config/fish/functions
.
├── serve
│ └── Dockerfile
└── serve.fish
“`
“`Dockerfile:~/.config/fish/functions/serve/Dockerfile
FROM php:7.0-apache

RUN a2enmod rewrite proxy proxy_http
“`
“`fish:~/.config/fish/functions/serve.fi

元記事を表示

user登録者毎に画面表示させる方法

「id」を使って、各ユーザー毎に画面表示させる方法を学習したので、皆さんに共有します。

当初の遷移方法は
reg.php(登録画面) → reg_list.php(登録一覧画面) となる。

reg.php(入力画面)
“`php

               

日付:

Python,Ruby,PHP,Java,JavaScript,PerlのSQLiteの比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,PerlのSQLiteの比較

# Python

https://qiita.com/flcn-x/items/69481d31211421e21f21

# Ruby

https://qiita.com/akito_tameto/items/868e3805dc01c7bef6ef

# PHP

https://qiita.com/39_isao/items/a5b4940138bced936de0

# Java

https://qiita.com/tsweblabo/items/39bdd73a910417a9a8df

# JavaScript

https://qiita.com/zaburo/items/a155cbc02832b501a8dd

# Perl

https://perlzemi.com/blog/20

元記事を表示

【Docker Compose】固定IPの割りあてとhostsの編集

## はじめに
ローカル開発環境を構築するにあたり固定IPを設定し、`hosts`ファイル を編集する必要があったため、その手順を備忘録として残します。

`docker-compose.yml` に以下を追記する
* IPアドレスを固定する: ネットワーク(`networks`)を追加
* コンテナの `/etc/hosts` を編集する: `extra_hosts` を追加

コンテナ起動後、各コンテナに入り固定IPが設定されているか, `/etc/hosts` が編集されているか確認
“`bash
# コンテナに入る
docker compose exec <コンテナ名> bash

# コンテナ内で以下コマンド実行
hostname -i
cat /etc/hosts
“`

## 設定例

“`docker-compose.yml
services:
php:
container_name: php
build: ./docker/php
volumes:
– ./server:/var/www
networks:

元記事を表示

php artisan migrate実行時のエラー

php artisan migrate

Illuminate\Database\QueryException

could not find driver (SQL: select * from information_schema.tables where table_schema = ****** and table_name = migrations and table_type = ‘BASE TABLE’)

試すこと:

“`php artisan cache:clear“`

`php artisan config:clear`

`php -m`
(pdo_mysqlが入ってるかどうかを確認する)

参考記事:
(Laravel)マイグレーション時、could not find driver のエラー
https://hara-chan.com/it/infrastructure/docker-laravel-migration-could-not-find-driver/#could_not_find_driver

最後解決
https://qi

元記事を表示

Laravelで「Expected name to be a non-empty string.」というエラーが発生した件のメモ

## 備忘
– 2022/10/16くらいからLaravel開発環境で突然「Expected name to be a non-empty string.」というエラーが発生し、artisanコマンドがいっさい実行できなくなった。
– 調べていくとCI/CDで実行している`composer update`の結果「vlucas/phpdotenv」というライブラリのアップデートが行われたことがわかった。(v5.4.1 => v5.5.0)
– [GitHub](https://github.com/vlucas/phpdotenv/commit/4c165455a670005a05edbdf97a5590aa3e4936ec#diff-2eedf850c12a444af660cf1ff97e8449b140a2be8646c2c857a7f95afc195cc7R62)を見ると、AdapterRepository.phpに環境変数名の空チェックロジックが追加されていることがわかった。
– env()メソッドに渡す環境変数名が空の場合、いままではスルーされていたが、例外をスローするようにな

元記事を表示

【 #ゆめみからの挑戦状 ★第7弾】解答の紹介と総括

# はじめに
最近弊社ゆめみでは, Twitter にて「ゆめみからの挑戦状」という企画を定期開催しています.
ゆめみの社員がプログラミングに関する問題を出して,皆さんに引用リツートで答えていただく,というものです.
歴代の出題者として Qiita でも有名な @Yametaro や @mpyw などがおりますが,今回は私が出題させていただきました!
本記事は,問題,想定解やその他皆さんからいただいたオモシロ回答などをご紹介します.

# 問題

“`php: 問題

元記事を表示

Python,Ruby,PHP,Java,JavaScript,PerlのC言語拡張の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,PerlのC言語拡張の比較

# Python

https://qiita.com/pocokhc/items/836a3596df5facd00824https://qiita.com/nabion/items/594fb3316583130a636e

# Ruby

https://qiita.com/suketa/items/ab6b88093de4a54b3b06

# PHP

https://qiita.com/takeyoshi-k/items/2a993eefbe06be047eff

# Java

https://qiita.com/tobita_yoshiki/items/0400f7e393fc0ba2d0cb

# JavaScript

https://qiita.com/mokomium/items/57

元記事を表示

連想配列内の1つの値(配列)のみ階層を深くする方法

## 概要
業務で連想配列内の一部の値のみ、階層を深くする必要のある実装を行う必要がありました。今までは、`パターン1`のやり方で実装しておりましたが、`リーダブルコード`を読んでから、質が高く綺麗で分かり易いコードを書くにはどうしたら良いんだ考えており、`パターン1`の書き方は絶対に使いたくありませんでした。
なかなか、色々な記事を調べてもヒットしなくて途方に明け暮れておりましたが、急に閃いて実装ができました。
もし、同じ様な悩みをお持ちの方がいらっしゃるかもしれないと思い、記事に残しました。

“`php
// パターン1(以前までの書き方)
$test[‘sample’][‘level1’][‘level2’] = ‘test1’;
$test[‘sample’][‘level1-1’] = ‘test2’;
$test[‘sample’][‘level1-1-1’] = ‘test3’;
“`

– 連想配列内に`key`と`value`を記述配列を用意するだけで、1つだけ階層の深い連想配列を分かり易い書き方で表現できます。
“`php
// パターン2(新しい書き方)

元記事を表示

DMM apiの使い方(自分のデータベースを作る方法)

※本記事は成人向けのサイトに使った技術についてです。

実現したかったこと

DMM apiではソートできないものがあったので独自のデータベース(以下DB)を作りたかった。

例:女優apiでできない誕生日での抽出など

実装環境

・mixhostレンタルサーバー
・Wordpress(テーマcocoon)使用
・FileZilla Clientでphpファイル設置

使用言語

・SQL
・php
・javascript

javascriptでやること

概要:phpとDMM apiの橋渡し

function main(){
宣言省略

for(let k=1 ; k<”総女優人数” ; k=k+100|0){ ・ let url = "”DMM apiにアクセスするためのurl”"; ・ fetch(url).then( function(response) { return response.json(); }).then(async function(json) { ・ for (let i = 0

元記事を表示

php emptyで0も空になる

# empty()は0も入る
phpの`empty()`を実行すると0も空になる

```
$ php 221015.php
[0=>グー,1=>チョキ,2=>パー]:0
empty
0
```
簡単なじゃんけんを作って実行

こうならないために
```empty.php
if($stdin_num === ""){
echo 'empty'.PHP_EOL;
return false;
}

```
でしてみた。もっと簡単な方法探す。
文字列は判定してくれるかも。
# 参考

https://qiita.com/shinkuFencer/items/48718f0c8d203ca513db#%E7%A9%BA%E6%96%87%E5%AD%97%E5%88%A4%E5%AE%9A%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AEempty

元記事を表示

php ubuntuにmbstringを入れる際にエラーになった

# 環境
- ubuntu20.04
- windows surface
- php 7.4

# 拡散モジュール
```ubuntu
sudo apt -y install php7.4-intl php7.4-xmlrpc php7.4-soap php7.4-mbstring
```
拡散モジュールは`php7.4-mbstring`だけでいいかもしれない

https://www.kshare.jp/blog/archives/751.html

元記事を表示

【PHP8.3】JSONが正しいかどうか判定できるようになる

まだ[PHP8.2](https://qiita.com/rana_kualu/items/fc4b02e2daaf102aa92f)もリリースされていませんが、PHP8.3に導入される機能が早々にひとつ決定しました。

ということで以下は該当のRFC、[PHP RFC: json_validate](https://wiki.php.net/rfc/json_validate)の紹介です。

# PHP RFC: json_validate

## Introduction

このRFCでは、文字列が正しいJSON文字列であるかを検証する関数`json_validate()`を導入します。

同機能のユーザランド実装はほとんどが`json_decode()`を使用していますが、これは文字列をパースする際にZVALを生成し、検証するだけであれば不要な処理や無駄なメモリを浪費しています。

`json_validate()`はPHPコアに存在するJSONパーサを使用します。
これは`json_decode()`で使用されているものと同じであるため、`json_validate()`が有

元記事を表示

OTHERカテゴリの最新記事