質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

4574閲覧

Vagrantでphpからファイルの書き込みができない【初心者】

udonya

総合スコア11

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

1クリップ

投稿2016/03/05 08:01

編集2016/03/05 08:04

PHPを、ローカル環境のVagrantで動作させています。
file_put_contents()でテキストファイルに上書きしようとしたところ、できませんでした。
(is_writable()でもFALSEを返されました、ディレクトリは/var/www/html)
調べたところによるとVagrantがファイルの書き込みを許可していないようでして、Vagrantfileを書き換えればいいそうなのですが、その書き換え方がわかりません。

config.vm.synced_folder ".", "/vagrant", :mount_options => ["dmode=777","fmode=666"]
とするとうまくいく等あったのですが、There is a syntax error in the following Vagrantfile.と表示され、大量の赤字エラーを吐き出されました。"/vagrant"を"/var/www/html"としても同じでした。

どうすればVagrantでファイル書き込みの許可をもらうことができるでしょうか?

Vagrantの導入はドットインストールさんに従いました。
OSはMacです。
よろしくお願いします。

5o5o_wagon👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

There is a syntax error in the following Vagrantfile.
これはvagrantFileの書き方が間違っているという意味のエラーですね。
どこかに文法の間違いなどはないでしょうか?
ちなみにPHPは仮想マシン上で動かしているという理解でよろしいでしょうか。
/var/www/htmlに権限を与えることで解決すると思いますが,Apacheのrootディレクトリをログインユーザのhomeディレクトリ以下に配置することで解決できそうな気もします。

投稿2016/03/05 09:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

udonya

2016/03/05 15:04

tkow様、ご回答ありがとうございます! ご指摘の通り、PHPは仮想マシン上で動かしています。 /var/www/htmlに権限を与える方法というのがよくわからないのですが、ご教授願えますか。(初歩的なこともままならないのでcommand等を丁寧に教えていただきたいです)
退会済みユーザー

退会済みユーザー

2016/03/06 07:08 編集

