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

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

picoCTF 2021 Super Serial

できなかった問題をwriteup等を参考に勉強した記録を残す。
勉強した結果,徳丸本 4.14.2 安全でないデシリアライゼーション に関する問題とわかった。

# Super Serial

http://mercury.picoctf.net:5428/

ヒント ../flag

アクセスするとこんな画面が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/577ebcbe-89e2-6445-bc9f-dd7a69fb84df.png)
OSコマンドインジェクションとか狙ったが全くだめ

以下,他力ありき。

robots.txt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/bd42ab37-7a03-0763-eec7-9261827b8921.png)
admin.phps
![image.png](https://qiita-ima

元記事を表示

【Laravel】Laravelの外部キーの設定方法

“`php
Schema::create(‘line_items’, function (Blueprint $table) {
$table->bigIncrements(‘id’);
$table->unsignedBigInteger(‘cart_id’);
$table->unsignedBigInteger(‘product_id’);
$table->integer(‘quantity’);
$table->timestamps();

$table->foreign(‘cart_id’)
->references(‘id’)
->on(‘carts’);
$table->foreign(‘product_id’)
->references(‘id’)
->on(‘products

元記事を表示

【CakePHP2】EmailComponent.phpでのメールヘッダ設定メモ

# はじめに
cakePHP2でメール送信処理にて、メールヘッダを付与する際にハマりかけた部分の注意点になります。

# 環境
cakePHP:2.4

# ことのはじまり
メールのヘッダにパラメータを設定するときに、追加したパラメータが正しく設定できなかった事例がありました。
ざっくり説明すると、メールヘッダに以下のユーザ定義パラメータを用意して、trueを指定すると設定が有効化されるという内容になります。
(パラメータの詳細は割愛します)

`X-USE-HOGEHOGE = true;`

そしてコントローラ側で、以下のようにパラメータ設定しました。

“`php:コントローラの設定部分(修正前)
class myEmailSendClass extends EmailComponent {
// ・・・(省略)・・・
// ヘッダを有効化する
$this->headers[‘X-USE-HOGEHOGE’] = ‘true’;
}
“`

このときに、実際に送信されたパラメータをチェックすると、`X-`が余分について

元記事を表示

【PHP src】PHPはソース管理に独自gitサーバを辞めてGitHubに移行する

これまでPHPは[git.php.net](http://git.php.net/)がメインのソース管理リポジトリでした。
[GitHubにもリポジトリはありました](https://github.com/php/php-src)が、あくまでミラーという扱いでした。

しかし今後はgit.php.netを廃止し、GitHubへと完全移行することになりました。

原因はハッキングです。

# 経緯

## https://github.com/php/php-src/commit/c730aa26bd52829a49f2ad284b181b7e82a68d7d

[Rasmus Lerdorf](https://github.com/rlerdorf)名義でおかしなコミットが行われました。

“`cpp
zval *enc;

if ((Z_TYPE(PG(http_globals)[TRACK_VARS_SERVER]) == IS_ARRAY || zend_is_auto_global_str(ZEND_STRL(“_SERVER”))) &&
(enc = zend_h

元記事を表示

PHP 8.0 を使ってベンチ結果もとってみた

PHP 8.0 の評判が良いようなので、自分の開発環境も PHP 8.0 にバージョンアップしてみました

## PHP 8.0 のインストール

具体的な手順はネットにたくさん出てるので省略

$ rpm -qa | grep php
php-pecl-msgpack-2.1.2-1.el7.remi.8.0.x86_64
php-pecl-mongodb-1.9.0-1.el7.remi.8.0.x86_64
php-pecl-memcached-3.1.5-4.el7.remi.8.0.x86_64
php-cli-8.0.3-1.el7.remi.x86_64
php-pecl-apcu-5.1.20-1.el7.remi.8.0.x86_64
php-common-8.0.3-1.el7.remi.x86_64
oniguruma5php-6.9.6-1.el7.remi.x86_64
php-mysqlnd-8.0.3-1.el7.remi.x86_64
php-mbstring-8.0.3-1.el7.remi.x86_64
php-pecl-igb

元記事を表示

PHP5.4からS3への画像アップロード

# 概要
* PHP環境からS3への画像アップロードできるようにするため、
aws-sdk-phpを使って試してみた。
* aws-sdk-phpバージョン3がPHP5.5以降のみ対応のため、SDKのバージョンを2に変更して再度実施。
* S3バケットの作成とIAMからユーザー作成を実施。
* vagrantの開発環境からS3へのアップするサンプル内容を記載。

## 環境
Mac Big Sur 11.2.1
vagrant 2.2.7
cake php 1系
php 5.4.45

# 1回目のaws-sdk-phpインストール(失敗)
vagrant sshでアクセスして実行。失敗する。

“`
$ composer require aws/aws-sdk-php
zsh: correct composer to _composer [nyae]?
zsh: command not found: composer
“`

zshの問題っぽいので、こちらの[サイト](https://stackoverflow.com/questions/21073366/composer-do

元記事を表示

APIを使い郵便番号から住所を検索するWebサービスを作成する

# 概要

本記事では**郵便番号データ配信サービスzipcloud様**が提供するAPIを用いて,7桁の郵便番号を入力すると住所が検索できるWebサービスの作製法を記載する.

# ブラウザで様々なパターンのJSONを表示検証してみる

下記URLの後ろに様々な文字列を連結してブラウザでアクセスしてみる.
`https://zip-cloud.appspot.com/api/search?zipcode=`

* **実在する郵便番号`1050011`を連結**
[https://zip-cloud.appspot.com/api/search?zipcode=1050011](https://zip-cloud.appspot.com/api/search?zipcode=1050011)
**住所の詳細が表示された.(ステータスコード: 200)**

“`json
{
“message”: null,
“results”: [
{
“address1”: “東京都”,
“address2”: “港区”,
“address3”: “芝公園”,

元記事を表示

composer installでエラーが出た

# 目的

– `$ composer install`を実行したところext-zipのバージョンのエラーが出たので解決までの道のりをメモ的にまとめてみた

# すみません

– 諸事情によりDockerファイルの詳細とlaravelアプリのソース内容はお見せする事ができない。

# 情報

1. Dockerにて環境構築をしてアプリ名ディレクトリに入り`$ composer install`を実行した。

# 解決までの経緯

1. まず`$ composer install`を実行したときの出力を下記に記載する。

“`terminal
$ composer install
>Installing dependencies from lock file (including require-dev)
>Verifying lock file contents can be installed on current platform.
>Your lock file does not contain a compatible set of p

元記事を表示

【エラー備忘録】コントローラーを呼び出すと、Target class [TaskController] does not exist.

routes/api.php 内で TaskController を呼び出すと、
Target class [TaskController] does not exist.
と表示されてしまった。

コントローラーを呼び出しているコードはこちら。

“`php:api.php

Route::get(‘/tasks’, ‘TaskController@index’);
“`

コントローラー名の前に、完全な名前空間を追加してみます。

“`php:api.php
Route::get(‘/tasks’, ‘App\Http\Controllers\TaskController@index’);
“`

これで画面表示ができました。

元記事を表示

Laravel GraphQL Lighthouse で Laravel Enum を自動型登録する

## 前提

– https://github.com/BenSampo/laravel-enum
– https://github.com/nuwave/lighthouse
– https://lighthouse-php.com

上記のライブラリはインストール済み

## 環境

– PHP 8.0.2
– Laravel 8.34.0
– nuwave/lighthouse 5.3.0
– bensampo/laravel-enum 3.3.0

[PHP8.1から言語標準機能としてenumがサポート](https://dev.to/nwby/enums-in-php8-1-2eie)されるので、今後ライブラリが不要になるかもしれません。
それまではまだしばらくは使われそうなので残します。

## LighthouseのEnum型

– https://lighthouse-php.com/5.3/the-basics/types.html#enum

公式ドキュメントに書いてある通り、Lighthouseは `BenSampo/laravel-enum` ライブラリに対応し

元記事を表示

PHP Eloquentライブラリを勉強しています

PHP Eloquentライブラリの勉強を始めました。
今回はmydbというデータベースのjobsテーブルに接続する方法です。

DB接続

“`PHP
require_once ‘./vendor/autoload.php’;

$db = new Illuminate\Database\Capsule\Manager;

$db->addConnection
([

‘driver’ => ‘mysql’,

‘host’ => ‘localhost’,

‘database’ => ‘mydb’,

‘username’ => ‘root’,

‘pasword’ => ”

]);

$db->setAsGlobal();

  $db->bootEloquent();

class Jobs extends Illuminate\Database\Eloquent\Model {
}

$results = J

元記事を表示

月の満ち欠け、ちょっとアバウトなアイコンで出力。

### 月の満ち欠け、ちょっとアバウトなアイコンで出力。
github https://github.com/taoka-toshiaki/moon

“`php:moon.php
($moon_age_sum – 1)){
$cnt++;
$moon_age_sum

元記事を表示

PHPで配列の構造を見やすくしてくれるデバッグツール「dBug」

配列を`var_dump()`で中身を表示した際,めっちゃ見にくいじゃないですか。

`

`タグを挟み込むだけで見やすくはなるんですけど↓のような時は流石に目がくらみます。
![rapture_20210331014104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/34197954-52e2-ab68-7bd6-e88363d3352c.png)

そんな時はdBugというPHPのデバッグツールを使えばめっちゃ見やすくしてくれます。
基本的には[こちらの記事](https://qiita.com/goemon330/items/4499e4b30f0210bc7090)と内容は同じです。

# ダウンロード
本来はhttp://dbug.ospinto.com/ よりダウンロードできるらしいですがサイトが閉鎖してるっぽいです。。。
![画像_2021-03-31_014957.png](https://qiita-image-store.s3.ap-northeast-1.am

元記事を表示

Laravel ログを出力する

## 環境

- PHP: 8.0.2
- Laravel: 8.34.0

## ログ関連記事

- [Laravel リクエストログを出力する](https://qiita.com/ucan-lab/items/bfd15b096a916f811468)
- [Laravel SQLの実行クエリログを出力する](https://qiita.com/ucan-lab/items/753cb9d3e4ceeb245341)
- [Laravel ConsoleとHttpのログファイルを分ける](https://qiita.com/ucan-lab/items/4dd7b5f7a3eb57a3ef1f)

## ログの基本

```php
logger('test', ['foo' => 'bar']);
```

ログの関数は、第一引数にメッセージ、第二引数にコンテキストを指定します。

```
[2021-04-01 00:00:00] local.DEBUG: test {"foo":"bar"}
```

ログのフォーマットとして下記のように出力されます。

```
[YYYY

元記事を表示

AjaxでJS⇔PHPの非同期通信を超簡単に実装してみた。

久しぶりです。今回は猿でもわかるAjaxということで非同期通信を実装する方法&サンプルを書いていきます。
何千番煎じだよwって言われそうですがお構いなしに書きます。
JavaScriptとかあまり知らない人にもわかるように説明するつもりですのでよろしくお願いします。

# はじめに
多分一部の人は**JQueryで非同期通信とかちょっとレガシーじゃないっすか?**って思ってるかも知らません。
確かに今はJQueryで実装するよりもVueとかReactとかの優秀なフレームワークがあるんで古い感じはしますが個人的に**SPAの基礎中の基礎を理解するには実装が手っ取り早いJqueryを使ったほうが良い**と思います。

※SPAとはSingle Page Applicationの略でユーザーの操作などに応じてページの遷移を行わずして動的にサーバーと通信を行うアプリケーションの総称です。GoogleMapとかが有名ですね。
![画像_2021-03-30_174309.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/

元記事を表示

WordPressのタグ一覧画面に表示されないタグがあった場合への対応

# 背景
WordPressサイトで固定ページを使ってタグ一覧画面を作成した時、
管理画面側から追加したタグが一覧に表示されない現象が発生しました。

# 仕様
- [AdvancedCustomField(ACF)](https://www.advancedcustomfields.com/)で追加したカスタムフィールド(下記の例では`tag_index`がキー)を取得する記事の並びの基準にする
- `tag_index`は数値フィールドで昇順に取得する

# 修正前のコード

```page-tags.php
'tags',
'order' => 'ASC',
'orderby' => 'meta_value',
'meta_key' => 'tag_index', //ACFのフィールド名
'hide_empty' => true,// 紐づけられている記事があるタグのみ取得
];
$tags_array = get_terms($args);
?>

// タグのループ

元記事を表示

PHPの標準関数をRubyで書く(配列操作編)

## はじめに

PHPの標準関数をRubyで書いてみました。
簡単に書けそうなものだけパズル感覚で書いてます。

配列操作編です。

PHPの添字配列はArray、連想配列はHashに対応させました。
特に差し支えなさそうなケースでは他の型でも許容としています。(返り値がEnumeratorになる等)

引数と返り値の型はテーブルで記載しました。

## array_chunk($array, $chunk)
[PHP: array_chunk - Manual](https://www.php.net/manual/ja/function.array-chunk.php)

|||
---|---
array|Array
chunk|Integer
return|Enumerator
```ruby:Ruby
array.each_slice(chunk)
```

|||
---|---
array|Hash
chunk|Integer
return|Hash
```ruby:Ruby
array.each_slice(chunk).map(&:to_h)
```

## arr

元記事を表示

PHP5上級試験/準上級試験の上級合格に挑戦(15) プログラミングPHP第3版 5章〜6章

# 5章 配列

配列の書き方は、[]を使って短く書くことも可能

```index.php
$days = array('gasket' => 15.29, 'wheel' =>75.25, 'tire' => 50.0);
//上記はこうも書ける
$days =['gasket' => 15.29, 'wheel' =>75.25, 'tire' => 50.0];
```
range()で、文字列が指定された場合、最初の文字を使って範囲を作成する

```index.php
echo range("aaa","zzz"); //これはrange("a","z")と同じ
```
配列の要素数を数えるcount()・sizeof()だが、値がないものは数えない。

```index.php
$days = array('gasket' => 15.29, 'wheel' =>75.25, 'tire' => 0 );
unset($days['tire']); //値を削除してみた
echo count($days); //出力は2 (unsetがなければ3)
```
多次元配列の配

元記事を表示

Carbon subMonthではなくsubMonthsNoOverflowを使用する

Carbonでの月の加算減算でsubMonthを使用していると下記のようなことが起こってしまうので、subMonthsNoOverflowを使用したほうが良いです。

### subMonthを使用した場合
```php
$date = new Carbon('2021-03-29');
$last_month = $date->subMonth();
// 2021-03-01
```

### subMonthsNoOverflowを使用した場合
```php
$date = new Carbon('2021-03-29');
$last_month = $date->subMonthsNoOverflow();
// 2021-02-28
```

元記事を表示

PHP sortについて sort(), asort(), ksort()

#各ソートの実施例

例)

```php

string(6) "ichigo"
["red"]=>
string(5) "apple"
["yellow"]=>
string(6) "banana"
["green"]=>
string(5) "melon"
}*/

sort($arr);
// var_dump($arr);//値を元にソート(昇順・キーが数値になる)
//結果
/*
array(4) {
[0]=>
string(5) "apple"
[1]=>
string(6) "banana"
[2]=>
string(6) "ichigo"
[3]=>
string(5) "melon"
}
*/

$a

元記事を表示

OTHERカテゴリの最新記事