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

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

【2022年版】HTMLのソースをphpで見れなくする方法 (view-source:対策済)

## 言い訳を言わせてくださいなの。
HTMLソースが見られたくないわけではありません。

HPに掲載している画像とかを悪用されるのを防止するためです。その悪用はコピーして使われることではなくて、画像直リンを使用して、匿名掲示板で使われることでもあったり。。。。

:::note info
別にそれなら.htaccessで制御すればいいのでは?
:::

## 究極のHTMLを見れなくする方法

実際にはこんなHTMLがご覧になることができるだけで、大して意味ないと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149448/470b5c6a-613d-56ba-85b8-a4727c82abf9.png)

## 具体的なコード

“`functions.php
= 1) {
} else {
header(‘Cache-Control: max-age=0’);
header(‘Cache-Contro

元記事を表示

M1 Macにphpenvでphp 8.0を入れてみた

かなり苦労したのでメモとして残しておく。
“`bash
$ brew install autoconf \
bzip2 \
krb5 \
libedit \
libiconv \
libjpeg \
libpng \
libxml2 \
libzip \
oniguruma \
openssl@1.1 \
pkg-config \
tidy-html5

# icu4cの最新バージョン(70)はビルドできないので旧バージョンの68を使う
$ brew tap-new icu4c/taps
$ brew extract icu4c icu4c/taps –version 68
$ brew install icu4c/taps/icu4c@68

# pkg-configの環境変数
$ PKG_CONFIG_PATH=”/opt/homebrew/opt/krb5/lib/pkgconfig:\
/opt/homebrew/opt/icu4c@68/lib/pkgconfig:\
/opt/homebrew/opt/libedit/lib/pkgconfig:\
/opt/homeb

元記事を表示

MAMPでポート番号を標準にすると403になったりする件の解決法

# 最初に結論

MAMPのポート番号はデフォルトのまま変にいじらない方が良い。
特にweb:80, mysql:3306 にしてはいけない。
本番と同じポートを使って動作させたいなら有料版のMAMP Proに移行すべき。

**※2022年5月現在の情報です。今後OSやMAMPの変化により情勢が変わるかもしれません。むしろ変わってくれ。**

# 本文

## MAMPとは

**M**acOS向け
**A**pache(Webサーバ)
**M**ySQL(MariaDB、DBサーバ)
**P**HP(Web開発用プログラミング言語)

がワンセットになった統合運用環境です。Windows版もありますがMac専用と考えた方が良いです。
インストールするとダッシュボードが表示され、上記の各サーバがワンクリックで開始、終了できるお手軽環境です。
PHPが使えるのでWordpress等の開発環境として導入されている方も多いかと思います。

## MAMPで起こる問題

MAMPで開始、終了できるApache, MySQLは標準の接続ポート番号がそれぞれ80, 3306です。
対してMAMP

元記事を表示

文系大学生がポートフォリオとして、LaravelでWebアプリを作成しました。

# はじめに

### 記事の目的
**ポートフォリオとして作成したWebアプリケーションの紹介記事です。**
![kokosake.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526838/40cbb3e5-9de1-87af-0194-e0dc1bd27ec8.png)
言語はPHP、フレームワークはLaravelで作成しています。

