20210506のPHPに関する記事は6件です。

Docker X Laravel ハンズオンイベントを主催して分かったことまとめ

イベント DockerでLaravelのローカル環境を構築するハンズオン(オンライン) https://php-builders.connpass.com/event/211985 合計65人の方に参加申し込みいただきました。ありがとうございます? discordのイベントチャンネルも50人以上オンラインになっておりハンズオンにしては大規模な開催となり嬉しく思います。 約12名の方に一緒にハンズオンしていただき、全員ハンズオン成功しました。 PHP Builders(ぴーえっちぴー びるだーず) PHPerによる、PHPerのための、PHPを勉強する勉強会コミュニティです。 教えたい/教わりたい/勉強したい方を歓迎してます! connpass内にDiscordグループの招待リンクがあります。 質問や相談、雑談などもできますので、気軽にご参加ください。 https://php-builders.connpass.com 資料 ハンズオン資料記事: https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4 完成したリポジトリ: https://github.com/ucan-lab/docker-laravel-handson 宣伝 LaravelのOSSパッケージ開発を行なってます。 よければStarいただけると嬉しいです。 https://github.com/ucan-lab/docker-laravel https://github.com/ucan-lab/laravel-dacapo ハンズオン参加レポート ガミネさん(@gaminessium)が参加レポートを書いてくださりました? https://gaminessium.github.io/2021/05/02/laravel-handson-202105 ハンズオン中の問題 ハンズオン中に発生したトラブルをまとめした。 docker compose コマンドがない docker compose コマンドは、docker desktop 3.2.1以降に技術プレビュー版としてリリースされた新しい docker コマンドのサブコマンドです。 Docker for Mac, Docker for Windowsを予めアップデートしておく必要がある。 docker compose down -v がバグってる docker compose は技術プレビュー版のためか名前付きボリュームが削除されないバグがある。 https://github.com/docker/compose-cli/issues/1553 https://github.com/docker/compose-cli/pull/1618 修正済みですが、記事執筆時点(v1.0.14)ではまだリリースされてない模様です。 謎のエラー ハンズオン中にでた謎のエラーです。 実はリハーサルしてて同じエラーが出ていました。結局原因はわからないままですがdocker desktopをrestartすることで解決しました。 【Docker】Error response from daemon: invalid mount config for type "bind": bind source path does not exist マイグレーションでエラー このエラーが出た時は、原因わからなくて少し焦ってたんですがチャットサポートしてくれた方が教えてくださりました。 $ docker compose exec app bash root@28e246f56b19:/work# php artisan migrate Illuminate\Database\QueryException SQLSTATE[HY000] [1130] Host '172.22.0.2' is not allowed to connect to this MySQL server (SQL: select * from information_schema.tables where table_schema = laravel_local and table_name = migrations and table_type = 'BASE TABLE') at vendor/laravel/framework/src/Illuminate/Database/Connection.php:678 674▕ // If an exception occurs when attempting to run a query, we'll format the error 675▕ // message to include the bindings with SQL, which will make this exception a 676▕ // lot more helpful to the developer instead of just the database's errors. 677▕ catch (Exception $e) { ➜ 678▕ throw new QueryException( 679▕ $query, $this->prepareBindings($bindings), $e 680▕ ); 681▕ } 682▕ このエラーが発生した場合は my.cnf を作成する前に docker compose up -d でビルドしてしまった可能性が高いです。 (って自分のハンズオン記事の補足に書いてありました...) $ docker-compose down --volumes $ docker compose build db $ docker compose up -d docker compose down --volumes は名前付きボリュームを削除してくれない問題がある https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4#%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E8%A3%9C%E8%B6%B3 Firefoxでアクセスできない 普段Firefox使ってなかったので知らなかったです。 これはとても勉強になりました。 https://tenforward.hatenablog.com/entry/20070810/1186724991 公開ポート番号を80から8080など別の番号に変更してもアクセスできるみたいです。 ネットワーク回線遅い問題 docker pullやcomposer install等、ネットワーク回線によってなかなか進めない人がいた。 これは各家庭にnuro光を導入してもらうことで解決。 予めdockerイメージをpullしておいたり、ネットワーク使う箇所は質問タイムや解説タイムに使うといいかもしれないです。 雷は防げない 当日は雷の鳴る中のハンズオンイベントとなりました。 雨の音や雷の音が響く中、ハンズオンイベントが進められていました。 何かしらトラブルは起きるだろうと予想していましたが、参加者の中に停電が発生してしまう方がいました。 ノートPCは生きててもルーター落ちたら通信できなくて詰みますね... 質問 ハンズオン中に出た質問をまとめます。 phpMyAdminを入れるにはどうしたらいいか? 今回のハンズオンの対象ではないですが、そんなこともあろうかと記事を書いておきました。 Docker x Laravel phpMyAdmin のコンテナを構築する MySQLのGUIクライアントで接続したいのですがどうしたらいいか? Sequel Proという便利なMySQLのGUIクライアントツールがありますが、MySQL8に対応できていませんでした。 後継アプリのSequel Aceというアプリを紹介している記事があったのでご紹介します。 Sequel AceでMySQLに接続する(Sequel Proの後継) 最小限の環境でLaravelを動かしてみたい docker-compose.yml 1ファイルでLaravel環境を作ることもできます。 webサーバーとdbサーバーなしの構成です。 Docker x Laravel 脅威の1ファイル!最小構成でローカル開発環境を構築する 感想 人数多かった割には大きな問題が起こることなく時間通りにハンズオン進めたのでとてもよかったです。 知らないエラーにも出会えて、私自身もとても勉強になりました。 都合が悪く参加できなかった方もいらっしゃるので、機会があればまたイベントを開催したいと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】お問い合わせフォームに簡易なスパム対策をサクッと実装する

