在 vagrant 中通过 cli 删除文件给予权限被拒绝
Deleting a file through cli in vagrant give permission denied
我正在尝试从 vagrant 中的命令行 运行 php 脚本,但在尝试删除文件时遇到权限被拒绝的错误。
使用命令sudo chmod 777 messages/
不起作用,因为我无法更改目录权限,vagrant 的共享文件夹不允许这样做。
我也尝试过使用chmod
和umask
更改目录和文件的权限以便能够删除它,但无济于事。
$oldUMask = umask(0000);
chmod($dir, 0777);
chmod($file, 0777);
unlink($file);
umask($oldUMask);
我该如何解决这个问题?我是否遗漏了一些明显的东西?
目录结构如下:
/vagrant
/app
/messages
并且目录的所有者和组是 www-data,vagrant 也是 运行 以及那些用户和组设置。
这是完整的脚本:
<?php
require 'cli-start.php';
use CodeRichard\Config\Config;
use CodeRichard\Text\MessageInfo;
use CodeRichard\Text\TextMessage;
$dir = 'messages/';
$iterator = new DirectoryIterator($dir);
$file = null;
/** @var SplFileInfo $entry */
foreach($iterator as $entry)
{
$ext = $entry->getExtension();
if($entry->isDir() || strtolower($ext) != 'json')
{
continue;
}
$file = $entry->getRealPath();
break;
}
if($file != null)
{
$message = json_decode(file_get_contents($file), true)['message'];
$service = new Services_Twilio(Config::get('twilio.account_sid'), Config::get('twilio.auth_token'));
$messageInfo = new MessageInfo(Config::get('twilio.from_number'), Config::get('twilio.to_number'), $message);
$textMessage = new TextMessage($service, $messageInfo);
$status = $textMessage->send();
if($status['sent'])
{
$oldUMask = umask(0000);
chmod($dir, 0777);
chmod($file, 0777);
unlink($file);
umask($oldUMask);
}
echo $status['message'];
}
已知问题。最简单的解决方案是在 Vagrantfile 中修改同步文件夹设置:
config.vm.synced_folder "./htdocs", "/var/www", owner: "vagrant", group: "www-data", mount_options: ["dmode=775,fmode=664"]
我正在尝试从 vagrant 中的命令行 运行 php 脚本,但在尝试删除文件时遇到权限被拒绝的错误。
使用命令sudo chmod 777 messages/
不起作用,因为我无法更改目录权限,vagrant 的共享文件夹不允许这样做。
我也尝试过使用chmod
和umask
更改目录和文件的权限以便能够删除它,但无济于事。
$oldUMask = umask(0000);
chmod($dir, 0777);
chmod($file, 0777);
unlink($file);
umask($oldUMask);
我该如何解决这个问题?我是否遗漏了一些明显的东西?
目录结构如下:
/vagrant
/app
/messages
并且目录的所有者和组是 www-data,vagrant 也是 运行 以及那些用户和组设置。
这是完整的脚本:
<?php
require 'cli-start.php';
use CodeRichard\Config\Config;
use CodeRichard\Text\MessageInfo;
use CodeRichard\Text\TextMessage;
$dir = 'messages/';
$iterator = new DirectoryIterator($dir);
$file = null;
/** @var SplFileInfo $entry */
foreach($iterator as $entry)
{
$ext = $entry->getExtension();
if($entry->isDir() || strtolower($ext) != 'json')
{
continue;
}
$file = $entry->getRealPath();
break;
}
if($file != null)
{
$message = json_decode(file_get_contents($file), true)['message'];
$service = new Services_Twilio(Config::get('twilio.account_sid'), Config::get('twilio.auth_token'));
$messageInfo = new MessageInfo(Config::get('twilio.from_number'), Config::get('twilio.to_number'), $message);
$textMessage = new TextMessage($service, $messageInfo);
$status = $textMessage->send();
if($status['sent'])
{
$oldUMask = umask(0000);
chmod($dir, 0777);
chmod($file, 0777);
unlink($file);
umask($oldUMask);
}
echo $status['message'];
}
已知问题。最简单的解决方案是在 Vagrantfile 中修改同步文件夹设置:
config.vm.synced_folder "./htdocs", "/var/www", owner: "vagrant", group: "www-data", mount_options: ["dmode=775,fmode=664"]