在 codeigniter 文件上传中获取相对路径 class 配置数组
get relative path in codeigniter file upload class config array
我一直在为一个项目使用 Codeigniter,我使用了很多库,包括文件上传 Class 库。我知道如何上传和设置 $config
上传数组。
我卡住的是 codeigniter 文件上传保存文件路径的方式,当我使用 $config['full_path']
时,它是在数据库中保存我机器的绝对路径。我将 upload_path
的值设置为 'uploads/documents'
并且在数据库中它被保存为 path/to/xampp/path/to/project/uploads/documents
,但我只想要从我的应用程序根目录开始的路径,所以我可以在 [=16] 中访问它=] 就像我现在使用它时,它显示为 localhost/project/path/to/xampp/path/to/project/uploads/documents
.
我刚刚看到我误解了你的问题,但这也是 FCPATH 的工作。只需将其用于替换以获得相对路径:
var_dump(str_replace(FCPATH, '', $upload_path));
这是环境友好的,可以在多台机器上工作。
我无法测试我的代码,因为我现在正在使用手机,但请随时提出有关我的解决方案的更多问题
该行下方的原始答案,也许它可以节省一些时间,并且它有一些关于名称 constans 的更多信息:
为该作业使用 CodeIgniter 给定的常量。
FCPATH
链接到您的 index.php 所在的同一目录,APPPATH
链接到您的应用程序文件夹。
这是环境友好的,如果您将项目移动到另一个服务器,将会节省一些工作。
举个例子:
$config['upload_path'] = FCPATH . 'uploads/documents';
$this->load->library('upload', $config);
在我的情况下,这将指向:/var/www/myapp/uploads/documents
请注意,只有在您不自动加载上传库的情况下,这才有效。如果你确实检查了上传 class 文档中的初始化方法。
https://www.codeigniter.com/userguide3/libraries/file_uploading.html#setting-preferences
我在我的手机上看不到行号,但两个常量都在 index.php 中定义,应该值得一看以了解它们包含的内容:
https://github.com/bcit-ci/CodeIgniter/blob/develop/index.php
在constants.php
中/config
我定义ROOT
为:
define('ROOT', realpath($_SERVER['DOCUMENT_ROOT']));
你可能会使用 FCPATH
,我只是更喜欢使用我自己的,以防我需要更改任何内容。
然后我在我的图像处理程序模型中使用这个函数:
/**
* Replaces ROOT in path with empty value
* /var/www/images/this.jpg to /images/this.jpg when /var/www is ROOT
*
* @param string $path
* @return string Rel path
*/
public function get_rel_path($path) {
return str_replace('\', '/', str_replace(ROOT, '', $path));
}
并将 /images/this.jpg
保存在数据库中,这样我就不必在想显示图像时调用此函数。如果您需要检查文件是否存在,使用 if(is_file(ROOT . $somefilefromdb)) { }
很简单
对于上传和任何需要完整路径的内容,只需使用 ROOT . '/uploads/'
我一直在为一个项目使用 Codeigniter,我使用了很多库,包括文件上传 Class 库。我知道如何上传和设置 $config
上传数组。
我卡住的是 codeigniter 文件上传保存文件路径的方式,当我使用 $config['full_path']
时,它是在数据库中保存我机器的绝对路径。我将 upload_path
的值设置为 'uploads/documents'
并且在数据库中它被保存为 path/to/xampp/path/to/project/uploads/documents
,但我只想要从我的应用程序根目录开始的路径,所以我可以在 [=16] 中访问它=] 就像我现在使用它时,它显示为 localhost/project/path/to/xampp/path/to/project/uploads/documents
.
我刚刚看到我误解了你的问题,但这也是 FCPATH 的工作。只需将其用于替换以获得相对路径:
var_dump(str_replace(FCPATH, '', $upload_path));
这是环境友好的,可以在多台机器上工作。
我无法测试我的代码,因为我现在正在使用手机,但请随时提出有关我的解决方案的更多问题
该行下方的原始答案,也许它可以节省一些时间,并且它有一些关于名称 constans 的更多信息:
为该作业使用 CodeIgniter 给定的常量。
FCPATH
链接到您的 index.php 所在的同一目录,APPPATH
链接到您的应用程序文件夹。
这是环境友好的,如果您将项目移动到另一个服务器,将会节省一些工作。
举个例子:
$config['upload_path'] = FCPATH . 'uploads/documents';
$this->load->library('upload', $config);
在我的情况下,这将指向:/var/www/myapp/uploads/documents
请注意,只有在您不自动加载上传库的情况下,这才有效。如果你确实检查了上传 class 文档中的初始化方法。
https://www.codeigniter.com/userguide3/libraries/file_uploading.html#setting-preferences
我在我的手机上看不到行号,但两个常量都在 index.php 中定义,应该值得一看以了解它们包含的内容:
https://github.com/bcit-ci/CodeIgniter/blob/develop/index.php
在constants.php
中/config
我定义ROOT
为:
define('ROOT', realpath($_SERVER['DOCUMENT_ROOT']));
你可能会使用 FCPATH
,我只是更喜欢使用我自己的,以防我需要更改任何内容。
然后我在我的图像处理程序模型中使用这个函数:
/**
* Replaces ROOT in path with empty value
* /var/www/images/this.jpg to /images/this.jpg when /var/www is ROOT
*
* @param string $path
* @return string Rel path
*/
public function get_rel_path($path) {
return str_replace('\', '/', str_replace(ROOT, '', $path));
}
并将 /images/this.jpg
保存在数据库中,这样我就不必在想显示图像时调用此函数。如果您需要检查文件是否存在,使用 if(is_file(ROOT . $somefilefromdb)) { }
对于上传和任何需要完整路径的内容,只需使用 ROOT . '/uploads/'