udonya様 sekitaka_1214さんの回答がとりあえず動かすだけであれば一番早いと思います。 chmod の引数0~7は二進数化したものとrwx(読み,書き,実行の権限)という記号の並びと対応してまして,例えば,6であれば,二進数化して, 1,1,0となるので,rwを許可して,xは許可しないという風に1が存在する場所の権限を許可し,0の所を不許可にするという意味があります。 そして,777というのはそれぞれの桁が,u:所有者,g:グループ,o:その他のユーザ,の権限に対応しており,chmod 771 file(or directory)と指定すると,所有者とグループは全権限の許可で,一般のユーザーはそのファイルの実行権限のみ与えられます。 また4桁の数字の時は最初の数字をスティッキービットと言って1のとき,所有者(デフォルトではファイルの作成者,chownというコマンドで変更することも可能です)とスーパーユーザーしか,名前の変更とファイルの削除ができなくなります。 またこれらの権限カテゴリを指定して,権限を変えることもできます。一般ユーザの権限だけを変更したい場合は,+は権限の付与,-は剥奪です。 chmod o+r-x また全部の権限カテゴリにa:allを使って一括で権限変更できます。 chmod a+rwx chmodはファイルの所有者または,スーパーユーザーであれば権限なしでも実行できるので,誤って,全ての権限を消してしまってもそれらのユーザーでchmodを実行すれば直せます。 今回は仮想環境でありますし,作業のしやすさのため,実行,書き込み,読み取り権限を全て一般ユーザーに与えてもいい(恐らく/var/www/htmlはスーパーユーザー権限になっている)と思うので,sudo chmod xx7(xは0~7までの任意の数字)で行っておくといいと思います。ちなみにchmodは引数にするファイルの所有者であれば権限がなくても実行できます。またスーパーユーザーであればいつでも権限の変更が可能です。なので,スーパーユーザーを乗っ取られると,パソコン全てのプログラムに権限を持てることになってしまうことになってしまうため,実運用では,十分気をつけてください。 実運用では,superuserのパスワード認証を複雑なものにしたり,秘密鍵暗号などの認証だけでしかログインさせない,リモートログインの不許可などを実施したりします。 なので,ファイルアクセスはサーバをグループとしてアクセスするようにし,一般ユーザはできるだけ読みとり権限以外,さらには,特定のファイル以外に与えないようにするのが望ましいです。本当に大事なファイルはsuperuserを所有者にしてそれ以外の人に作業できないようにさせます。またプログラムの開発はプログラムのインストールはsuperuserのみで行い,一部の言語モジュールのインストールや実行権限,コードの書き換えは所有者およびgroup権限(一部のバージョン管理ツールはインストール時にグループ権限や所有者をツール名に変更して所有者に権限付与している。こうすれば同一マシン上で複数ユーザーで共同作業が可能になる)で行い,一般ユーザにはサーバアクセス以外に何も権限を与えないことが望ましいです。 ちなみに,vagrant はプロヴィジョニングと言って,初回起動時にVagrantfileにshell(など,shell以外にもprovisiongツールと連携可能)の一連のコマンドを(コマンドでやり直しが可能)自動で実行出来る機能が存在していて,そこに chmod 777 /var/www/html などと書き込めばvagrant初回起動時に権限付与ができます。 具体的には, Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| (中) end の中のどこかに config.vm.provision :shell, :inline => <<-SCRIPT chmod 777 /var/www/html SCRIPT と書いてvagrat up,vagrant reload,(初回起動時以外はvagrant provision)とすれば,反映されます(直接ログインして権限変更する方が簡単だと思いますが)。因みにvagrant の起動コマンドは,スーパーユーザー権限でshellの実行を行うのでsudoいりません。一般ユーザー(defaultはvagrant)でshellを実行したい場合はprevillegedというオプションをつけるとできます。(所有者をユーザーにしたいユーザーのホームディレクトリ以下にファイルを配置したいshellのプロヴィジョニングによって得られたファイルの所有者を特定のユーザーにしたいなどの理由で変更します) 少し書き方を変えていますが,以下の記事も参考になると思うのでよかったらどうぞ。 http://k-holy.hatenablog.com/entry/2013/09/05/084237 因みにudonya様が書かれている config.vm.synced_folder ".", "/vagrant", :mount_options => ["dmode=777","fmode=666"] という記述は, ホストとゲストのosで共有するディレクトリを指定して,directoryの権限と,fileの権限を変更している記述ですのでゲストの/var/www/htmlを共有ディレクトリにしない限り権限付与との直接の関係はありません。 またphpでwebアプリケーションなどを作成して実運用と同じように外部のマシンと接続で試したい場合,仮想マシンはゲストはホストと分離された別マシンと等価なので同じネットワーク内でつなげば,ゲストのサーバにホストのブラウザからアクセスするという方法が試せます。 この場合は,Vagrantfileにホストオンリーアダプタという機能をonにするの記述を追加するのがいい方法だと思います。 linuxは覚えることも多くて使いこなせるようになるまで苦労すると思いますが,日々コマンドを打ち込んで実行結果を見て何が起きているか考えること,何かやりづらいと思った時に効率のいい方法がないか調べること,ギークな人の記事を読むことを実践していけば着実にレベルが上がっていくと思うので頑張って下さい。
udonya

2016/03/06 02:44

tkow様 実運用の面までのアドバイス、丁寧な解説ありがとうございました! この回答を参考に今後も理解を深めていこうと思います。
guest

0

vagrant ssh

して、仮想マシンがわで

bash

1sudo chmod 777 /var/www/html

で権限を付与することはできますよ。
777は誰でも書き込み出来る権限で、セキュリティ上あまり良くないので、後ほど勉強してみてください。

投稿2016/03/05 16:48

sekitaka_1214

総合スコア509

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

udonya

2016/03/06 02:43

sekitaka_1214様 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問