无法在目录中写入 - Digital Ocean
Unable to write in the Directory - Digital Ocean
我正在尝试使用 post 请求上传图像并将其移动到目录。我试过了..
$file = $request->file('file');
$extension = strtolower($file->getClientOriginalExtension());
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$generatedName = sha1(time().time());
$directory = '../public/uploads/imgs/'; // works
$fileName = $generatedName . "." . $extension; // works
// 1
$file->move($directory, $fileName);
// 2
$file->move(base_path().$directory, $fileName);
此时,我收到错误消息:
1 Unable to write in the "../public/uploads/imgs" directory
2 Unable to write in the "var/www/laravel/public/uploads/imgs" directory
我认为这是由权限引起的,但也没有帮助..我试过了
sudo chmod 770 /var/www/laravel/public/uploads (also /imgs/
and
sudo chmod -R 775 /var/www/laravel/public/uploads
我还找到了其他东西可以尝试,但无法弄清楚在用户名位中写什么:
sudo chown username:www-data /var/www/laravel/public/uploads/
我在 Digital Ocean 上使用 NGINX
尝试 运行 此命令授予对 upload
目录及其所有子目录的写入权限:
sudo chmod -R 775 /var/www/laravel/public/uploads
首先尝试创建目录:
$directory_path = "...";//whatever you wish it to be
//if the directory doesn't exist already, it is created:
if (!file_exists($directory_path))
{
mkdir($directory_path);
}
首先不要包含其他代码,只是为了看看您是否能够真正创建一个目录。如果它有效并且在那里,请尝试将文件包含在那里。如果这对您有用,请告诉我!
我用 Digital Ocean 的特定案例解决了我的问题。首先我尝试了...
useradd -U -G www-data -m -c "deploy" deploybot
chown deploybot:www-data /var/www/laravel
chmod 2755 /var/www/laravel
然后..
sudo usermod -aG www-data deploybot
sudo chown -R www-data:www-data /var/www/laravel
sudo chown -R www-data:www-data /var/www/laravel/public/uploads
sudo chmod -R 775 /var/www
从您的错误消息开始:
1.无法写入“../public/uploads/imgs”目录
默认情况下,您的 nginx 指向 laravel 安装的 public
文件夹。因此,../public/uploads/imgs
将解析为 /var/www/laravel/public/uploads/imgs
,如果它没有对 laravel
文件夹的读取权限,它将无法工作。
通常情况下,nginx 应该只有对您的 public
文件夹的读取权限。
2。无法写入 "var/www/laravel/public/uploads/imgs" 目录
路径是相对路径。它的绝对路径是 /var/www/laravel/public/var/www/laravel/public/uploads/imgs
默认情况下不存在。
解决方案:
替换这些行:
$directory = '../public/uploads/imgs/';
$file->move(base_path().$directory, $fileName);
有:
$directory = 'uploads/imgs/';
$file->move(public_path().$directory, $fileName);
文档:https://laravel.com/docs/5.1/helpers#paths
警告:不要给 nginx 写访问你的 public
文件夹!如果有人设法上传并覆盖您的 index.php
,您的网站将受到威胁。
请创建具有适当权限的目标路径 imgs,而不是没有特定权限。请检查以下代码,您可以在其中授予 imgs 文件夹权限。
$destinationPath = public_path().'/uploads/imgs/';
// Create folders if they don't exist
if (!file_exists($destinationPath)) {
File::makeDirectory($destinationPath, $mode = 0755, true, true);
}
makeDirectory 参数的位置将在 here 中阐明。
仅供参考,$mode 将是 0775、0777(认为它不应该给它)。
sudo usermod -aG www-data deploybot\
sudo chown -R www-data:www-data /var/www/laravel
sudo chown -R www-data:www-data /var/www/laravel/public/uploads
sudo chmod -R 775 /var/www
对我有用
确保相应地更改您的用户
在本例中是 deploybot
我正在尝试使用 post 请求上传图像并将其移动到目录。我试过了..
$file = $request->file('file');
$extension = strtolower($file->getClientOriginalExtension());
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$generatedName = sha1(time().time());
$directory = '../public/uploads/imgs/'; // works
$fileName = $generatedName . "." . $extension; // works
// 1
$file->move($directory, $fileName);
// 2
$file->move(base_path().$directory, $fileName);
此时,我收到错误消息:
1 Unable to write in the "../public/uploads/imgs" directory
2 Unable to write in the "var/www/laravel/public/uploads/imgs" directory
我认为这是由权限引起的,但也没有帮助..我试过了
sudo chmod 770 /var/www/laravel/public/uploads (also /imgs/
and
sudo chmod -R 775 /var/www/laravel/public/uploads
我还找到了其他东西可以尝试,但无法弄清楚在用户名位中写什么:
sudo chown username:www-data /var/www/laravel/public/uploads/
我在 Digital Ocean 上使用 NGINX
尝试 运行 此命令授予对 upload
目录及其所有子目录的写入权限:
sudo chmod -R 775 /var/www/laravel/public/uploads
首先尝试创建目录:
$directory_path = "...";//whatever you wish it to be
//if the directory doesn't exist already, it is created:
if (!file_exists($directory_path))
{
mkdir($directory_path);
}
首先不要包含其他代码,只是为了看看您是否能够真正创建一个目录。如果它有效并且在那里,请尝试将文件包含在那里。如果这对您有用,请告诉我!
我用 Digital Ocean 的特定案例解决了我的问题。首先我尝试了...
useradd -U -G www-data -m -c "deploy" deploybot
chown deploybot:www-data /var/www/laravel
chmod 2755 /var/www/laravel
然后..
sudo usermod -aG www-data deploybot
sudo chown -R www-data:www-data /var/www/laravel
sudo chown -R www-data:www-data /var/www/laravel/public/uploads
sudo chmod -R 775 /var/www
从您的错误消息开始:
1.无法写入“../public/uploads/imgs”目录
默认情况下,您的 nginx 指向 laravel 安装的 public
文件夹。因此,../public/uploads/imgs
将解析为 /var/www/laravel/public/uploads/imgs
,如果它没有对 laravel
文件夹的读取权限,它将无法工作。
通常情况下,nginx 应该只有对您的 public
文件夹的读取权限。
2。无法写入 "var/www/laravel/public/uploads/imgs" 目录
路径是相对路径。它的绝对路径是 /var/www/laravel/public/var/www/laravel/public/uploads/imgs
默认情况下不存在。
解决方案:
替换这些行:
$directory = '../public/uploads/imgs/';
$file->move(base_path().$directory, $fileName);
有:
$directory = 'uploads/imgs/';
$file->move(public_path().$directory, $fileName);
文档:https://laravel.com/docs/5.1/helpers#paths
警告:不要给 nginx 写访问你的 public
文件夹!如果有人设法上传并覆盖您的 index.php
,您的网站将受到威胁。
请创建具有适当权限的目标路径 imgs,而不是没有特定权限。请检查以下代码,您可以在其中授予 imgs 文件夹权限。
$destinationPath = public_path().'/uploads/imgs/';
// Create folders if they don't exist
if (!file_exists($destinationPath)) {
File::makeDirectory($destinationPath, $mode = 0755, true, true);
}
makeDirectory 参数的位置将在 here 中阐明。
仅供参考,$mode 将是 0775、0777(认为它不应该给它)。
sudo usermod -aG www-data deploybot\
sudo chown -R www-data:www-data /var/www/laravel
sudo chown -R www-data:www-data /var/www/laravel/public/uploads
sudo chmod -R 775 /var/www
对我有用 确保相应地更改您的用户 在本例中是 deploybot