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

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

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

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

1回答

3950閲覧

launchdで動かすとPermission deniedでエラーとなる

KojiHys

総合スコア7

MacOS(OSX)

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2017/09/22 00:06

編集2017/09/22 12:14

###前提・実現したいこと
PHPで作成したBOTをMacのローカル環境で定期実行をしたいが、launchdで動かすとPermission deniedでエラーとなる

###発生している問題・エラーメッセージ
テスト用にテキストファイルを書き出すスクリプト(index.php)を作成しました。
ターミナルで手動で正常動作を確認した上で、
launchdを使用して定期実行を試したところ動作せず、下記のエラーが出て困っています。

エラーメッセージ
Warning: file_put_contents(phpOutput.txt): failed to open stream: Permission denied in /Applications/MAMP/htdocs/hoge/index.php on line 5

ご回答の程、よろしくお願いいたします。

###該当のソースコード
[PHP]

<?php $file = 'phpOutput.txt'; $Message = "成功しました"; file_put_contents($file,$Message, FILE_APPEND); ?>

[plist]

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>phpTest</string> <key>ProgramArguments</key> <array> <string>/Applications/MAMP/bin/php/php7.1.6/bin/php</string> <string>/Applications/MAMP/htdocs/hoge/index.php</string> </array> <key>StartInterval</key> <integer>15</integer> <key>StandardOutPath</key> <string>/Applications/MAMP/htdocs/hoge/output.txt</string> <key>StandardErrorPath</key> <string>/Applications/MAMP/htdocs/hoge/error.txt</string> </dict> </plist>

###試したこと
[動作の確認]
・設定した間隔(15秒)毎に、(Warning: file_put_contents(phpOutput.txt): failed to open stream: Permission denied in )が表示される
・ブラウザとターミナルからindex.phpを実行→正常動作
・よって、launchdは定期実行しようとしているが、アクセス権限の不備で動作していない

[/htdocs/hoge/配下の権限の確認]
・/Applications/MAMP/htdocs/hoge/配下のpermissionは(755)だった
・phpOutput.txtのpermissionをchmodで666に変更
→エラーの状態変わらず

[launchdをrootで実行]
・sudo luanchctl load hoge.plistを実行。(Path had bad ownership/permissions)とエラーが出たため、ownerとgroupを、admin,staff→root,wheelに変更
・sudo luanchctl load hoge.plistを実行。実行エラーは出なくなったが、index.phpは動作せず。←今ここ

###補足情報(言語/FW/ツール等のバージョンなど)
・使用環境:MacOS Sierra バージョン 10.12.6
・使用言語:PHP 7.1.6
・hoge.plistの配置場所:/Library/LaunchAgents/hoge.plist
・index.phpの配置場所:
/Applications/MAMP/htdocs/hoge/index.php

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

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

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

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

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

m.ts10806

2017/09/22 01:18

プログラムコード(およびエラーメッセージ)は```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)
guest

回答1

0

ベストアンサー

plist / エラーメッセージ の中と 補足情報に書かれている index.php の PATH が、異なりますが、どちらが正しいですか?
とりあえず、エラーメッセージのパスが正しい PATH と仮定して回答します。


Mac OS の launchd から起動されるプログラムは、ログインユーザーで実行されて、カレントディレクトリは、 / (ルートディレクトリ)になると思います。

そのため、 / に phpOutput.txt を作ろうとして、「file_put_contents(phpOutput.txt): failed to open stream: Permission denied」のエラーが発生しているのではないかと推測します。

プログラムに対し、以下の変更をしたらどうなるでしょうか?

  1. $file = 'phpOutput.txt'; を $file = '/Applications/MAMP/htdocs/hoge/phpOutput.txt'; の様にすべてのファイルパスを / (ルートディレクトリ)からのフルパスで、記入したらどうなるでしょうか?

  2. フルパスでも NG の場合、$file = '/Users/アカウント名/phpOutput.txt'; のように ホームディレクトリの下の場所で、フルパスに変更したらどうなるでしょうか?

投稿2017/09/22 00:53

編集2017/09/22 00:55
CHERRY

総合スコア25171

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

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

KojiHys

2017/09/22 12:12 編集

早速のご回答ありがとうございました。1)の解決方法で無事動作しました。 $file = 'phpOutput.txt'; を $file = '/Applications/MAMP/htdocs/hoge/phpOutput.txt'; の様にすべてのファイルパスを / (ルートディレクトリ)からのフルパスで、記入したらどうなるでしょうか? 「ログインユーザーで実行されて、カレントディレクトリは、 / (ルートディレクトリ)になる」この観点がすっかり抜けておりました。 大変助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問