ドットインストールPHP入門でちょっとつまづいたことメモ
またもドットインストールでつまづいた、正確には学習前の環境でつまづいたお話です。
結論から言うともちろん僕の凡ミスで、大した話ではないのですが、とにかくプログラミング初心者にとっては文字ベースのターミナルで起こっていることとか、仮想マシンのこととかってなんとなくわかっているようで理解していないことが多いので、メモがてら投稿しておきます。
今回は本当に、おバカな勘違いミスばかりなので同じような境遇の人はほとんどいないかもしれないけど・・・勉強にはなりました!(涙
PHP入門、ドットインストール様の教え(意訳)
PHPはサーバーを使うので、PHPの簡易サーバーで作業していきますよ。
「php_lessons」というフォルダを作って、そこにindex.phpというファイルを作って作業してね。ipは192.168.33.10ね!(今までの学習でも使っていたip)
ポート番号は(なぜかわからないけど)8000ね!php -S 192.168.33.10:8000でサーバーを立ち上げてね 。立ち上げたらブラウザにも同じ数字を入力してね。サーバーの中身(index.php)が見えるよ。
そのipはよく使ってる!Cyberduckでphp_lessonsフォルダを作ってすぐ開始や!
お間抜けな問題点たち
問題1. ブラウザでファイルが見つかりません
あれ、見えないな・・・と思ったのですが、すぐに思いついたのが「ファイルを置いている場所が違うんじゃないか」ということ。
ターミナルでの作業って、まったくCUIに慣れていない身としては、本当にただただドットインストールの指示に従うのみだったので、「何処にサーバーが立ち上がっているのか」をわかってませんでした。
192.168.33.10というのが、いつもローカル開発環境でwebを作成-確認している場所だと思ってました。
192.168.33.10というipの「場所」が正確にどこなのか、未だにわかってませんが、たぶんCyberduckで接続した時の、一番上の階層「/」がそれなのかな?と思います。
webを作っている時は192.168.33.10でwebページに繋がってましたが、正確な場所(ディレクトリ)は192.168.33.10(/)の中の/var/www/htmlという場所。ブラウザだと、ここに格納されているindex.htmlが192.168.33.10として表示されるのかな?というのが現状の認識です。
それで/var/www/htmlの中にphp_lessonsフォルダを作っていたのですが、ドットインストールが指示していた場所は/home/vagrantという場所でした。
これに気づけなかったのが、凡ミス1。
問題2. ユーザー権限がありません
ああ、場所間違えていたのか〜!バカだな〜」と思って、さっそく二つ目の凡ミス?バカミス?は、/home/vagrantではなく、/vagrantというフォルダにphp_lessonsフォルダを置こうとしたこと。
この勘違いミスのせいで、めちゃめちゃ遠回りしました。
Cyberduckでこのフォルダにphp_lessonsを作成しようとすると、以下のように表示されてフォルダもファイルも作れません。
フォルダを作成できません
Permission denied.please contact your web hosting service provider for assistance
この英文が出るのは「ユーザー権限がないよ」ということらしいの(Permissionがこの権限のことみたい)ですが、vagrantのユーザー権限はvagrantfileを書き換える作業をしなければ変更できないらしく、また「オーナー」「グループ」「その他」というのがそれぞれ何を指し示しているのかもわかりませんでした。
調べた結果、書き換え方法などはわかったのですが、そもそも現状のパーミッションがどうなっているのか?(場合によって元に戻したいから)とか、「777」「775」や「-rwxrwxrwx」などの文字列の意味とかもわからなかったので、順番に調べることに。
Cyberduckで各ファイルのパーミッションを表示する項目が「表示」にあったので表示。するとユーザー権限は775で、たぶん、問題なく書き込めるはず・・・なのに書き込めない。
775は3桁目から順番に「オーナー」「グループ」「その他」の権限を表していて、「読む(4)」「書く(2)」「実行(1)」と割り振られた数字を足したものを順番に表示しているらしいこと。775はオーナーは全部できる(4+2+1)、グループも全部できる、その他は「読む」と「実行」のみ(4+1)という意味らしいです。
つまり権限としては問題ないけど、なぜかファイルを置いたりできない!ということでパニック状態でした。
色々調べたけど、正しいやり方は未だわからず。
ちなみに「-rwxrwxrwx」は、r(読む)w(書く)x(実行)を表していて、オーナー〜その他がそれぞれ3つずつアルファベットで権限を表記しているものらしいです。
とにかく、色々調べたわりにまったく見当違いの間違い(/vagrantではなく/home/vagrantに用があった)をしていたので、この問題は解決しないまま、解決(笑
問題3. フォルダが見えない!?
問題2と並行して、「そもそもターミナルでサーバーを立ち上げた場所はどこなんだ!?」という疑問を持ちました。
理由はわからないけど、Cyberduck経由では書き込めないけどターミナルからならファイルを作ったりできるんじゃないだろうか・・・とも。
ターミナルの操作コマンドも全く知らなかったので、それらを調べて、現在地(ディレクトリ)、そこに存在するファイルなどを調査。(使用コマンドは投稿記事最後にまとめました)
このファイル調査が逆に混乱を招くことになるのですが・・・vagrant sshでログイン後、フォルダ内のファイル一覧を見たら、なんと「php_lessons」というフォルダを発見!index.phpも入ってました・・・!
あれ???
たぶん、以前にドットインストールの授業のどれかで、ほぼ無意識的に同じ名前のフォルダを作っていたのかもしれない。。。
でも、もしフォルダとindex.phpが存在しているなら、192.168.33.10:8000でブラウザに表示されるはずでは!?Cyberduckで/vagrantを覗いても空っぽだし、これは一体???と混乱が増しました。
答えはわかってしまえば簡単で、
僕はvagrant sshでログインした直後にサーバーを立ち上げていた
→本当はphp_lessonsのフォルダ内に移動してからサーバーを立ち上げる(たぶん立ち上げたフォルダの中がサーバーとして認識されるから?)
僕がCyberduckで見ていたフォルダは/vagrant
→vagrant sshでログイン・アクセスしている場所は/home/vagrant
という2つの勘違い。めっちゃアホなんですが、勘違いだらけに気づけなかったので問題の解決しようもありませんでした(汗
正しい手順
- Cyberduckで192.168.33.10に接続→僕は普段/var/www/htmlが表示されてしまうので/に移動→そこにあるhomeというフォルダのvagrantフォルダ内にphp_lessonsフォルダを作成(これで/home/vagrant/php_lessonsという場所ができる)
- php_lessons内にindex.phpを作成
- ターミナルで「vagrant ssh」して192.168.33.10サーバーにログイン
- 「cd php_lessons」でphp_lessonsフォルダに移動
- ターミナルで「php -S 192.168.33.10:8888(8888は新しいポート番号。適当)」でphp_lessonsに簡易サーバーを立ち上げ
- ブラウザで「192.168.33.10:8888」を表示
表示された!!
未だにわからないこと
/var/www/html の中と/home/vagrantの中にはCyberduckでファイルやフォルダを作れたが、それ以外の場所には作れない!?パーミッション的には大丈夫そうなんだけど、見方が間違っているのか、別の理由があるのか。ちなみにCyberduckでのパーミッション表示では/vagrantは775。/home/vagrantは664。/vagrantの方がなんでもできそうなんだけど、見方を間違っているのか。。
Cyberduckで192.168.33.10にアクセスするときにユーザーもパスワードもvagrantで入っているのだが、これってオーナー権限?とかではないのか。
とにかくユーザー権限関係は全く不勉強で何もわかってないし、今回の件を通してもあんまり学べていないので、今後もつまづきそうだし要勉強だとわかりました。(全部要勉強だけど)
その他備忘録
なぞの8000番
8000の部分の数字(ポート番号)はなぜ「8000」なのかわからなかった。たぶんなんでも良いのかも?定義してあげればそこにPHPサーバーができるイメージ。
<追記 2019-07-01>ポートはphp -Sをするたびに変更しても大丈夫みたいです。今日、間違えて:8000と打ってしまったので:8888でブラウザに表示されず、焦ったけど8000で入れました。php -Sをコマンドする位置(今回はphp_lessons)さえ間違えなければOKで、ポートはその時その場所を定義するための名札みたいなものなのかも。
<追記 2019-07-02>今日はポート番号7772でやってみたけど問題なくブラウザでアクセスできました!
今回ターミナルで使ったコマンド
- pwd・・・ターミナルでの現在地。文字ばっかりの世界なので「自分がどこにいるのか」という感覚を持ちづらいけど、これを見れば少し安心。
- ls・・・現在地に存在するファイル一覧
- li -l・・・ ユーザー権限(パーミッション)の確認
まとめ
普段GUI(マウスで、見た目で直感的に操作できる状態)になれているので、ターミナルは言われるがまま、よくわからないけど呪文を操っている気分になるが、並行してターミナルのコマンドを覚えておくと、文字だけのPCの世界(CUI)がだんだん見えてくるようになって、より楽しかったです。
今回は本当に「勘違いに次ぐ勘違い」でパニクっただけでしたが、勘違いのお陰で少しずつ知識も増えたので、良しとしよう。(動画学習を始める前段階で3時間くらいかかったけど)
これからも勘違いしつつ、しっかり学んでいけたらな〜と思ってます。以上!