我使用Codeigniter的文件上传库上传文件并尝试将URL插入数据库。 Codeigniter仅在使用$this->upload->data()
时提供server_path,这不能用于向用户显示图像。
我通常可以像base_url('uploads) . '/' . $data['file_name']
这样做,但我会将图像存储在每个帖子的文件夹中。
例如,我将C:/xampp/htdocs/site/uploads/32/image.jpg
作为full_path,如何将其转换为http://mysite.com/uploads/32/image.jpg
唯一想到的是使用正则表达式,但我觉得必须有PHP函数或Codeigniter函数来帮助解决这个问题?
如何将服务器路径转换为正确的URL?
答案 0 :(得分:2)
你可以使用$ _SERVER ['HTTP_HOST'];得到网址。使用帖子的ID,您可以像这样构建路径:
$url = "http://" . $_SERVER['HTTP_HOST'] . "/" . $id . "/" . basename($data['file_name']);
basename()函数返回路径中最后一个/之后的所有内容。
答案 1 :(得分:0)
在CodeIgniter
中,您应该使用$config['base_url']
您可以使用ENVIRONMENT
设置不同的base_url
,例如:
switch(ENVIRONMENT)
{
case 'development':
$config['base_url'] = 'http://localhost/';
break;
case 'testing':
$config['base_url'] = 'http://testing.server.com/';
break;
default:
$config['base_url'] = 'http://liveserver.com/';
}
请参阅config.php
现在只需使用base_url
替换您的本地路径,str_replace
就可以完成工作(文档here)
$newpath = str_replace("C:/xampp/htdocs/site/", $config['base_url'], $localpath);
此外,如果您对获取路径的某些部分感兴趣,可以使用explode
(记录为here)和/
来创建一个包含您的每个“部分”的数组路径
$pathElements = explode('/', $localpath);
在这种情况下,$pathElements[0]
为C:
,$pathElements[1]
为xampp
等等。
答案 2 :(得分:0)
您只需要将文件名保存到数据库中,只需使用帖子ID和文件名:
$url = "http://mysite.com/uploads/" . $postID . "/" . $fileName;
获取文件名:How to get file name from full path with PHP?
<?php
$path = "C:/xampp/htdocs/site/uploads/32/image.jpg";
$file = basename($path); // $file is set to "image.jpg"
$file = basename($path, ".jpg"); // $file is set to "image"
?>