■目次
XAMPPローカルPCにアクセスするPHPMySQLバーチャルホストユーザディレクトリPHPのxdebugを使うPHPのComposerを使うトラブル戻る
■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を終了させるべきか