SlideShare uma empresa Scribd logo
1 de 101
PHPカンファレンス2022
PHP初心者セッション
twitter ハッシュタグ #phpcon2022
#track3
Discord #track3_コンベうめ
日本PHPユーザ会
有限会社アリウープ
柏岡 秀男
アジェンダ
自己紹介
PHPの始め方(環境)
PHPの文法
マニュアルの読み方
サンプルアプリ
実際に使ってみよう
自己紹介
• 有限会社アリウープ 代表取締役社長
• Registered Scrum Master(RSM)
• Registered Product Owner(RPO)
• Registered Scrum@Scale Practitioner
(RS@SP)
• PHPユーザ会の発起人の一人
• PHPカンファレンスでは初回より運営に
参加
• PHPを中心としたWEB開発からスクラ
ム導入まで
対象とな
る皆様
PHP書いたこと無い
入門書読んだけど、途
中で挫折
他の言語で入門程度
PHPとは
PHPとは
PHP is a popular general-purpose scripting language that is
especially suited to web development. Fast, flexible and
pragmatic, PHP powers everything from your blog to the most
popular websites in the world.
http://php.net/より
PHPは、特にウェブ開発に適した人気のある汎用スクリプト言
語です。 高速で柔軟性があり、実用的なPHPは、あなたのブロ
グから世界で最も人気のあるウェブサイトまで、あらゆるもの
を強力にサポートします。
DeepLの翻訳
PHPとは
WEB開発に適した言語
情報が豊富で行いたいことの情報がすぐ見つかる
PHPの歴史
1994年にRasmusがオンラインで公開している経歴書のアクセス
履歴を調べるために使われていました
彼はそのスクリプト群を「Personal Home Page Tools」と名付
けました。
http://php.net/manual/ja/history.php.php
PHP/FIの頃のソースコード
PHPのsoftware
PHPの環境
LAMP
Linux Apache MySQL PHP
LAPP
Linux Apache Postgre PHP
LEMP
Linux Nginx MySQL PHP
どんな環境ではじめるか
VPS
レンタルサーバ
専用サーバ
レンタルサーバ VPS 専用サーバ
OS管理 不要 必要 必要
ミドルウェアのイ
ンストール
X ◯ ◯
他のユーザの影響 有る 無し 無し
管理者権限 X ◯ ◯
ハードウェア拡張 X X ◯
AWS EC2, ,ECS, Cloud9
Azure Azure App Service
GCP Google Compute Engine
クラウド環境
ローカル環境
XAMPP
MAMP
Docker
公式サイト
https://www.docker.com/
Windows
https://docs.docker.jp/docker-for-windows/install.html
Mac
https://docs.docker.jp/docker-for-mac/toc.html
Docker PHP8!
https://github.com/docker-library/docs/blob/master/php/README.md#supported-tags-
and-respective-dockerfile-links
Docker Compose
Compose とは、複数のコンテナを定義し実行する Docker アプ
リケーションのためのツールです。
• 単一ホスト上で、複数の環境を分離実行できます
• 開発環境の構築が便利
• テストの実行や本番環境への移行にも便利
Dockerによる
開発環境
docker-composeを使用する
場合
dockerのインストール
docker-compose.ymlの作成
docker-compose up
docker-compose.yml
version: '3'
services:
php:
image: php:8.1-fpm-alpine
expose:
- '8080'
ports:
- '8080:80'
volumes:
- ./phpapps:/home/www-data
working_dir: /home/www-data
command: php -S 0.0.0.0:80
dockerイメージ
名
公開ポート
ホスト側とコンテナ
のポート
ボリュームのマウ
ト
コマンドの実行
ビルトインサーバ
ディレクトリ構成
• ./
• docker-compose.yml
• phpapps/ => ここがdockerと共有されている(ビルトインサー
バのディレクトリ)
• ローカルのファイルを修正するとdocker側で実行可能
起動方法
対象ディレクトリに
移動して
docker-compose up
-d 開始
docker-compose
stop終了
実行してみま
しょう。
index.phpを作成して
確認してみましょう
http://localhost:8080/
Laravel Sail
$curl -s "https://laravel.build/example-app" | bash
$cd example-app
$./vendor/bin/sail up -d
PHPの概要
PHPの基本
PHPの文法は直感的です。
他の言語をやっていない方が戸惑いません。
WEB構築に最適な言語です。
※個人の感想です
PHPタグ
<?php ?> PHPモード;
HTMLのタグのようなイメージ;
<html>
<body>
<?php
echo "こんにちは";
?>
</body>
</html>
一番かんたんなサンプル
http://localhost:8080/1st.php
拡張子
ファイル名.php
PHPの構文
• 変数は$で始まる;
• 文末は;で終わる
• 型宣言などは厳密に行わなくて使えるケース
が多い。
• 簡単なサンプルを見てみましょう
<?php
$a = 'こんにちは';
echo $a;
変数の例
PHPからHTMLも出力
<?php
echo "<html>";
echo "<body>";
echo "これはPHPです";
echo "</body>";
echo "</html>";
http://localhost:8080/sample2.php
$a = "A" . "B";
$b = 1 + 2;
足したり結合したり
$a = "A";
$b = "B";
$c = $a . $b;
変数値が数字なら演算も可能
変数でも結合
$a = "phpcon";
$b = 2019;
echo $a . ($b +3);
http://localhost:8080/sample3.php
拡張子
PHPの関数
•if
•foreach
•strlen
•htmlspecialchars
•nl2br
•mb_convert_encording
if 〜 else (endif)
条件判定を行う
条件を満たす満たさないの判断を行う
<?php
if($a) {
echo '条件を満たす';
} else {
echo '条件を満たさない';
}
<div>満た
<?php if($a): ?>
<div id='a'>す</div>
<?php else: ?>
<div id='c'>さない</div>
<?php endif; ?>
</div>
どんな時に使
うか
入力値が予想と違
う
取得した値によっ
て処理を切り分け
る
条件が複数
ある場合
(PHP8)
<?php
$a = 6;
echo match($a) {
1 => 'first',
2 => 'second',
3,4 => 'other',
default => 'default'
};
http://localhost:8080/match.php
繰り返し処理
for 決まった回数など
foreach 配列の繰り返
し
while(do while) 条件
がtrueの間
配列の添字は0から始まります。
<?php
$numbers = array('2','3','4','5','6');
echo $numbers[0]; //2が表示
echo $numbers[2]; //4が表示
http://localhost:8080/sample40.php
最も利用するであろうforeach
<?php
$numbers = array('2','3','4','5','6');
foreach($numbers as $val) {
echo $val;
}
http://localhost:8080/sample4.php
key value
<?php
$numbers = array(
'名前' => '柏岡',
'出身' => '東京',
'役割' => 'スクラムマスター');
foreach($numbers as $key => $val) {
echo $key . ':' . $val . '<br/>';
}
http://localhost:8080/sample5.php
表示すると怖い文字を置き換える
htmlspecialchars
&"'<>といったHTMLで意味ある文字をhtmlの表示形式に変換する
=
javascript、不正なsql実行等によるセキュリティーリスクを回避す
る。
入力されたデータは出力する直前に必ずhtmlspecialcharsを通す
フレームワークを使っていても確認しましょう。
<?php
$new ="<a href='test'>Test</a>";
echo $new;
<?php
$new ="<a href='test'>Test</a>";
echo htmlspecialchars($new,ENT_QUOTES);
http://localhost:8080/sample6.php
どのように
表示される
か?
ファイルの読み込み
htmlの量産にも便利
require_once
<?php
require_once('header.html');
require_once('body.php');
require_once('footer.html');
http://localhost:8080/sample7.php
HTML組み込み型のサンプル
WordPressの場合
wp-content/
themes/
twentytwentyone/
header.php
値を取得する
入力フォームから入力された値
$_POST
http://localhost:8080/get.php?id=123456
$_GET
何が入ってくるかわからないので利用までに注意
する!
バリデーションやDB専用のエスケープ処理、プ
リペアードステートメントなど
値の取得
<?php
echo $_GET['id'];
echo $_POST['id'];
実際はhtmlspecialchars()したり
値の確認
var_dump()
http://localhost:8080/var_dump.php?id=1
関数
• 繰り返される処理を共通化
• function 関数名([型] [引数],,,) {
• }
• なんども出てくる処理を関数化しておく
。
<?php
function hsp(string $str) {
return htmlspecialchars($str,ENT_QUOTES);
}
function add1(int $num = 0) {
return $num + 1;
}
echo hsp('<');
echo add1(10);
http://localhost:8080/sample8.php
クラス
https://www.php.net/manual/ja/language.oop5.basic.php
これくらいわかればOK
自分この先進む場合はクラスの扱いなどを勉強しましょう
PHPのオンラインマニュアルの充実度が凄い
PHPの歴史
https://www.php.net/manual/ja/history.php.php
言語リファレンス
https://www.php.net/manual/ja/langref.php
次の一歩
アプリケーションをインストー
ルしてみる
フレーム
ワークを
使ってみ
よう
Laraval
CakePHP
Symphony
CodeIngiter
日本
世界
実践編
CSVファイルを
読み込んで表
示するプログ
ラムを作る
材料
開発環境
お好きなエディタ
php.net マニュアル
CSVファイル
CSVを読み込む
関数名がわからなければとりあえず検索
fgetcsvってのが見つかった
https://php.net/manual/ja/function.fgetcsv.php
がんばって読むとわかる
わからなければサンプルを
php.net より
php.net より
さらにマニュアルで調べてみよう
わからない関数を右上に入れてみる。
マニュア
ルを読ん
でみる
fopen — ファイルまたは URL をオープンする
whileループは、PHPで最も簡単なタイプのル
ープです。
count — 変数に含まれるすべての要素、 ある
いはオブジェクトに含まれる何かの数を数える
fclose — オープンされたファイルポインタを
クローズする
これを踏まえて
なんとなくわかった
サンプルを
そのまま動
かしてみる
•マニュアルのソースを
fget1.phpとして作成
•http://localhost:8080/fget1.ph
p
• Warning: fopen(test.csv): Failed to open stream:
No such file or directory in /home/www-
data/fget1.php on line 3
•エラーがでるのでcsvファイル
を置いてみましょう。
test.csvを作る
"トラック","タイトル","開始時間"
"Track1","17年続くWebサービスを改善する 〜新卒2年目からみるカラ
"Track1","Mercari JPのモノリスサービスをKubernetesに移行した話
"Track1","リリースして11年経過したPHPアプリケーションにPHPSta
"Track2","AWS CDK に魅入られた PHPer がオススメする IaC から入
"Track2","なるべくJavaScriptを書かないでSymfonyのUIをリッチにす
"Track3","PHP初心者セッション","11:20"
ファイルを置いて実行してみましょう
csvファイルを置く場所はphpファイルと同じ階層にします。
http://localhost:8080/fget1.php
プログラムのパートを見てみましょう
不要なものを消
しましょう
$num や $rowは不要
不要そうな行を消しました。
$numはforループで使ってます。
でも短くなりました
実行すると
ループの構造
count($data)で出している
1行のフィールド数は決まっているので
内側のループをやめてみる。
whileで取得している$dataをvar_dumpし
てみる
http://localhost:8080/fget3.php
arrayの表示を$data[添字]形式で行う
http://localhost:8080/fget4.php
テーブルで表示してみましょう
テーブルの構造
同じような部分をループで表示させる
ループを同様に繰り返させる
テーブル作成
色々調整してみよう
表示する項目を選択する
表示項目にはhtmlspecialchars()をかける
絞り込みを入れる
http://localhost:8080/list.php
サンプルソース
<h1>PHPカンファレンス2022 初日午前セッション</h1>
絞り込み:<a href="list.php?room=Track1">Track1</a>
<a href="list.php?room=Track2">Track2</a>
<a href="list.php?room=Track3">Track3</a>
<a href="list.php?room=Track4">Track4</a>
<table border=1>
<?php
if (isset($_GET['room'])) {
$room = $_GET['room'];
}else{
$room = 'Track1';
}
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($room === $data[0] ) {
echo "<tr>";
echo "<td>". hsc($data[0])."</td>" . PHP_EOL;
echo "<td>". hsc($data[1])."</td>" . PHP_EOL;
echo "<td>". hsc($data[2])."</td>" . PHP_EOL;
echo "</tr>";
}
}
fclose($handle);
}
?>
</table>
<?php
function hsc(string $str) {
return htmlspecialchars($str,ENT_QUOTES);
}
http://localhost:8080/list.php?room=Track1
マニュアルと仲良くなろう
まとめ
PHPの環境を作ってみましょう。
PHPアプリケーションをインストー
ルしてみましょう
簡単なプログラムを書いてみましょ
う。
フレームワークのチュートリアルを
してみましょう。
アプリのカスタマイズをしてみまし
ょう。
ぜひお試しください!
PHP初心者セッション
有限会社アリウープ
柏岡 秀男
twitter,facebook @kashioka
#track3_コンベうめ
PHPCON_TOKYO_2022_Bigginer.pptx

