html内のphpを動かそうとしたらダウンロードされてしまう
htmlに記述したphpを動かしたかったが、調べた方法だとファイルがダウンロードされて困った。
現象
- htmlファイルにPHPを記述し動かそうとしたら、アクセスするとファイルがダウンロードされてしまう
解決方法
$ vi /etc/php-fpm.d/www.conf #コメントアウト外して .html を追加 security.limit_extensions = .php .php3 .php4 .php5 .php7 .html $ vi /etc/httpd/conf.d/php.conf <IfModule !mod_php5.c> <IfModule !mod_php7.c> # Enable http authorization headers SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 #html追記 <FilesMatch \.(php|phar|html)$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> </IfModule> </IfModule>
やったこと(以下は全部だめでした)
//これとか <IfModule mime_module> AddType application/x-httpd-php .html </IfModule> // これとか AddType application/x-httpd-php .php .html // これとか AddHandler application/x-httpd-php .php .html
めちゃめちゃ調べてもダメなパターンしか見つからず、はまった、、、
php.iniが反映されない
php.iniの設定を変更して、sudo systemctl restart httpd
でApacheを再起動しても変更が反映されなかったのでメモ。
解
systemctl restart php-fpm
php.iniの場所
/etc/php.ini
適宜ファイルの内容を変更
変更を反映させる
systemctl restart php-fpm
です。
補足
ちなみに
sudo systemctl start php-fpm Failed to start php-fpm.service: Unit not found.
こんなんになったらシステムの設定ファイルが置いている場所を確認
ls /etc/systemd/system/ ... drwxr-xr-x 2 root root 6 1月 1 23:59 php70-php-fpm.service.d ...
上記の場合はこれでok
sudo systemctl start php70-php-fpm
以上です。
【Apache】バーチャル ホストとは?
自称webエンジニアだが、最近インフラを触る事が多い。 もちろんインフラに関しては素人なので、基本的なことをメモする。
バーチャルホスト(Virtual Host)とは1つのサーバで複数のドメインを運用する技術のことで、Webサーバ、メールサーバなどで利用される。
バーチャルホスト - Wikipedia
最初はなんのこっちゃだったので、自分なりに噛み砕いてみる。
1つのサーバで複数のドメインを運用する
キーワードはドメインですね。
ドメインとは、数字とドットで表されるIPアドレスを、人間が理解しやすい文字に置き換えた名前の事。だと思っている。 (詳しくは各自ググってください!)
で、そのドメインを複数使用する場合がある、と。
たとえばこんな時。
- foo.com
- music.foo.com
- book.foo.com
こんな感じの3つのドメインを使って、別のサービスを運用したいとする。 (しれっとサブドメインを登場させたが、?な方は各自ググってくださいー)
この時に3台サーバーを使用し、1台1ドメインとすれば何も問題がないのだが、お金がかかるので1台でなんとかならないか。。。
という時に使うのがバーチャル ホストである!
少し具体的に書くと、/etc/httpd/conf.d/フォルダの下に、vhost-foo.conf という名前で設定ファイルを作り、以下のように記述する。
<VirtualHost *:80> ServerName foo.com DocumentRoot /var/www/sites/foo.com </VirtualHost> <VirtualHost *:80> ServerName music.foo.com DocumentRoot /var/www/sites/music.foo.com </VirtualHost> <VirtualHost *:80> ServerName book.foo.com DocumentRoot /var/www/sites/book.foo.com </VirtualHost>
こうすることにより、ドメイン毎にDocumentRootが異なり1台のサーバーでも複数のドメインを運用することができる。
Laravel で DB接続エラー
上記教材でLaravel学習2日目。
マイグレーションができずに小一時間ハマった。。。
In Connection.php line 664: SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES) (SQL: select * from information_schema.ta
bles where table_schema = homestead and table_name = migrations) In Connector.php line 67: SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES)
先に解決方法を言います。
Homestead内でssh接続して、プロジェクトに移動しmigrateを実行する!
そうです。
ずっと
ローカルのプロジェクトディレクトリでコマンド叩いてた。。。
これに気づかず.envとdatabase.phpをいじり倒した。。。
参考
Laravelのphp artisan migrateでSQLSTATE[HY000] [2002] Connection refusedが返る - Qiita
https://niwacan.com/1408-laravel-db-ini/
はじめてのLaravel
Laravelを学ぶために
上記で学習しようと思います。
では早速。
昨日とりあえず立ち上げたので、「1-3-3 はじめてのページ」からスタート。
目標
http://homestead.test/homeで新規ページを表示し、テストする。
手順1 ルーティングの設定
手順2 viewの作成
手順3 テスト
一瞬テストが無反応で?になったが、末尾の;が抜けていただけだった。 (テストコードのエラーはノーリアクションなのか。。。)
今日は以上。
JavaScript その1
JavaScript
今まで深く考えずに書いてきたが、改めて理解する必要があると感じたので、少しまとめます。
今回はJavaScriptの「this」です。
thisにはいくつかパターンがある
①メソッド呼び出し
メソッドとは、オブジェクト指向プログラミングにおいて、各オブジェクトが持っている自身に対する操作。
var testObject = { value: 10, show: function() { console.log(this.value); } } testObject.show();
②関数呼び出し
関数とは、引数と呼ばれるデータを受け取り、定められた通りの処理を実行して結果を返す一連の命令群。
function show() { console.log(this); this.value = 1; } show();
まぎらわしい例(メソッド内で関数呼び出しになっている)
var testObject = { value: 1, show: function() { console.log(this.value); function show() { console.log(this.value); // グローバルを指す } show(); } }; testObject.show();
解決策
var testObject = { value: 1, show: function() { var self = this; console.log(self.value); function show() { console.log(self.value); } show(); } }; testObject.show();
③コンストラクタ呼び出し
function TestObject(value) { this.value = value; this.increment = function() { this.value++; }; } var test = new TestObject(0); // var test = TestObject(0); // newをつけないと。。 console.log(test.value); test.increment(); console.log(test.value);
「new」をつけないと関数呼び出しとなり、「this」はグローバルオブジェクトを指す。
④apply,call呼び出し (thisを指定できる)
var testObject = { add: function(value1, value2) { console.log(this.value + value1 + value2); } }; var fooObject = { value: 3 }; testObject.add.apply(fooObject, [2, 10]); testObject.add.call(fooObject, 2, 10);
⑤bind()のthis
bind() メソッドは、呼び出された時に新しい関数を生成します。最初の引数 thisArg は新しい関数の this キーワードにセットされます。2 個目以降の引数は、新しい関数より前に、ターゲット関数の引数として与えられます。
function test() { console.log(this) } var obj = { name: "obj" } var check = test.bind(obj) check()
まとめ
thisのパターン
①メソッド呼び出し
②関数呼び出し
③コンストラクタ呼び出し
④apply,call呼び出し (thisを指定できる)
⑤bind()のthis
thisを使う時は呼び出し元を確認する必要がある。
参考
JavaScript中級者への道【2. 4種類のthis】 - Qiita
JavaScriptの「this」は「4種類」?? - Qiita
PHPのstaticについて
static(静的)とは?
PHPでのstaticの意味は3つある
1, 静的なメソッド・プロパティを定義するためのstatic
2, 静的変数を定義するためのstatic
3, メソッドのスコープを定義するための遅延静的束縛の意味でのstatic
1, 静的なメソッド・プロパティを定義するためのstatic
staticメソッドはオブジェクトのインスタンスを生成せずに コールすることができる。これを静的コールと言う。
インスタンス化されたクラスオブジェクトからメソッドやプロパティにアクセスすることを動的コールと言う。
静的なプロパティを動的コールすることは出来ないが、静的なメソッドを動的コールすることは可能。
class Foo { public static $property = 'foo'; public static function method() { echo 'bar'; } } echo Foo::$property.PHP_EOL; Foo::method(); $test = new Foo; $test->method(); // echo $test->property;
2, 静的変数を定義するためのstatic
静的変数はローカル関数スコープのみに 存在するが、プログラム実行がこのスコープの外で行われるようになっ てもその値を失わない。
function test() { static $a = 0; echo $a; $a++; } test(); test(); test();
3, メソッドのスコープを定義するための遅延静的束縛の意味でのstatic
の前に
・スコープを表す「スコープ定義演算子」まとめ
記述方法 | スコープ | 記述場所 | |
---|---|---|---|
1 | クラス名:: | 明示されたクラス | クラス定義の外or中 |
2 | self:: | self::が記載されたクラス | クラス定義の中 |
3 | parent:: | parent::が記載されたクラスの親クラス | クラス定義の中 |
4 | static:: | 直近の "非転送コール" のクラス | クラス定義の中 |
遅延静的束縛?
遅延静的束縛(Late Static Bindings)とは、「非転送コール」によって呼ばれたメソッド・クラス名を保持する機能です。
static::では、遅延静的束縛によって保持するクラスのメソッド(またはプロパティー)をコールします。
転送コール」と「非転送コール」
・非転送コール→Foo::test()や$foo->test()といったクラス名(もしくはオブジェクト)を明示した呼び出し
・転送コール→メソッド内でself::、parent::、static::を使用して行われる呼び出し
class A { public static function who() { echo 'A'; } public static function test() { static::who(); } public static function test2() { self::who(); } } class B extends A { public static function who() { echo 'B'; } } B::test();
まとめ
今までなんとなく使っていた"static"に、様々な意味があると初めて知りました。 静的、動的という言葉もあやふやだったので、今回ようやく意味が分かりました。
参考
PHPを愛する試み 〜self:: parent:: static:: および遅延静的束縛〜 - maeharinの日記
【PHP入門】クラス変数・クラスメソッドを使用する方法(static) | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト