从服务器路径获取URL

时间:2012-11-28 23:09:21

标签: php codeigniter

我使用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?

3 个答案:

答案 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"
?>