■XAMPP
XAMPP Installers and Downloads for Apache Friends
https://www.apachefriends.org/jp/index.html
XAMPPの使い方 | Let'sプログラミング
https://www.javadrive.jp/xampp/
■ローカルPCにアクセスする
コマンドプロンプトでipconfigを実行すると、自身のIPアドレスを確認できる
以下のように表示される場合、
http://192.168.1.25/ にアクセスすると
http://localhost/ へアクセスできる。
(同一LAN内である必要がある。XAMPPなどでWebサーバを用意しておく必要はある。)
同一LAN内のPCやiPhoneなどからアクセスできるので、動作テストに便利。
>ipconfig
Wireless LAN adapter ローカル エリア接続* 2:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::f8bc:71b1:bd6d:2f79%10
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.25
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
■マシン名でアクセス
最近の環境なら、デフォルトでmDNSの仕組みを利用できる
これにより、IPアドレスだけでなく「マシン名+.local」でもアクセスできる
例えばマシン名が「SurfacePro」の場合、以下のURLでアクセスできる。同一LAN内からも同様
http://SurfacePro.local/
mDNSを設定して、いちいちIPアドレスを打ち込むのをやめよう。 - Qiita
https://qiita.com/msrx9/items/b6ca47dd2178c3c9b536
■PHP
※PHP8.1では internal_encoding・http_input・http_output が非推奨になっているみたい
改めて確認したい
PHP 8.x での php.ini の設定について
https://zenn.dev/ksh2ksk4/articles/3cb75ed89ae662c1352d
C:\xampp\php\php.ini
… PHPの設定ファイルを編集
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting=E_ALL
;mbstring.language = Japanese
mbstring.language = Japanese … 行頭の ; を削除
;mbstring.internal_encoding =
mbstring.internal_encoding = UTF-8 … 行頭の ; を削除し、UTF-8 に設定
;mbstring.http_input =
mbstring.http_input = pass … 行頭の ; を削除し、pass に設定
;mbstring.http_output =
mbstring.http_output = pass … 行頭の ; を削除し、pass に設定
;mbstring.encoding_translation = Off
mbstring.encoding_translation = Off … 行頭の ; を削除
;mbstring.detect_order = auto
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII … 行頭の ; を削除し、auto を UTF-8,SJIS,EUC-JP,JIS,ASCII に修正
;mbstring.substitute_character = none
mbstring.substitute_character = none … 行頭の ; を削除
;mbstring.func_overload = 0
mbstring.func_overload = 0 … 行頭の ; を削除
date.timezone=Europe/Berlin
date.timezone=Asia/Tokyo … Asia/Tokyo に設定
■MySQL
XAMPP | rootアカウントのパスワードを設定する
https://www.javadrive.jp/xampp/mysql/index2.html
MySQLのパスワード設定 - XAMPPの使い方
https://pc-karuma.net/mysql-password-xampp/
XAMPPのコントロールパネルから「Shell」を立ち上げて以下を実行する
設定したいパスワードを尋ねられるので入力する
mysqladmin -u root password
パスワードの設定後、phpMyAdminの設定ファイルも編集しておく
C:\xampp\phpMyAdmin\config.inc.php
$cfg['Servers'][$i]['password'] = '1234';
■バーチャルホスト
C:/xampp/apache/conf/extra/httpd-vhosts.conf
… Apacheのバーチャルホスト設定ファイルを編集
NameVirtualHost *:80 … #を削除(コメントを解除)
<VirtualHost *:80> … localhost用の設定を追加(これが無いと、単に localhost でアクセスしても test.local の設定が使われてしまう)
DocumentRoot "C:/xampp/htdocs"
ServerName localhost
</VirtualHost>
<VirtualHost *:80> … test.local用の設定を追加
DocumentRoot "C:/localhost/home/test/public_html"
ServerName test.local
</VirtualHost>
<Directory "C:/localhost/home/test/public_html">
AllowOverride All … 以下3行は必要に応じて指定
Options All
Require all granted
order deny,allow … 以下2行は不要かも
allow from ALL
</Directory>
C:/windows/System32/drivers/etc/hosts
… hostsファイルを編集
127.0.0.1 localhost
127.0.0.1 test.local … test.local用の設定を追加
LAN内の他のPCからアクセスさせる可能性を考えれば、「test.localhost」というアドレスで構築するのはややこしいかも
(「localhost(自身のPC)のサブドメイン」ともとれるので)
「.example」が思いつくが、「例示用」なので好ましくない
「.app」も思いつくが、「.app」は存在するドメインみたいなので好ましくない
またChrome63から、「.dev」「.app」のアクセスにはSSLが強制されるので、開発環境では使わないほうがいい
「.local」か「.test」が無難そう
最近の環境なら、デフォルトでmDNSの仕組みを利用できる
これは「マシン名+.local」でもアクセスできる仕組みなので、ローカル環境で「.local」を使うのは適切そう
Microsoftの技術資料では「.local」が紹介されていたりするらしい。が、Macから見ると「.local」は好ましくないらしい
Laravel Homestead では「homestead.app」が紹介されていた…が、Laravel5.5から「homestead.test」に変更されている
結論として「.test」か「.local」がいい。ただしMacも使うなら「.test」にする方が無難そう
windows7のXAMPPでバーチャルホストの設定をする
http://wp.yat-net.com/?p=2400
予約済みドメイン (.example, .localhost, .test) について | blog.jxck.io
https://blog.jxck.io/entries/2017-09-27/example-local-test-domains.html
Google、TLD「.app」を史上最高額の2500万ドルで落札 - ITmedia NEWS
http://www.itmedia.co.jp/news/articles/1502/27/news119.html
例示/実験用として利用できるドメイン名 − @IT
http://www.atmarkit.co.jp/fwin2k/win2ktips/801exampledom/exampledom.html
Mac が参加するADのドメイン名で .local を使わないでください。
https://www.picturecode.co.jp/faq/dot-local-domain/
Chrome v63で.devドメインがHTTPSを強制される。
https://lara-bell.com/2017/12/forces-domain/
■ユーザディレクトリ
C:\xampp\apache\conf\httpd.conf
… Apacheの設定ファイルを編集
#LoadModule userdir_module modules/mod_userdir.so
LoadModule userdir_module modules/mod_userdir.so
Include conf/extra/httpd-userdir.conf
C:\xampp\apache\conf\extra\httpd-userdir.conf がユーザディレクトリ用の設定ファイルなので、一例を上げると以下のように設定し、Apacheを再起動する
もともとの UserDir や Directory の設定は、コメントアウトしておくこと
UserDir "C:/localhost/home/*/public_html" … ユーザディレクトリの場所を設定
<Directory "C:/localhost/home/*/public_html"> … 開発環境なら、諸々の設定を許可しておくといい
AllowOverride All
Options All
Require all granted
</Directory>
上の場合、C:/localhost/home/refirio/public_html/index.html には /~refirio/ でアクセスできるようになる
■PHPのxdebugを使う
C:\xampp\php\php.ini の最後に以下を追加する
[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
Apacheを再起動し、phpinfo() でxdebugが有効になっていることを確認する
(「xdebug」で検索して項目が表示されていることを確認する)
この時点で、ErrorやNoticeなどの結果が見やすいものに変わる
var_dump の結果も見やすいものに変わる
■PHPのComposerを使う
https://getcomposer.org/ の「Download」をクリック
「Manual Download」にある「Latest Stable」をクリックして composer.phar を保存
vendorフォルダを作りたい場所へコピーする
composer.phar をコピーした場所へコマンドプロンプトで移動し、以下を実行する
Composerの画面が表示されれば成功。(PHPのパスは環境によって調整する。)
C:\xampp\php\php.exe composer.phar
Composerをより簡単に使えるようにするため、同じ場所に composer.bat を作成して以下を記述する
@ECHO OFF
C:\xampp\php\php.exe "%~dp0composer.phar" %*
これで単に
composer
と入力するだけでComposerを実行できる。
またComposerでインストールする対象によっては、あらかじめPHPのあるディレクトリにパスを通しておく必要がある
(パスなしでPHPを呼び出している箇所があるため)
もしエラーになったら、C:\xampp\php にパスを通しておく(WindowsでXAMPPを使用している場合)
■Goutteのインストール例
動作確認のためにGoutte(「グットゥ」「グット」のように発音。フランス語で「しずく」「水滴」の意味)をインストールしてみる
コマンドプロンプトから以下を実行する
composer require fabpot/goutte
しばらく待つと「vendor」「composer.json」「composer.lock」が作られ、インストールが完了する。
composer.json には require で取り込んだライブラリとそのバージョンが記述される
このファイルは手動で作成することもできる。その場合
composer install
として実行すると、必要なパッケージを自動でダウンロードしてくれる
以下のようにしてPHPからGoutteを呼び出す。
<?php
// Composerのオートロードを有効にする
require 'vendor/autoload.php';
// 対象URL
$url = "http://oto.chu.jp/mmlbbs6/index.php?action=fav_memory";
// Goutte\Clientの生成
$client = new Goutte\Client();
// Webから取得
$crawler = $client->request('GET', $url);
// CSSセレクタを指定して要素を取り出す
$crawler->filter('table tr')->each(function($e) {
// <tr>を見つけるたびに実行される部分
$td = $e->filter('td');
$count = $td->eq(0)->text();
$title = $td->eq(1)->text();
$link = "";
$o = $td->eq(1)->filter('a')->extract(array('href'));
if ($o) { $link = $o[0]; }
$author = $td->eq(2)->text();
echo "$title,$author,$link\n";
});
■トラブル
■突然MySQLを起動できなくなった
XAMPPのコントロールパネルからApacheは起動できるが、MySQLを起動しようとすると以下のエラーになる
11:45:48 [mysql] Attempting to start MySQL app...
11:45:48 [mysql] Status change detected: running
11:45:52 [mysql] Status change detected: stopped
11:45:52 [mysql] Error: MySQL shutdown unexpectedly.
11:45:52 [mysql] This may be due to a blocked port, missing dependencies,
11:45:52 [mysql] improper privileges, a crash, or a shutdown by another method.
11:45:52 [mysql] Press the Logs button to view error logs and check
11:45:52 [mysql] the Windows Event Viewer for more clues
11:45:52 [mysql] If you need more help, copy and post this
11:45:52 [mysql] entire log window on the forums
XAMPPのコントロールパネルの「Netstat」から確認しても、
すでにポートが使われている…ということは無さそう
【xammp】mysqlが起動しない時の対処 - Qiita
https://qiita.com/gone0021/items/1240f857776c6bb620b6
※念のため、作業前に C:\xampp\mysql を丸ごと退避させてから作業する
C:\xampp\mysql\data から以下のファイルを退避してMySQLを起動
ib_logfile0
ib_logfile1
ibdata1
さらに C:\xampp\mysql\backup からすべてのファイルとフォルダーをコピーし、C:\xampp\mysql\data に貼り付け
置換を求められるのですべて置換
これでXAMPPのコントロールパネルから起動できた
…が、
http://localhost/phpmyadmin/ にアクセスすると以下のエラーが表示された
接続できません。設定が無効です。
mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
MySQL サーバに接続しようとしましたが拒否されました。config.inc.php のホスト、ユーザ名、パスワードが MySQL サーバの管理者から与えられた情報と一致するか確認してください。
backupからの復元により、rootのパスワード設定が消失していると思われるので再設定
(設定方法は、このファイル内の「MySQL」を参照)
これでphpMyAdminに接続できるようになった
…が、データベース一覧にテーブルは確認できるものの、テーブルの内容を表示しようとすると以下のエラーになった
#1932 - Table 'test.address' doesn't exist in engine
退避しておいた C:\xampp\mysql\data 内の以下ファイルを戻してMySQLを再起動
ib_logfile0
ib_logfile1
ibdata1
これで元通りアクセスできるようになったみたい
結局のところ、C:\xampp\mysql\backup からの復旧で何とかなったのかもしれない?
(ib_logfile0 などの退避はしなくてもいいかと思ったが、backup内にも存在するので退避は必須だと思われる)
直接の原因は、ユーザ情報テーブルなどの破損が原因か
Windowsをシャットダウンする前に、手動でApacheとMySQLを終了させるべきか