我正在创建一个中等大小的应用程序。
此应用程序包含许多产品。
现在这些产品有很多图像(一种产品可以有5到6张图像)
要尝试进行某种排序,我想为每个产品创建一个文件夹,此文件夹包含绑定到产品的所有图像。
到目前为止,我已经尝试了以下内容:
move_uploaded_file($file, APP.'product_images/'.$product_id.'/'.$image['name']);
但是,当我尝试这个时,我收到以下错误:
Warning (2): move_uploaded_file(/var/www/udlejnings-priser/cake/app/product_images/22/afterClick.png): failed to open stream: No such file or directory [APP/Controller/ImagesController.php, line 56]
Warning (2): move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php472ci6' to '/var/www/udlejnings-priser/cake/app/product_images/22/afterClick.png' [APP/Controller/ImagesController.php, line 56]
现在我不是一个完整的菜鸟,并且知道这意味着我缺少该文件夹的权限。
但问题是,如果该文件夹不存在(即这是第一次上传该产品的图像),则应创建一个新文件夹。
我的问题是两个分手。
答案 0 :(得分:5)
[我]知道这意味着我缺少该文件夹的权限。
实际上没有=)。错误消息显示为:
无法打开流:没有此类文件或目录
其中没有提及problrm的权限:您尝试写入的包含文件夹不存在。
没有
没有必要这样做 - 创建的任何内容都具有允许webserver用户读取文件的正确权限。然而,首先有必要尝试并创建一个文件夹,问题并非如此。
使用CakePHP,Folder class可以用来做到这一点:
App::uses('Folder', 'Utility');
$dir = new Folder('/path/to/folder', 2);
使用第二个参数to create a new folder if it doesn't exist。在问题的上下文中,这意味着代码看起来像这样:
function whatever() {
if ($this->request->data) {
...
$unused = new Folder(APP.'product_images/'.$product_id, true);
if (move_uploaded_file($file, APP.'product_images/'.$product_id.'/'.$image['name'])) {
...
} else {
...
}
}
}
文件夹APP/product_images
应该已经,并且必须具有权限,以便网络服务器用户(例如apache)可以写入它,否则它将不会可以创建子文件夹/上传文件。假设存在APP/product_images
且Web服务器用户具有写入权限,则无需修改上载文件的权限 - 用户创建的文件默认为该用户可读。
答案 1 :(得分:4)
试试这个:
if (!file_exists('path/to/directory')) {
mkdir('path/to/directory', 0777, true);
}
1)如果新文件夹尚未存在,是否会自动创建新文件夹。 => file_exists 和 mkdir
2)我如何授予新创建的文件夹以避免此问题=>的 0777 强>
答案 2 :(得分:0)
chmod()
更改权限。要检查某个文件夹的存在,您也可以使用is_dir()
。
答案 3 :(得分:0)
添加魔法常数总是一个好主意
long int *a = malloc(sizeof(long int)*size);
long int *b = malloc(sizeof(long int)*size2);
...
free(a);
free(b);
到文件或目录路径。
(__DIR__
给出脚本所在目录的路径。在错误消息中,“APP”以与路径名称不同的颜色突出显示。这可能暗示无法找到路径。