やりたいこと ・必要事項を入力するとメールが送られるお問い合わせフォームを設置したが、スパムメールがたくさん来る。 ・完璧じゃなくて良いので、スパム対策をあまり手をかけずにサクッと実装したい。 ↑こんな感じのごく一般的なお問い合わせフォーム どんなロジックで対策するか? ・スパムを送りつけてくるのは主にスパムbotと呼ばれるもの。 ・このbotは、フォーム内のすべての項目に自動的に入力して送信してくることが多い。 この特性を利用し、まずViewのformタグの中に「非表示の項目」を作り、そこに入力がある場合はスパムと判断し404に飛ばす処理をします。いわゆる簡易なHoneypot保護機能です。 実装手順 ①Viewの実装 まずはViewのフォーム部分に隠し項目を追加します。名前は適当にhoneypotとしていますが、何でも良いです。 今回はFormファサードを使用していますが、htmlのformタグの場合はhidden属性で入力項目を追加します。 _contact_form.blade.php <div id="anchor-contact" class="p-front__contact"> <h3 class="p-front__contact-heading">下記のフォームよりお問い合わせください</h3> {{ Form::open(['method' => 'POST', 'url' => route('common.send')]) }} 〜中略〜 {{ Form::text('honeypot', '', ['style' => 'display:none']) }} <div class="c-button" data-type="contact"> <button type="submit" class="check-button">この内容で送信する</button> </div> </form> </div> ②Controllerの実装 次に、送られてきたリクエストに上記のhoneypotの値があった場合は404に飛ばす処理を追加します。 commonController.php public function send(CommonRequest $request) { if (isset($request->honeypot)) { abort(404); } 〜後略〜 ..と、これだけなのですが以上で実装は完了です。 ディベロッパーツールで隠し項目に適当な項目を入力して送信してみると、404ページに遷移するのが確認できると思います。 以上、最後までお読みいただきありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel入門

環境 MAMP Laravel 8 PHP 8.0 アプリの作成 $ composer create-project laravel/laravel --prefer-dist アプリ名 $ cd アプリ名 $ chmod -R 777 storage $ chmod -R 777 bootstrap/cache マイグレーションのファイルの生成 $ php artisan make:migration create_テーブル名(複数形)_table マイグレーションのファイル変更 public function up() { if (!Schema::hasTable('blogs')) { //追記 Schema::create('blogs', function (Blueprint $table) { $table->id(); $table->string('title', 100); //追記 $table->text('content'); //追記 $table->timestamps(); }); } } if (!Schema::hasTable('blogs')) => もし、blogsが無かったらテーブルを作る。 $table->string('title', 100); => string型でカラム名をtitle、文字数を100まででカラムを作ります。 データベースに反映させる $ php artisan migrate データベースが作成されているのでphp MyAdminにて確認する。 モデルを作成 $ php artisan make:model (単数形) class Blog extends Model { use HasFactory; //テーブル名 protected $table = 'blog'; //追記 //可変項目 protected $fillable = //追記 [ 'title', 'content' ]; } ルーティングの追加 routes/web.php Route::get('/', 'BlogController@show')->name ('blog'); localhost:8888にアクセスした際にHTTPはgetでBlogController@show`->BlogControllerのshowメソッドが呼ばれる。 コントローラの作成 $ php artisan make:controller BlogController Http/Controller/BlogControier.php class BlogController extends Controller { /** * * @return view */ public function show() { return view('blog.list'); } } return view('blog.list');->views/blog/list.blade.phpを表示させる。 bladeの使い方 簡略的に言うと作成したviewファイルを他のファイルでも表示させる機能です。 書き方は@include('header')や@yield('content')と書きます。 @include('表示したいファイル')注意点は、('相対パスで書く')こと @yield('content')は継承したファイルを表示させることができる。 show.blade.php @extends('layout') //継承する @section('content') //表示させたい範囲 @endsection layout.blade.php <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Laravel_practice</title> <link rel="stylesheet" href="/css/app.css"> <script src="/js/app.js" defer></script> </head> <body> <header> @include('header') //同じ階層のheader.blade.php </header> <div> @yield('content') //継承している@section('content')〜@endsectionまで </div> <footer> @include('footer') //同じ階層のfooter.blade.php </footer> </body> </html> 終わり 筆者は、Railsを学習してからLaravelを学んでいるのですが共通する部分が多く、比較的に学習しやすいです。Larabel学習したばかりですので間違っていたらすみません。PHPはフレームワークの種類が多く学ぶのが大変そうですが、引き続きLaravel頑張ります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPでORMを自作する

背景 フレームワークを自分で作って理解したいと思い、簡単に作ってみました。 まだまだ作成中ですが、とくに勉強になったORMまわりのコードを記事にしました。 リポジトリ こちらが作成中のフレームワークになります。 https://github.com/ksrnnb/php_framework ORM Laravelっぽく使えるのを意識して実装しました。 まだ単純なSELECT文しか使えませんが、SQLを意識せずに使えるコードになっているかと思います。 もっと良い書き方などあればご指摘いただけると嬉しいです。 個人的なポイント チェーンメソッドで何回でもwhereを実行できる SQLの結果をモデルのインスタンスとして取得できる。 自動的にUserモデルはusersテーブルに紐づく。 Modelクラス LaravelのモデルのようにUserモデルを作りたいときは、Modelクラスを継承して使います。 Modelクラスでwhereメソッドを実装しています。 この中で、DBクラスのwhereメソッドを呼び出します。 <?php abstract class Model { protected static $table; private static $db; // relation public function __get($name) { if (method_exists($this, $name)) { $this->$name(); } } public function hasOne($class, $me_id = "", $to_id = "") { // TODO: 実装 // $class::where(); } public function hasMany($class, $me_id = "", $to_id = "") { // TODO: 実装 // $class::where(); } public function belongsTo($class, $me_id = "", $to_id = "") { // TODO: 実装 // $class::where(); } public static function first($column, $value, $operator = "=") { self::initDB(); return self::where($column, $value, $operator)->first(); } public static function where($column, $value, $operator = "=") { self::initDB(); return self::$db->where($column, $value, $operator, get_called_class()); } private static function initDB() { if (is_null(self::$db)) { self::$db = new DB(); } } } DBクラス 呼び出されたwhereメソッドはSQL文を作成して、自身のインスタンスを返します。 こうすることで、Laravelのようにメソッドチェーンでwhereメソッドを呼ぶことができます。 getメソッドでSQL文を実行し、その結果をもとにモデルをインスタンス化し、プロパティに値を代入するようにしています。 その後、Collectionクラスのインスタンスを生成します。 <?php <?php class DB { private $sql; private $pdo; private $modelName; private $columns; private $table; // TODO: 環境変数にする private $host = 'db'; private $dbname = 'framework'; private $username = 'root'; private $password = 'password'; public function __construct() { $this->connectDatabase(); } private function connectDatabase() { $this->pdo = new PDO( "mysql:host={$this->host};dbname={$this->dbname}", $this->username, $this->password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ]); } // TODO: nullに対応 public function first() { $result = $this->run(); $models = $this->resolveModels($result); return (new Collection($models))->first(); } // TODO: nullに対応 public function where($column, $value, $operator = "=", $model_name = null) { if ($model_name) { $this->modelName = $model_name; $this->table = $this->resolveTableName(); } if (is_null($this->sql)) { $this->sql = "SELECT * FROM {$this->table} WHERE $column $operator :$column"; } else { $this->sql .= " AND $column $operator :$column"; } $this->columns[$column] = $value; return $this; } private function resolveTableName() { // TODO: esなどへの対応 return lcfirst($this->modelName) . "s"; } private function run() { $sth = $this->pdo->prepare($this->sql); foreach ($this->columns as $column => $value) { $sth->bindValue(":$column", $value, $this->resolveType($value)); } $sth->execute(); return $sth->fetchAll(PDO::FETCH_CLASS); } public function get() { $result = $this->run(); $models = $this->resolveModels($result); return new Collection($models); } private function resolveType($value) { $types = [ 'int' => PDO::PARAM_INT, 'bool' => PDO::PARAM_BOOL, 'string' => PDO::PARAM_STR, ]; return $types[gettype($value)]; } /** * 配列の要素を連想配列からモデルへ */ private function resolveModels($properties) { $resolved = []; foreach ($properties as $property) { $resolved[] = $this->resolveModel($property); } return $resolved; } /** * 連想配列からモデルへ */ private function resolveModel($property) { $class = $this->modelName; $model = new $class(); foreach ($property as $key => $value) { $model->$key = $value; } return $model; } } コレクション コレクションはほぼ未実装です。ここでeachやmergeなどのメソッドを定義してやれば、Laravelのような感覚で使用できるようになるかと思います。 <?php class Collection { private $data = []; public function __construct($data) { $this->data = $data; } // TODO: イテレータ処理の実装 public function first() { return $this->data[0]; } } 使い方 レコードを1個しか入れなかったため微妙な例とはなっていますが、Laravelとほぼ同様に使用できます。 <?php class HomeController extends Controller { public function index() { $user = User::where('id', '1') ->where('email', 'test@test.com') ->first(); var_dump($user); /* object(User)#10 (4) { ["id"]=> int(1) ["name"]=> string(9) "TEST USER" ["email"]=> string(13) "test@test.com" ["password"]=> string(8) "password" } */ } } 参考文献 パーフェクトPHP 今回載せたORMまわりは微妙ですが、ルーティングやオートロードが非常に参考になりました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

OCS Inventory-NG 2.9インストール時のエラーまとめ

本記事について OCSInventory-NG 2.9をインストールした際に発生したエラーとその対処方法をまとめておきます。 OCSInventoryインストール時に発生したエラー Perlモジュールのチェックでエラーが出た。 エラーが出るとインストールを続けるか聞かれたので、一旦インストールを終了して、足りなかったモジュールApache::DBIの追加インストールを実施した。 ※公式ドキュメントの通りにパッケージを入れたはずだが足りなかった。 ■エラーメッセージ抜粋 +----------------------------------------------------------+ | Checking for required Perl Modules... | +----------------------------------------------------------+ Checking for DBI PERL module... Found that PERL module DBI is available. Checking for Apache::DBI PERL module... *** ERROR: PERL module Apache::DBI is not installed ! Checking for DBD::mysql PERL module... Found that PERL module DBD::mysql is available. Checking for Compress::Zlib PERL module... Found that PERL module Compress::Zlib is available. Checking for XML::Simple PERL module... Found that PERL module XML::Simple is available. Checking for Net::IP PERL module... Found that PERL module Net::IP is available. Checking for Archive::Zip Perl module... Found that PERL module Archive::Zip is available. *** ERROR: There is one or more required PERL modules missing on your computer ! Please, install missing PERL modules first. OCS setup.sh can install perl module from packages for you The script will use the native package from your operating system like apt or rpm Do you wish to continue (y/[n])? ■追加インストールコマンド yum install perl-Apache-DBI PHP7.2でOCSInventoryを動作させた際のエラー PHP7.2で動作させようとしたら、500エラーとなった。 /var/log\httpd/error.logを確認したところ以下のエラーが出ていることを確認。 どうやらPHP7.2ではmysqli_real_escape_string()という関数が破棄されていて動作できないから出たエラーということ。 PHP Fatal error: Uncaught Error: Call to undefined function mysqli_real_escape_string() in /usr/share/ocsinventory-reports/ocsreports/require/function_commun.php:67 Stack trace: #0 /usr/share/ocsinventory-reports/ocsreports/require/function_commun.php(85): generate_secure_sql('select NAME,IVA...', Array) #1 /usr/share/ocsinventory-reports/ocsreports/require/function_commun.php(37): mysql2_query_secure('select NAME,IVA...', NULL, Array) #2 /usr/share/ocsinventory-reports/ocsreports/require/function_commun.php(346): look_config_default_values('CUSTOM_THEME') #3 /usr/share/ocsinventory-reports/ocsreports/install.php(30): html_header(true) #4 /usr/share/ocsinventory-reports/ocsreports/require/header.php(84): require('/usr/share/ocsi...') #5 /usr/share/ocsinventory-reports/ocsreports/index.php(44): require('/usr/share/ocsi...') #6 {main} thrown in /usr/share/ocsinventory-reports/ocsreports/require/function_commun.php on line 67 PHP7.2での動作は諦めアンインストールし、PHP5.6をインストールして動作することを確認。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPとLaravelの勉強中に学んだこと

Laravelのバージョン情報 Laravelのversion リリース日 対応PHPのversion 7 2020年3月 7.2.5以上 8 2020年9月 7.3以上 9 2021年9月予定 7.4以上予定 10 2022年9月予定 未定 バージョン確認方法 php artisan --version MAMPをインストール MAMPと検索して一番上に出てきたものをインストール https://www.mamp.info/en/downloads/ 2021年5月現在は6.3 MAMPとは Web開発に必要なフリーソフトをまとめて扱うパッケージソフトウェア MAMPの使い方 MAMP.appとMAMP PRO.appがあるが、MAMP.appを開く MAMP.appを開くと、右上にStartボタンがあるので押すとローカルでサーバーが起動し、ブラウザが開く ToolからPHPMYADMINを開くことによって、データベースの中身を見ることができる ポートはデフォルトだとhttpが8888、DBが8889になっているが、設定により標準の80(http)と3306(DB)にすることが可能 余談 画面のズームイン・ズームアウト option+command+^でズームイン option+command+-でズームアウト option+command+8でズーム解除/ズーム有効の切り替え MAMPにおけるphpファイルを置く場所 アプリケーション> MAMP > htdocs ここにindex.phpを作成し、 phpの特徴 行末にセミコロン「;」が必要 phpの始まりの書き方 <?php ?> 「<?php」と「>?」の間にphpのコードを記述していく phpの情報を出力する phpinfo(); 文字列の表示 echo('文字列'); ()は省略可能 phpとHTMLを混在して記述する方法 <html> <head></head> <body> HTML <?php echo('php'); ?> </body> </html> 文字列の表現方法 ''か""で囲む '文字' "文字" ''で囲むことが多いっぽい 変数 $hensuu = 1; 基本的に英小文字 型を調べる var_dump($hensuu); phpでエラーが出ると表示されるページ 500 文字列連結 $moji1 = 1; $moji2 = 2; $moji3 = $moji1 . $moji2; echo $moji3; 12 注意 数字を文字列連結すると文字列になる 定数 const MAX = 10; $は不要 基本的に大文字 配列 $array = [1,2,3]; 間に文字列を指定することも可能 配列名をechoするとArrayという文字列が出力される 配列をvar_dumpで型表示する時に整形して表示する方法 $array = [1,'a',3]; echo '<pre>'; var_dump($array); echo '</pre>'; array(3) { [0]=> int(1) [1]=> string(1) "a" [2]=> int(3) } 二次元配列 $array = [ ['赤','青','緑'], ['紫','黄','黒'] ]; echo $array[1][1]; 黄 連想配列 キーと値で表現する配列 ``` $array = [ 'name' => '本田', 'height' => 170, 'hobby' => 'ゲーム', ]; echo $array['hobby']; ``` ゲーム $array = [ '本田' => [ 'height' => 170, 'hobby' => 'サッカー', ], '香川' => [ 'height' => 165, 'hobby' => 'ゲーム', ], ]; echo $array['本田']['height']; echo '<br>'; echo $array['本田']['hobby']; echo '<br>'; echo $array['香川']['height']; echo '<br>'; echo $array['香川']['hobby']; echo '<br>'; 170 サッカー 165 ゲーム 指定が途中で止まってるとArrayと表示される 余り % 条件分岐 if(条件){ } else if(条件){ } else { } ==は値が一致(型は問わない) ===は型も一致 空文字判定 empty(変数); 空ならtrue、空でないならfalse ただし出力すると空の時は1、空でない時は空白になる模様 論理演算子 && || and or どれでもいける foreachを使った繰り返し $members = [ 'name' => '本田', 'height' => 170, 'hobby' => 'サッカー', ]; foreach($members as $member){ echo $member; echo '<br>'; } 本田 170 サッカー $members = [ 'name' => '本田', 'height' => 170, 'hobby' => 'サッカー', ]; foreach($members as $key => $value){ echo $key . ' ' . $value; echo '<br>'; } name 本田 height 170 hobby サッカー 連想配列の中に連想配列がある場合は2重でforeachを使えばOK for for($i=0; $i<10; $i++){ 処理 } while while(条件){ 処理 } switch switch($data){ case 1: 処理 break; case 2: 処理 break; case 3: 処理 break; default: 処理 } if文のほうが好ましいらしい なぜならこの書き方では型までは見ないため 一応switchでも===を使う方法はある case $data === 1: のようにする こうするくらいならifのほうがシンプルに書ける 関数 function test(引数1,引数2){ 処理 return 戻り値; } 文字列の長さ strlen(文字列); 'test'なら4って返ってくる 333なら3って返ってくる intで返ってくる マルチバイト文字列だと文字数でない点に注意 マルチバイト文字列の場合は以下のようにする mb_strlen(文字列); 文字列を置換 $str1 = '置換前'; $str2 = str_replace('前', '後', $str1); echo $str2; 置換後 文字列を指定文字列分割する $str1 = '赤 青 緑'; $str2 = explode(' ',$str1); echo $str2[1]; 青 配列を指定文字列で連結する $str1 = ['赤','青','緑']; $str2 = implode(',',$str1); echo $str2; 赤,青,緑 特定の文字列が含まれているか確認する preg_match('/文字列/',変数); 郵便番号かどうかとか、メールアドレスかどうかに使われたりする 指定文字列を切り出す $str1='test'; /* 0originで1番目から2文字を切り出す */ $str2=substr($str1,1,2); echo $str2; es マルチバイト文字列の場合はmb_substrを使用する 配列操作にオススメのページ http://html2php.starrypages.net/php/array-funcs 配列に配列を追加 array_push グローバル変数について グローバル変数を利用する時はローカルでglobalと記述すると使えるが殆ど使わず、関数の引数にすることが多い 他のphpファイルを読み込む エラーで止まるようにする require(); require_once(); 警告でそのまま進む include(); include_once(); ()の中はそのファイルからのパス 相対パスでも絶対パスでも行ける __DIR__とするとそのファイルのパス __FILE__とすると現在のファイルのパス エラーや警告が表示されるようにする phpinfo();で出力されるConfiguration File (php.ini) Pathを確認する /Applications/MAMP/bin/php/php7.4.12/conf その中にphp.iniがあるのでバックアップを取っておく 続いてphp.iniの中にある display_errors = Off を display_errors = On に変更する ※コメント行じゃないほうを修正する必要がある 処理を止める方法 exit; var_dumpと組み合わせて使うと便利 スーパーグローバル変数 \$_GET $_POST 連想配列になってる デバッグする時はvar_dump($_GET);とすると色々と情報が見れて便利 GETとPOSTの違い リクエストパラメータの場所に違いがある GETだとurlにリクエストパラメータがつく POSTだとbodyにリクエストパラメータがつく phpコードとhtmlコードが混在している時に分かりやすくif文を書く裏技 見にくいほう <?php if(条件){ ?> htmlの記述 <?php } ?> 見やすいほう <?php if(条件): ?> htmlの記述 <?php endif; ?> 違いは{と}で括るか、:とendif;で括るか 書き方だけの違い 処理の内容としては同じ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む