Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php exec文件从终端运行,而不是从浏览器运行_Php_Macos_Exec - Fatal编程技术网

php exec文件从终端运行,而不是从浏览器运行

php exec文件从终端运行,而不是从浏览器运行,php,macos,exec,Php,Macos,Exec,我有一个程序可以启动我的屏幕保护程序: <?php $cmd='automator /Users/myusername/Library/Services/Start_Screensaver.workflow'; shell_exec($cmd); ?> 它工作正常,但当我尝试从浏览器运行它时,apache错误日志文件中总是出现以下错误: The workflow file does not exist. 我觉得这很奇怪,因为我确实有从根文件夹开始的正确路径。任何帮助都将不胜感激。

我有一个程序可以启动我的屏幕保护程序:

<?php
$cmd='automator /Users/myusername/Library/Services/Start_Screensaver.workflow';
shell_exec($cmd);
?>
它工作正常,但当我尝试从浏览器运行它时,apache错误日志文件中总是出现以下错误:

The workflow file does not exist.
我觉得这很奇怪,因为我确实有从根文件夹开始的正确路径。任何帮助都将不胜感激。谢谢大家!

此外,尽管我非常确定apache在我的mac上设置正确,但我只能通过mac本身的ip地址访问网页。例如,当我在手机上访问Mac的IP时,它无法加载页面,但当我访问Raspberry Pi的IP地址(也运行apache)时,它工作正常

编辑:要明确的是,这一点不是在我的Mac电脑上启动屏幕保护程序,而是在Tasker内从我的手机远程启动它

编辑:我将automator工作流文件放在同一个目录中,并完成了编辑

sudo chmod 777 start_screensaver.workflow
现在我得到了以下错误:

2015-12-24 19:12:26.376 automator[2313:462937] Not loading action at /Library/Automator/Create Table from Data in Workbook.action: No bundleIdentifier.
2015-12-24 19:12:26.377 automator[2313:462937] Not loading action at /Library/Automator/Save Outlook Messages as Files.action: No bundleIdentifier.
2015-12-24 19:12:26.677 automator[2313:462937] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2015-12-24 19:12:26.678 automator[2313:462937] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2015-12-24 19:12:26.679 automator[2313:462937] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2015-12-24 19:12:26.680 automator[2313:462937] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2015-12-24 19:12:27.692 Automator Runner[2314:462973] Not loading action at /Library/Automator/Create Table from Data in Workbook.action: No bundleIdentifier.
2015-12-24 19:12:27.692 Automator Runner[2314:462973] Not loading action at /Library/Automator/Save Outlook Messages as Files.action: No bundleIdentifier.
2015-12-24 19:12:27.757 Automator Runner[2314:462973] Script Monitor is missing or damaged: Error Domain=NSCocoaErrorDomain Code=256 "The application “ScriptMonitor” could not be launched because a miscellaneous error occurred (OSStatus -10810)." UserInfo={NSURL=file:///System/Library/CoreServices/ScriptMonitor.app/, NSLocalizedDescription=The application “ScriptMonitor” could not be launched because a miscellaneous error occurred (OSStatus -10810)., NSUnderlyingError=0x7f80f3411190 {Error Domain=NSOSStatusErrorDomain Code=-10810 "kLSUnknownErr: Unexpected internal error"}}
2015-12-24 19:12:27.758 Automator Runner[2314:462973] Script Monitor is missing or damaged
2015-12-24 19:12:27.843 Automator Runner[2314:462973] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2015-12-24 19:12:27.844 Automator Runner[2314:462973] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2015-12-24 19:12:27.844 Automator Runner[2314:462973] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2015-12-24 19:12:27.846 Automator Runner[2314:462973] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2015-12-24 19:12:27.872 Automator Runner[2314:462980] warning: failed to get scripting definition from /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app; it may not be scriptable.
2015-12-24 19:12:27.966 Automator Runner[2314:462980] Scripting Bridge could not launch application /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app.
2015-12-24 19:12:27.997 Automator Runner[2314:462973] Error writing cache to /Library/WebServer/Library/Caches/com.apple.automator.actionCache-user-standardLocations.plist: The folder “com.apple.automator.actionCache-user-standardLocations.plist” doesn’t exist.
2015-12-24 19:12:30.830 Automator Runner[2314:462973] Error writing cache to /Library/WebServer/Library/Caches/com.apple.automator.actionCache-system-standardLocations.plist: The folder “com.apple.automator.actionCache-system-standardLocations.plist” doesn’t exist.
2015-12-24 19:12:31.148 Automator Runner[2314:462973] Error writing cache to /Library/WebServer/Library/Caches/com.apple.automator.actionCache-bundleLocations.plist: The folder “com.apple.automator.actionCache-bundleLocations.plist” doesn’t exist.

您的Apache用户似乎无权访问该目录。从cli运行php脚本时,可以将其作为
myusername
运行,但一旦从浏览器中打开它,它将成为(
\u www

因此,您需要确保
\u www
用户可以访问该文件。将该文件的权限设置为
777
,可能就可以做到这一点

附言:顺便说一句,迈克绝对正确,你应该重新考虑你使用脚本的方式

UPD 屏幕保护程序启动了,很酷。所以,问题完全在于权限。所以,您可以尝试使用php内置服务器运行它

php -S localhost:8000 index.php
或者配置apache和


或者,您可以将所有与屏幕保护程序相关的内容移动到一个可公开访问的目录中,但是,同样,这可能会导致一些安全缺陷。

我只想说,这不是PHP的设计目的。这就是说,有了一些广泛的工作知识,很可能做到这一点,但我建议不要这样做。考虑所有的含义:如果我知道你的IP,我可以启动你的屏幕保护程序。我肯定你不想在你自己的电脑上写后门。。。一个解决方案(具备工作知识)是编写一个cron脚本,并触摸一个文件,如果cron检测到该文件,它将启动任务。会有更多,但这应该是一个开始。好的,谢谢!我肯定会研究cron,但apache是否已设置,因此默认情况下只能通过本地IP访问它?转到我的本地IP在浏览器中打开页面时,转到我的公共IP不会打开页面。如果这是一个愚蠢的问题,我很抱歉,我对网络不太了解。@JanG我不认为使用apache服务器启动屏幕保护程序是一个好主意,除非您想远程启动它(从电话或其他方式)。使用cron来安排屏幕保护程序对我来说也很奇怪。我认为你应该创建一个挂在后台的恶魔并启动屏幕保护程序。是的,我应该提到这一点,但整个过程的重点是远程启动我的屏幕保护程序。我使用了“sudo chmod 777 index.php”命令,它仍然会导致同样的问题。(另一方面,我应该从一开始就这么说,但重点不是从我的Mac启动屏幕保护程序,而是从我的手机内部Tasker启动它)。@JanG你不应该修改php文件,而应该修改屏幕保护程序workfliw文件;)
php -S localhost:8000 index.php