目次は以下のとおりです。
[1. 作成したアプリについて【概要と機能】](#-1.-作成したアプリについて【概要と機能】)
[2. 作成したアプリについて【技術】](#-2.-作成したアプリについて【技術】)
[3. 作成した目的・背景について](#-2.-作成した目的・背景について)
[4. 作成時・作成後に考えたことについて](#-4.-作成時・作成後に考えたことについて)
[5. 作成のための学習について](#-5.-作成のための学習について)

**アプリ自体のご紹介**のほか、**アプリ作成に至るまでの学習内容**などにも触れられたらと思います。
# 作

元記事を表示

レトロなコーポレートサイトをモダンに替えてみた

1990年代のインターネット黎明期から存在し、社員による手作りで継ぎ足し継ぎ足し更新してきたコーポレートサイトを全面リニューアルしてみました。

# 現行の問題点
ネット界隈で時折話題になる「[阿部寛のホームページ](http://abehiroshi.la.coocan.jp/)」と比べれば、CSSや**div**タグも普通に使われていて、さほどデザインにレトロさを感じません。
ですが、次の点で保守性が著しく劣っていました。端的に言うと、ホームページの更新程度に余計な工数がかかる仕組みだったのです。

– すべてのページで内容が同じ**ヘッダー(グロナビ)**、**サイドバー**、**フッター**が、すべてのHTMLファイルに直書きされているため、この共通箇所に変更があると、基本すべてのファイルで修正が必要
– CSSの書き方が全体的に冗長過ぎて膨大なため、製品情報やFAQをひとつ追加するだけでも多くの修正が必要
– トップページにありがちな新着情報もHTMLに直書きのため、更新の都度、HTMLを理解する人の作業が必要
– 一部のページで昔流行った**map**タグ(**クライアント

元記事を表示

PHPのフォーム作成

# PHPのフォーム作成
PHPで簡単にフォームを作っていきます。

“`index.php

氏名
 //placeholderは下の薄い灰色のテキスト
//送信部分



“`
これを使うと

![スクリーンショット 2022-05-06 14.29.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/d0cee075-0a9d-a921-3258-4ac55a6d464b.png)

⚫︎“`form method“`は***デ

元記事を表示

#2 はじめてのデザインパターン~Factory Method~

# どんなもの?

オブジェクト生成する時のインターフェースだけを規定して、**実際にどのクラスをインスタンス化するかはサブクラスで決める**ようにするデザインパターン

イメージは共通部分をファクトリーで実装し、それ以外の処理をサブクラスで実装する、という感じ。

※既に学習したTemplate Methodに似ていると思ったら、Factory MethodはTemplate Methodの応用例だった。

# 参考

https://shimooka.hateblo.jp/entry/20141215/1418620242#:~:text=Factory%20Method%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%A8%E3%81%AF%EF%BC%9F

# どんな時に使う?

例えば、以下のようなcsvファイルがあって

Music.csv

“`
ルートヴィヒ・ヴァン・ベートーヴェン,ピアノソナタ第23番ヘ短調「熱情」
ヴォルフガング・アマデウス・モーツァルト,魔笛
ヴォルフガング・アマデウス・モーツァルト,セレナーデト長調 K.5

元記事を表示

UUIDってなんだぁ…?

# UUIDってなんだよ
Universally Unique Identifier の略。
**世界中で絶対に被らないユニークなID**のこと。オンリーワンです。
# UIDとどう違うんだ
基本的にUIDっていうとただのユニークなIDのこと、もしくはユーザー識別のIDを指すとおもいます。
しかし、それはDBの中で固有というだけでべつに世界中に同じIDがあっても大丈夫なのですが、UUIDは絶対に世界中どこをさがしても重複していないIDです。

**フォーマットも決まっています**
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
16進数で8桁-4桁-4桁-4桁-12桁の文字列、IDです。これは絶対。128bitで39桁です。

# バージョンって?
UUIDにはバージョンが4種類ある。基本バージョン4を使うことがおおい。
|バージョン | 説明 |
| :-:| :- |
|1|MACアドレスと日付時刻から生成するUUID|
|2|MACアドレスと日付時刻に加え、ローカルのPOSIXユーザIDから生成するUUID|
|3|URL、完全修飾ドメイン名

元記事を表示

Laravel API SNSログイン機能を実装する

## 利用ライブラリ

– https://readouble.com/laravel/9.x/ja/socialite.html
– https://github.com/laravel/socialite
– https://socialiteproviders.com

公式を参考に進めます。

## Socialiteのインストール

“`shell-session
$ composer require laravel/socialite
“`

## 環境

– PHP: 8.1.5
– Laravel: 9.9.0
– [laravel/socialite](https://github.com/laravel/socialite): 5.5.2

## 実装

GitHubとSNSログインする場合を例に実装します。

### .env

“`.env
APP_URL=http://localhost

SESSION_DRIVER=cookie
SESSION_LIFETIME=120

GITHUB_CLIENT_ID=1234567890abcdefghij
G

元記事を表示

4K対応HPの制作 part2

こちらの続きとなります。

https://qiita.com/nanakochi123456/items/2a200c2f46e5608740bb

あまり4Kと関係ないこともかいていますが・・・

## WordPressである痕跡をなくす。
別にWordpressが恥ずかしいとかそういうのではないのですが、

“`
cd wp-content
“`
と非常に長文で打ちずらいのが理由です。

更に、手抜きしようとして
“`
# cd wp*
su: cd: too many arguments
“`
とういう落ちになるのも不快でした。

wp-content のディレクトリを変える

こちらの記事を参考にして、シンボリックリンクを張ります

### 更に痕跡をなくす
プラグインが使用しているものを取り外すと、それなりにWordpressっぽくなくなります。

“`functions.php
function load_recaptcha_js() {
if ( ! is_page(

元記事を表示

【メモ】PHPのstatic:: (遅延静的束縛)とは何なのか?

Laravelのサービスコンテナの仕組みを知りたい初心者です。
Laravelのサービスコンテナのコンストラクタを追っていたらいきなり`static::`を使っているコードが出てきました。`static::`ってなんだ????
“`php:\vendor\laravel\framework\src\Illuminate\Foundation\Application.phpから抜粋
protected function registerBaseBindings()
{
// static::ってなんだ????
static::setInstance($this);

$this->instance(‘app’, $this);

$this->instance(Container::class, $this);
$this->singleton(Mix::class);

$this->singleton(PackageManifest::class, function (

元記事を表示

PHP 2つの配列やオブジェクトの中身が同じかどうか調べる

## 説明

PHPUnitテストでオブジェクトが返ってくる時プロパティを一個一個比較してますか?私はserializeして文字列比較してます。「PHPで配列が同じかどうか比較する方法」なるものであまり良いものがない気がしたので私の書く比較方法を書きたいと思います。これは誤った方法かもしれません。でも構いません。誤った方法を世に広め世界を混沌に陥れるのは私の人生の目的であるのだから。

## まぢで完全に同じかどうか分身かどうか

trueになるのは

1. リソースが同じ(リソース番号が同じ)
1. オブジェクトが同じインスタンス(参照が同じ)
1. 配列の中身が同じ(オブジェクトが入っている時は同じインスタンスが入っている事)

“`php
$x === $y
“`
## 中身の値が同じかどうか

trueになるのは

1. オブジェクトのクラス名とプロパティとその値が同じ
1. 配列の中身が同じ(オブジェクトが入っている時はオブジェクトのクラス名とプロパティとその値が同じ)

※リソースはserializeすると「i:0;」となる。数値の0と同じ。意味がないため使わない

元記事を表示

【Laravel入門】Validator::Extend

導入

1周目のLaravel入門を実践中、引っかかった点があったので共有がてらあげます。

経緯

p157の「Validate::extendを利用する」を実践中、以下コードの「extend」の部分にエラーが出ていたため、「use」に問題があるのではないかとは思っていた。

“`php
public function boot()
{

Validator::extend(‘hello’, function($attribute, $value, $parameters, $validator){
return $value % 2 == 0;
});
}
“`

しかしまだ始めてから少ししか経っていないのにValidatorのuseに種類があるとは思わなかった。

なので別サイト(結構前にやったのでどのサイトか忘れました)から持ってきた、こちらのuseを使っていた。
“`php
use Illuminate\Validation\Validator;
`

元記事を表示

ワードプレスでwebスクレイピング を使って自動投稿するプログラム

自分で色々と開発した機能の保存メモとして残しています。

# 機能概要

・好きなURLの記事一覧から記事情報を取得して、各下層ページ記事のタイトル&内容も取得する。
・取得した各記事をワードプレスの投稿に入れる(公開or下書き)
・これをcronで時間指定をする
・最後に同じ記事の情報は取得しない。

# ※思いつきで作ったコードです。
変数名など適当なのでぜひ変えて使ってください。

“`php
//スクレイピング関数
//aタグそのまま使えるバージョン
function my_cron_function()
{

//DB情報
$dsn=’mysql:host=ホスト名;dbname=データベース名;charset=utf8′;
$user=’データベースユーザー名’;
$password=’パスワード’;

//スクレイピング用phpQuery読み込み
require_once( __DIR__ .”/phpQuery-onefile.php”);
$home = “取得するURLのTOPドメイン”;//トップURL
$html = fil

元記事を表示

PaizaラーニングのLaravel入門編1をやってみた。

昨日まででPaizaラーニングのLaravel入門編1を全部やってみたので、感想をお伝えしたいと思います。
# 全体的に
プログラミングスクールでコピーアプリをAWSを使いやったあとでの学習だったので、復習にはなったと思います。
# 内容は
Paizaのクラウド環境(PaizaCloud)を使用して、プロジェクトの作成からコントローラの作成・ルーティング・ビューの作成などを通して一行掲示板を作るものです。
# やってみて
コードの記述でやはり細かいミスをしてしまうことがあり、エラーになることがありました。(演習課題)
自分でやるとこんなもんかと思いました。

動画を見ながらの部分は問題ありませんでした。

以上が感想になります。

元記事を表示

Laravelでwhere句のグループ化

## where句のグループ化
以前入っていた現場で
“`sql
select * from users
where ((status = 1) and (confirm_email1 = ? or confirm_email2 = ? or confirm_email3 = ?))
or ((status = 2) and (approve_email1 = ? or approve_email2 = ? or approve_email3 = ?))
“`
上記のようなSQL文をLaravelで再現する必要がありました。(実際のコードから修正してあります)
そして私が最初に書いたコードはこんな感じでした。
“`php
$users = User::query()
->Where(‘status’, 1)
->orWhere(‘confirm_email1’, $email)
->orWhere(‘confirm_email2’, $email)
->orWhere(‘confirm_email3’, $email)
->orWhere

元記事を表示

Laravelのローカルスコープについて

### ローカルスコープとは?
簡単に説明するとローカルスコープとは、SQLのよく使う取得条件をあらかじめ定義しておいて再利用できる機能のことです。
“`php
$posts = Post::query()
->select(‘title’, ‘body’)
->where(‘status’, 1)
->get();
“`
上記のコードでは`where句`を使って`status`が`1`のデータを取得しています。この取得条件が他のところでも複数必要であれば、何回もこの`where句`を記述することになります。そんな時に使えるのがローカルスコープです。

モデルファイルにこのように記述します。
“`php
public function scopeOnlyOpen($query)
{
$query->where(‘status’, 1);
}
“`
メソッド名の先頭に`scope`を付けます。
そして、、
“`php
$posts = Post::query()
->select(‘title’, ‘body’)
->onlyOp

元記事を表示

TCPDFでA4タテヨコ混在状態で出力する

# はじめに
仕事で帳票を取り扱っているが、繁忙期で忙殺されているときにタテヨコ混在状態で出力できない壁にぶつかったことがあった。Acrobat reader とかで一瞬で回転できるのに、んなアホなって思ったけど当時は押し切った。時間が経って、研究できる時間ができた。仕事場のライブラリとは違うがいちおうできることを確認できた

# source
てきとーにコントローラから処理実行する(ほんとは libraries に入れたほうがいいね)
“`php:app/Config/Routes.php
$routes->get(‘home/rotate_pdf’, ‘HomeController::rotatePdf’, [‘as’ => ‘home_rotate_pdf’]);
“`
“`php:app/Controllers/HomeController.php
public function rotatePdf(): RedirectResponse
{
// 基本、タテA4の枠組みで出力
$tcpdf = new TCPDF(‘P’

元記事を表示

WordPress管理画面が真っ白に…

WordPressでHPやLPを制作し、本番環境にアップロードしたけど、いざ管理画面に入ると画面が真っ白に…

なんで!?と思って原因を探ると、「functions.php」に諸悪の根源がありました。

最後の行が

“`
?>

“`

となっていたのを
“`
?>
“`
と直します。

なにが変わったん?

と思うかもしれませんが、実は、改行がなくなっているのです。

閉じタグ後の改行ひとつで管理画面が真っ白になる原因になるらしく、この点を修正したら、自分も見事に管理画面が表示されました。

そもそも、HTMLに埋め込むタイプのPHPファイル以外は閉じタグをつけないということがデフォルトらしく、自分自身新たな学びとなりました。

他にも、Wordpress関連のエラー要因はたくさんあると思いますが、同じ原因で動かないという人がもしいらっしゃれば、この点も確認してみてください。

元記事を表示

Laravel API 認可機能(ACL)を実装する

LaravelでRole(役割)、Permission(権限)によるAccess Control List(アクセス制御リスト)の機能を実装します。

## 利用ライブラリ

– https://github.com/spatie/laravel-permission
– https://spatie.be/docs/laravel-permission/v5/introduction

## 環境

– PHP: 8.1.5
– Laravel: 9.9.0
– laravel-permission: 5.5.2

## laravel-permissionのインストール

“`shell-session
$ composer require spatie/laravel-permission
“`

“`php:config/app.php
‘providers’ => [
// …
Spatie\Permission\PermissionServiceProvider::class,
];
“`

“`shell-session
$ php arti

元記事を表示

OTHERカテゴリの最新記事