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

[OCI]ウォレットを使用せずにPHPアプリケーションからAutonomous DatabaseにTLS認証で接続してみた

はじめに こちらの記事では、ウォレットを使用せずにSQL*PlusからAutonomous DatabaseにTLS認証で接続できることを確認しました。 今回は、php-oci8を使用したPHPアプリケーションから、ウォレットを使用せずにSQL*PlusからAutonomous DatabaseにTLS認証で接続してみます。 こちらの記事で作成したAutonomous DatabaseとComputeインスタンスを使用して環境を構築します。 1.PHP、php-oci8、httpd(Apache2)のインストールと設定 yumコマンドでPHP、php-oci8とApache2をインストールします。 [opc@compute1 ~]$ sudo yum install -y oracle-php-release-el7 Loaded plugins: langpacks, ulninfo Resolving Dependencies --> Running transaction check ---> Package oracle-php-release-el7.x86_64 0:1.0-5.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved =================================================================================================================== Package Arch Version Repository Size =================================================================================================================== Installing: oracle-php-release-el7 x86_64 1.0-5.el7 ol7_latest 14 k Transaction Summary =================================================================================================================== Install 1 Package Total download size: 14 k Installed size: 19 k Downloading packages: oracle-php-release-el7-1.0-5.el7.x86_64.rpm | 14 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : oracle-php-release-el7-1.0-5.el7.x86_64 1/1 Verifying : oracle-php-release-el7-1.0-5.el7.x86_64 1/1 Installed: oracle-php-release-el7.x86_64 0:1.0-5.el7 Complete! [opc@compute1 ~]$ sudo yum install -y php php-oci8-19c Loaded plugins: langpacks, ulninfo ol7_developer_php74 | 3.0 kB 00:00:00 (1/2): ol7_developer_php74/x86_64/updateinfo | 71 B 00:00:00 (2/2): ol7_developer_php74/x86_64/primary_db | 420 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package php.x86_64 0:7.4.28-1.0.1.el7 will be installed --> Processing Dependency: httpd-mmn = 20120211x8664 for package: php-7.4.28-1.0.1.el7.x86_64 --> Processing Dependency: php-cli(x86-64) = 7.4.28-1.0.1.el7 for package: php-7.4.28-1.0.1.el7.x86_64 --> Processing Dependency: php-common(x86-64) = 7.4.28-1.0.1.el7 for package: php-7.4.28-1.0.1.el7.x86_64 --> Processing Dependency: httpd for package: php-7.4.28-1.0.1.el7.x86_64 ---> Package php-oci8-19c.x86_64 0:7.4.28-1.0.1.el7 will be installed --> Processing Dependency: php-pdo(x86-64) = 7.4.28-1.0.1.el7 for package: php-oci8-19c-7.4.28-1.0.1.el7.x86_64 --> Running transaction check ---> Package httpd.x86_64 0:2.4.6-97.0.5.el7_9.4 will be installed --> Processing Dependency: httpd-tools = 2.4.6-97.0.5.el7_9.4 for package: httpd-2.4.6-97.0.5.el7_9.4.x86_64 --> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-97.0.5.el7_9.4.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-97.0.5.el7_9.4.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-97.0.5.el7_9.4.x86_64 ---> Package php-cli.x86_64 0:7.4.28-1.0.1.el7 will be installed ---> Package php-common.x86_64 0:7.4.28-1.0.1.el7 will be installed ---> Package php-pdo.x86_64 0:7.4.28-1.0.1.el7 will be installed --> Running transaction check ---> Package apr.x86_64 0:1.4.8-7.el7 will be installed ---> Package apr-util.x86_64 0:1.5.2-6.0.1.el7 will be installed ---> Package httpd-tools.x86_64 0:2.4.6-97.0.5.el7_9.4 will be installed ---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved =================================================================================================================== Package Arch Version Repository Size =================================================================================================================== Installing: php x86_64 7.4.28-1.0.1.el7 ol7_developer_php74 3.4 M php-oci8-19c x86_64 7.4.28-1.0.1.el7 ol7_developer_php74 148 k Installing for dependencies: apr x86_64 1.4.8-7.el7 ol7_latest 103 k apr-util x86_64 1.5.2-6.0.1.el7 ol7_latest 91 k httpd x86_64 2.4.6-97.0.5.el7_9.4 ol7_latest 1.2 M httpd-tools x86_64 2.4.6-97.0.5.el7_9.4 ol7_latest 93 k mailcap noarch 2.1.41-2.el7 ol7_latest 30 k php-cli x86_64 7.4.28-1.0.1.el7 ol7_developer_php74 5.1 M php-common x86_64 7.4.28-1.0.1.el7 ol7_developer_php74 1.1 M php-pdo x86_64 7.4.28-1.0.1.el7 ol7_developer_php74 122 k Transaction Summary =================================================================================================================== Install 2 Packages (+8 Dependent packages) Total download size: 11 M Installed size: 47 M Downloading packages: (1/10): apr-1.4.8-7.el7.x86_64.rpm | 103 kB 00:00:00 (2/10): httpd-2.4.6-97.0.5.el7_9.4.x86_64.rpm | 1.2 MB 00:00:00 (3/10): httpd-tools-2.4.6-97.0.5.el7_9.4.x86_64.rpm | 93 kB 00:00:00 (4/10): mailcap-2.1.41-2.el7.noarch.rpm | 30 kB 00:00:00 (5/10): apr-util-1.5.2-6.0.1.el7.x86_64.rpm | 91 kB 00:00:00 (6/10): php-7.4.28-1.0.1.el7.x86_64.rpm | 3.4 MB 00:00:00 (7/10): php-cli-7.4.28-1.0.1.el7.x86_64.rpm | 5.1 MB 00:00:00 (8/10): php-common-7.4.28-1.0.1.el7.x86_64.rpm | 1.1 MB 00:00:00 (9/10): php-oci8-19c-7.4.28-1.0.1.el7.x86_64.rpm | 148 kB 00:00:00 (10/10): php-pdo-7.4.28-1.0.1.el7.x86_64.rpm | 122 kB 00:00:00 ------------------------------------------------------------------------------------------------------------------- Total 19 MB/s | 11 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : php-common-7.4.28-1.0.1.el7.x86_64 1/10 Installing : apr-1.4.8-7.el7.x86_64 2/10 Installing : apr-util-1.5.2-6.0.1.el7.x86_64 3/10 Installing : httpd-tools-2.4.6-97.0.5.el7_9.4.x86_64 4/10 Installing : php-pdo-7.4.28-1.0.1.el7.x86_64 5/10 Installing : php-cli-7.4.28-1.0.1.el7.x86_64 6/10 Installing : mailcap-2.1.41-2.el7.noarch 7/10 Installing : httpd-2.4.6-97.0.5.el7_9.4.x86_64 8/10 Installing : php-7.4.28-1.0.1.el7.x86_64 9/10 Installing : php-oci8-19c-7.4.28-1.0.1.el7.x86_64 10/10 Verifying : php-pdo-7.4.28-1.0.1.el7.x86_64 1/10 Verifying : php-oci8-19c-7.4.28-1.0.1.el7.x86_64 2/10 Verifying : httpd-2.4.6-97.0.5.el7_9.4.x86_64 3/10 Verifying : mailcap-2.1.41-2.el7.noarch 4/10 Verifying : apr-1.4.8-7.el7.x86_64 5/10 Verifying : apr-util-1.5.2-6.0.1.el7.x86_64 6/10 Verifying : php-cli-7.4.28-1.0.1.el7.x86_64 7/10 Verifying : php-7.4.28-1.0.1.el7.x86_64 8/10 Verifying : httpd-tools-2.4.6-97.0.5.el7_9.4.x86_64 9/10 Verifying : php-common-7.4.28-1.0.1.el7.x86_64 10/10 Installed: php.x86_64 0:7.4.28-1.0.1.el7 php-oci8-19c.x86_64 0:7.4.28-1.0.1.el7 Dependency Installed: apr.x86_64 0:1.4.8-7.el7 apr-util.x86_64 0:1.5.2-6.0.1.el7 httpd.x86_64 0:2.4.6-97.0.5.el7_9.4 httpd-tools.x86_64 0:2.4.6-97.0.5.el7_9.4 mailcap.noarch 0:2.1.41-2.el7 php-cli.x86_64 0:7.4.28-1.0.1.el7 php-common.x86_64 0:7.4.28-1.0.1.el7 php-pdo.x86_64 0:7.4.28-1.0.1.el7 Complete! [opc@compute1 ~]$ Apacheの設定ファイル(/etc/httpd/conf/httpd.conf)を編集します。 sudo vi /etc/httpd/conf/httpd.conf ファイルの末尾に以下の内容を追加して、拡張子がphpのファイルをapplication/x-httpd-phpハンドラーに割り当てます。 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> httpdを起動します。 [opc@compute1 ~]$ sudo systemctl start httpd.service httpdの自動起動を設定します。 [opc@compute1 ~]$ sudo systemctl enable httpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [opc@compute1 ~] 2.firewalldの設定 firewalldの設定を変更し、HTTP(TCP80番)ポートを開放します。 [opc@compute1 ~]$ sudo firewall-cmd --add-port=80/tcp --zone=public --permanent success [opc@compute1 ~]$ sudo firewall-cmd --reload success [opc@compute1 ~]$ sudo firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: ens3 sources: services: dhcpv6-client ssh ports: 80/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [opc@compute1 ~]$ 3.SElinuxの設定 SElinuxの設定を変更します。 [opc@comp1 ~]$ sudo setsebool -P httpd_can_network_connect_db=1 [opc@comp1 ~]$ 4.アプリケーションで使用するDBユーザとアプリケーションデータの準備 SQL*PlusからadminユーザとしてAutnomous Databaseに接続し、アプリケーションで使用するユーザ"apuser"とアプリケーションで使用するテーブル"dept"を作成し、テーブル"dept"にデータを挿入します。 [opc@compute1 ~]$ sqlplus admin/Demo#1Demo#1@testatp1_high SQL*Plus: Release 19.0.0.0.0 - Production on 水 2月 23 11:31:34 2022 Version 19.14.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. 最終正常ログイン時間: 水 2月 23 2022 11:14:25 +00:00 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.14.0.1.0 に接続されました。 SQL> GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO apuser IDENTIFIED BY Test#1Test#1; 権限付与が成功しました。 SQL> CREATE TABLE apuser.dept ( 2 deptno NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, 3 dname VARCHAR2(14), 4 loc VARCHAR2(13) 5 ); 表が作成されました。 SQL> INSERT INTO apuser.dept VALUES (10,'ACCOUNTING','NEW YORK'); 1行が作成されました。 SQL> INSERT INTO apuser.dept VALUES (20,'RESEARCH','DALLAS'); 1行が作成されました。 SQL> INSERT INTO apuser.dept VALUES (30,'SALES','CHICAGO'); 1行が作成されました。 SQL> INSERT INTO apuser.dept VALUES (40,'OPERATIONS','BOSTON'); 1行が作成されました。 SQL> COMMIT; コミットが完了しました。 SQL> exit Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.14.0.1.0との接続が切断されました。 [opc@compute1 ~]$ 5.PHPアプリケーションの作成 apuserとしてAutonomous Databaseに接続し、dept表の内容を表示するPHPのWebアプリケーションを作成します。 [opc@comp1 ~]$ sudo vi /var/www/html/test.php /var/www/html/test.php <html> <head><meta charset="UTF-8"> <title>Connect from PHP Application to Autonomous Database using TLS Connection without Wallet</title> </head> <body> <?php error_reporting(E_ALL); ini_set('display_errors', '1'); $conn = oci_connect('apuser', 'Test#1Test#1', 'testatp1_high'); $stid = oci_parse($conn, 'SELECT deptno,dname,loc FROM dept ORDER BY deptno'); echo "<table border='1'>\n"; echo "<caption>DEPT Table</caption>\n"; echo "<tr><th>Dept No.</th><th>Dept Name</th><th>Location</th></tr>\n"; oci_execute($stid); while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) { echo "<tr>\n"; foreach ($row as $item) { echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&amp;nbsp;") . "</td>\n"; } echo "</tr>\n"; } oci_free_statement($stid); oci_close($conn); echo "</table><br>\n"; echo "Response from ".gethostname(); ?> </body> </html> 6.PHPアプリケーションの動作確認 作成したPHPアプリケーションにブラウザからアクセスしてみます。 ウォレットを使用せずにPHPアプリケーションからAutonomous DatabaseにTLS認証で接続できることが確認できました。 参考 [OCI]ウォレットを使用せずにSQL*PlusからAutonomous DatabaseにTLS認証で接続してみた
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