Mais conteúdo relacionado

Semelhante a PHPCON_TOKYO_2022_Bigginer.pptx

Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ーWeb デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Kite Koga
 
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたPHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
Ryuji Yamashita
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
Hiroaki Murayama
 

Semelhante a PHPCON_TOKYO_2022_Bigginer.pptx (20)

第21回Creators MeetUp
第21回Creators MeetUp第21回Creators MeetUp
第21回Creators MeetUp
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
第104回 php勉強会@東京 Laravel
第104回 php勉強会@東京 Laravel第104回 php勉強会@東京 Laravel
第104回 php勉強会@東京 Laravel
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
 
PHP5技術者認定初級試験を受験しました
PHP5技術者認定初級試験を受験しましたPHP5技術者認定初級試験を受験しました
PHP5技術者認定初級試験を受験しました
 
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ーWeb デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたPHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
 
php in ruby
php in rubyphp in ruby
php in ruby
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
 
WordPress のための PHP 超入門
WordPress のための PHP 超入門WordPress のための PHP 超入門
WordPress のための PHP 超入門
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 

Mais de Hideo Kashioka

Mais de Hideo Kashioka (8)

スクラム初心者セッション.pdf
スクラム初心者セッション.pdfスクラム初心者セッション.pdf
スクラム初心者セッション.pdf
 
XP祭りオフショアメンバーのいるスクラム.pptx
XP祭りオフショアメンバーのいるスクラム.pptxXP祭りオフショアメンバーのいるスクラム.pptx
XP祭りオフショアメンバーのいるスクラム.pptx
 
日本とオフショアのハイブリットチームのスクラム
日本とオフショアのハイブリットチームのスクラム日本とオフショアのハイブリットチームのスクラム
日本とオフショアのハイブリットチームのスクラム
 
Phpcon2020sponsor lt php8_on_lambda
Phpcon2020sponsor lt php8_on_lambdaPhpcon2020sponsor lt php8_on_lambda
Phpcon2020sponsor lt php8_on_lambda
 
Phpcon2001 in tokyo
Phpcon2001 in tokyoPhpcon2001 in tokyo
Phpcon2001 in tokyo
 
明日の開発カンファレンスパネル
明日の開発カンファレンスパネル明日の開発カンファレンスパネル
明日の開発カンファレンスパネル
 
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッションPHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
 
Php+Word Press
Php+Word PressPhp+Word Press
Php+Word Press
 

PHPCON_TOKYO_2022_Bigginer.pptx

Notas do Editor

  1. ハッシュタグは同時
  2. https://fortee.jp/phpcon-2019/timetable
  3. php.netから見てみましょう
  4. 英語で難しいですが簡単に言うと
  5. とはいえ、WEBの範囲
  6. ownCloudファイル共有
  7. どのような環境で実行されるのか
  8. さくらインターネットやGMOなどが有名 専用サーバやホスティング OSのアップデートなどセキュリティ観点
  9. その他はIBMや色々
  10. もともとXAMPPはwindownsでMAMPがMacでしたが今はどちらも両方のバージョンが出ていますのでお好みで
  11. 仮想環境
  12. 自分でdockerfileを作ることもできますがすでに公式から出ているものもあります apache fpm php-fpm cli コマンドライン zts zend thread safe bullseyev11ブルズアイbusterv10バスターstretchv9ストレッチjessiev8ジェシー slimあまり使わないあぷりがない
  13. https://hub.docker.com/_/php/?tab=tags&page=1&name=alpine
  14. ポートはdockerfileで書いたものです index.phpを置いてためしてみましょう。 index.php見てみる
  15. 上部にPHPcon2020 そしてphpinfoが表示されました
  16. 簡単にPHPの概要を説明します。
  17. 設定で変更できますが、基本的に 読み込まれるファイルに.incなどを使う古いものもありますが この場合.incをphpとして扱って、内容が見れないように設定する必要があります。
  18. http://localhost:8080/sample1.php
  19. ソースを見て見るとどうでしょうか
  20. 数値の演算は+-*/ php7までは文字列の数字でも足し算できていた。
  21. スクリプト言語の関数は親しみやすい なんとなく関数を覚えていればOK マニュアルの見方 http://php.net
  22. 条件の部分はtrueか否かをみますので 条件式なども入れられます
  23. HTMLのタグ的な別の書き方
  24. 型が厳密
  25. PHPは配列が得意です 配列を順に処理するようなプログラムをはじめのうちはよく作成することになると思います。
  26. キーバリューの配列などどちらも取得できます。
  27. 表示するときの注意として特殊文字の変換があります
  28. 他のファイルを読み込むことができる
  29. Ssh して /home/alleyoop.jp/wordpress/wp-content/themes phpcon2019の配下に
  30. get.php
  31. ちなみにvar_dumpをそのまま出すことはないとおもいますが<s>などすると
  32. ownCloudファイル共有
  33. それぞれ特徴はあるけれども、大抵のものは作れます それぞれのサイトでクイックスタート、チュートリアルなどをまずは試してみて合うものを探しましょう。
  34. ・関数の名前 ・引数の説明
  35. 例が出てくる
  36. ソースを見てみると!!!!!!!!!!!!
  37. エラーの読み方 重要なのは行数 いつもその行とは限らない
  38. Excelで作成可能ですが MacのExcelの場合改行コードの変換が必要。 一旦file_get_contentsなどで全部読み込んで正規表現でかえるなど Viやコマンドラインで変換しても良い :1,$ s/^M/¥r/g など^Mはctl+vの後にctr+mで入力
  39. サンプルのままですが、もとのサンプルがあるだけフィールドを表示して、フィールドの数も表示するというプログラムでした。
  40. サンプルのままですが、もとのサンプルがあるだけフィールドを表示して、フィールドの数も表示するというプログラムでした。
  41. 変更して
  42. HTMLのテーブルのおさらい
  43. http://loalhost:8080/csv3.php ソースをみたりしてみましょう。 ブラウザのソースとPHPのソース
  44. バリデーションなども考慮しましょう
  45. いちばんやさしいはやさしい PHP基礎入門は少し先
  46. 実際やって、マニュアルみて、書いて、デバッグしてチャレンジしましょう。