APIから気象情報を取得してグラフ化

はじめに OpenWeatherMapAPIから気象情報を取得してChart.jsを使ってグラフ化してみました。 例として、「現在の時刻から24h後までの東京都の気温の変化」を取得します。 環境 - Laravel6系(PHP) - OpenWeatherMapAPI - Chart.js(JavaScriptライブラリ) ソースコード例 ChartController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ChartController extends Controller { public function index() { // 天気API取得のための情報準備 $weatherConfig = array( 'appid' => '各自で取得', 'lat' => '26.231408', //沖縄の那覇市の緯度 'lon' => '127.685525', //沖縄の那覇市の経度 ); // 天気API取得とJSONデコード $weatherJson = file_get_contents('http://api.openweathermap.org/data/2.5/onecall?lat=' . $weatherConfig['lat'] . '&lon=' . $weatherConfig['lon'] . '&units=metric&lang=ja&APPID=' . $weatherConfig['appid']); $weatherData = json_decode($weatherJson, true); $hour = []; $temp = []; $dayLabels = []; $tempData = []; $weatherViewData = array(); // 1時間毎の天気の情報全て $weatherHours = $weatherData['hourly']; foreach($weatherHours as $weatherHour) { // 時間のラベル・気温のデータを取得 $dayLabels[] = date('m/d:H時', $weatherHour['dt']); $tempData[] = $weatherHour['temp']; $weatherViewData['dayLabels'] = $dayLabels; $weatherViewData['temp'] = $tempData; } // JSへ渡すためにエンコード $weatherViewData = json_encode($weatherViewData); return view('chart', ['weatherViewData' => $weatherViewData]); } } 解説 OpenWeatherMapAPIを取得 // 天気API取得のための情報準備 $weatherConfig = array( 'appid' => '各自で取得', 'lat' => '26.231408', //沖縄の那覇市の緯度 'lon' => '127.685525', //沖縄の那覇市の経度 ); // 天気API取得とJSONデコード $weatherJson = file_get_contents('http://api.openweathermap.org/data/2.5/onecall?lat=' . $weatherConfig['lat'] . '&lon=' . $weatherConfig['lon'] . '&units=metric&lang=ja&APPID=' . $weatherConfig['appid']); $weatherData = json_decode($weatherJson, true); APIのidの取得は公式HPで登録するだけでOK. https://openweathermap.org/ idの取得はこのブログが参考になる。 https://yuukiyg.hatenablog.jp/entry/2019/11/17/182410 緯度と経度は今回予め指定しているがフォームなどから取得しても良いし、APIのURLを変更すれば緯度・経度からではなく「東京都」のような都道府県名から取得することもできる。(割愛) JSONとして受け取るため、デコードが必要になる。 受け取ったJSONのデータを整形 // 1時間毎の天気の情報全て $weatherHours = $weatherData['hourly']; foreach($weatherHours as $weatherHour) { // 時間のラベル・気温のデータを取得 $dayLabels[] = date('m/d:H時', $weatherHour['dt']); $tempData[] = $weatherHour['temp']; $weatherViewData['dayLabels'] = $dayLabels; $weatherViewData['temp'] = $tempData; } // JSへ渡すためにエンコード $weatherViewData = json_encode($weatherViewData); JSONのデータをvar_dump()して頂くと分かるが、時間、気温、天候、天気を示すアイコンなど様々なものがJSONで取得できている。今回は一時間毎の気温を取得したいので、このような整形をしていて、最後にPHPからJavaScriptへ渡したいのでエンコードしている。 Chart.jsを使ったグラフの表示 表示部分に関わる部分のコードを抜粋↓ chart.blade.php <head> ...(割愛) <!-- chart.jsのCDN--> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"> </head> <body> <h1>気温グラフ</h1> <canvas id="chart"></canvas> <script> var weatherViewData = JSON.parse('<?php echo $weatherViewData; ?>'); // JSONデコード var ctx = document.getElementById("chart"); var chart = new Chart(ctx, { type: 'line', data: { labels: weatherViewData['dayLabels'], datasets: [ { label: '気温', data: weatherViewData['temp'], borderColor: 'rgba(255,0,0,1)', backgroundColor: 'rgba(0,0,0,0)' }, // { // * 複数のデータを追加可能 // }, ], }, options: { title: { display: true, text: '気温' }, scales: { yAxes: [{ ticks: { suggestedMax: 20, suggestedMin: 0, stepSize: 5, callback: function(value, index, values){ return value + '度' } } }] }, } }); </body> Chart.jsをCDNでネットワーク経由で利用 <head> ...(割愛) <!-- chart.jsのCDN--> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"> </head> 今回はCDNを使用。headタグの中にscriptを埋め込んでいる。 CDNを使う場合は、下記のURLからURLを取得できる。 https://cdnjs.com/libraries/Chart.js もちろんnpmでのインストールでもOK。 グラフ表示エリア <canvas id="chart"></canvas> HTML5から導入されたcanvasタグでグラフの表示エリアを指定。 Chart.jsの基本の使い方 var weatherViewData = JSON.parse('<?php echo $weatherViewData; ?>'); var ctx = document.getElementById("chart"); var chart = new Chart(ctx, { } PHPから渡ってきた$weatherViewDataをパースして、JavaScriptの変数weatherViewDataへ格納。 canvas要素のchartのidを指定して、Chartのライブラリを使っていく。 描画するグラフの値の設定 var chart = new Chart(ctx, { type: 'line', data: { labels: weatherViewData['dayLabels'], datasets: [ { label: '気温', data: weatherViewData['temp'], borderColor: 'rgba(255,0,0,1)', backgroundColor: 'rgba(0,0,0,0)' }, // { // * 複数のデータを追加可能 // }, ], }, options: { title: { display: true, text: '気温' }, scales: { yAxes: [{ ticks: { suggestedMax: 20, suggestedMin: 0, stepSize: 5, callback: function(value, index, values){ return value + '度' } } }] }, } 基本的にはtype, data, optionsを指定すればグラフは描けた。 dataの中でPHPから渡ってきた変数を使っている。 ・type => 今回は折れ線グラフを使用するために「line」を使用。 ・data => dataの中にlabelとdatasetを記入する。 ・options => オプションなので、グラフのタイトルや、Y軸のパラメータなどを指定する。 下記の記事が参考になる。 https://qiita.com/Haruka-Ogawa/items/59facd24f2a8bdb6d369#2-%E8%A8%98%E8%BF%B0%E5%BD%A2%E5%BC%8F Chart.jsでは他にも様々なグラフが書けるようなので挑戦してみたい。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

これでわかるLaravel8.Xのマルチ認証(Multi Auth)の設定方法

web.php Route::prefix('employee')->namespace('Emplyee')->name('employee.')->group(function(){ Auth::routes(); }); php artisan route:list ここで、修正してもLaravel8を使用している方は、エラーが出ちゃうと思います。 それはルーティングの指定がLaravel7とLaravel8で 変更になったからです。 その対処法はこちら ->namespace('App\Http\Controllers\Emplyee') これで、OKです! 詳しくはこちらの記事を参考にしてみてください!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

10: 多次元配列,

多次元配列 配列/連想配列の要素として格納できるのは、数値や文字列ばかりでは無い。 任意の型の値、例えば配列そのものを格納してもかまわない。 入れ子の配列 具体例 $data1 = [ [‘x-1’, ‘x-2’, ‘x-3’], [‘y-1’, ‘y-2’, ‘y-3’], [‘z-1’, ‘x-2’, ‘x-3’], ]; 配列$data1 0 1 2 0 [0,0]x-1 [0,1]x-2 [0,2]x-3 1 [1,0]y-1 [1,1]y-2 [1,2]y-3 2 [2,0]z-1 [2,1]z-2 [2,2]z-3 上記は二次元配列 このように「配列の配列」を表すようなケースでは、最低限、要素ごとに改行とインデントを加えると構造が分かりやすくなり、コードも読みやすくなる。 構文規則ではないが、少し心掛ける。 配列の配列から値を取り出すには、これまでと同様、ブラケット構文でそれぞれの次元のインデックス番号を指定する。 $data[1][0] //結果: y-1 インデックス番号が一つだけの配列を一次元配列、インデックス番号が二個の配列(配列の配列)を二次元配列、またはより一般的に多次元配列とも言う。 理論的には、同じ要領で[...]を入れ子にすることで、4次元、5次元配列を作成することもできるが、直感的に理解しやすいと言う意味でも、普通に利用するのはせいぜい3次元配列まで。 $data2 = [ [ [‘s牛肉’, ‘m牛肉’, ‘l牛肉’], [‘s豚肉’, ‘m豚肉’, ‘l豚肉’], [‘s鶏肉’, ‘m鶏肉’, ‘l鶏肉’], ], [ [‘sコーラ’, ‘mコーラ’, ‘lコーラ’], [‘sサイダー’, ‘mサイダー’, ‘lサイダー’], [‘sファンタ’, ‘mファンタ’, ‘lファンタ’], ], [ [‘sポテト’, ‘mポテト’, ‘lポテト’], [‘sカレー’, ‘mカレー’, ‘lカレー’], [‘sキムチ鍋’, ‘mキムチ鍋’, ‘lキムチ鍋’], ], ]; echo $data[2][2][0]; //結果: sキムチ鍋 上記はインデックス番号が3つなので多次元配列。 また、配列の中に連想配列を含めることもできる。 例 <?php $data3 = [ [ ‘name’ => ‘山田孝之’, ‘age’ => 35, ‘sex’ => ‘男’, ], [ ‘name’ => ‘タモリ’, ‘age’ => 15, ‘sex’ => ‘男’, ], [ ‘name’ => ‘釈由美子’, ‘age’ => 25, ‘sex’ => ‘女’, ], ]; [0] [name] 山田孝之 [age] 35 [sex] 男 [1] [name] タモリ [age] 15 [sex] 男 [2] [name] 釈由美子 [age] 25 [sex] 女 上記は配列と連想配列の入れ子 このような形式の配列は、データベースからデータを取り出す場合などにもよく使われるので、きちんと理解する。 通常配列と連想配列の関係 ここまでの説明では、便宜上、数字キーを持つ通常配列と、文字列キーを持つ連想配列とを別物として解説して方が、厳密には、PHPはこれらを区別しない。 唯一の配列型があるだけで、そのキーが数値であるか文字列であるかによって、両者を区別しているに過ぎない。 その理解を踏まえて以下の例をもって配列の理解を深める。 通常配列でキーを明示する 通常配列と連想配列とが本質的に同じものであることが分かれば、通常配列でもキー名(インデックス番号)を指定できるのは何ら不思議なことではない。 <?php $data = [1 => ‘山田’, 2 => ‘松本’, 3 => ‘浜田’, 4 => ‘濱田’] print_r($data); //結果: Array (  [1] => 山田  [2] => 松本  [3] => 浜田  [4] => 濱田 ) 通常配列のようにインデックス番号が省略された場合には、ゼロから始まる番号が自動的に振られていた。 一部の値だけにインデックス番号を振ることもできる。 この場合、「その時点での最大インデックス番号+1」が自動的に割り振られる。 例えば下記のようなケースではすでに4まで番号が振られているので、次の「カツオ」のインデックス番号は5となる。 <?php $data = [1 => ‘マグロ’, 4 => ‘シャケ’, ‘カツオ’]; print_r($data); //結果: Array (  [1] => マグロ  [4] => シャケ  [5] => カツオ ただし最大のインデックス番号が負数である場合は例外。 この場合、次のインデックス番号を決めるルールは、バージョンによって変化する。 例 <?php $data = [-10 => ‘河野’, ‘伊藤’]; print_r($data); //結果: //PHP7.4以前 Array (  [-10] => 河野  [0] => 伊藤 //PHP8以降 Array (  [-10] => 河野  [-9] => 伊藤 PHP7.4以前では、強制的にゼロが割り当てられるのに対して、PHP8以降では整数インデックスの場合と同じく、「最大インデックス+1」が振られる。 負数インデックスを積極的に利用する機会はさほどないが、互換性のない変更なので、頭の片隅に留めておく。 11:通常配列と連想配列との混在
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLのdumpファイルをインポートすると文字化けする

概要 商用環境(Webシステム)をローカルに構築しように発生した問題です。 解決方法をメモとして残します。 ローカル構築時に行った手順 ソースコードをローカルにコピー MySQL立ち上げ(docker) dumpファイルをMySQLにインポート DB接続先を修正 動作確認 →MySQLのデータが文字化けしてしまっている 対応 dumpファイルのこの行を消す dump_yyyymmdd.sql /*!50503 SET NAMES cp932 */; 感想 商用環境がWindowsサーバーだったり、MySQLのversionがどうこうとか、ローカルがdockerだからとか、 色々想像で動いてしまったせいで解決に時間がかかりました。情けない!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

時間範囲指定のバリデーション

概要 フォーム入力で「09:00 - 18:00」のような時間を指定する際のバリデーション  結論 ^([01][0-9]|2[0-3]):[0-5][0-9]\s-\s([01][0-9]|2[0-3]):[0-5][0-9]$ 参考 日付および時刻の正規表現
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む