Php 正在从Zend Framework 2的文件路径中删除文档根目录

Php 正在从Zend Framework 2的文件路径中删除文档根目录,php,zend-framework2,Php,Zend Framework2,我试图显示一个图像,但遇到了不允许加载本地资源的错误:file:///C:/xampp/htdocs/public/images/profile/jimmy/status/boned.jpg在浏览器控制台中。我试图使用Zend Framework 2提供的基本路径,但我正在检索模型中的图像(据我所知),因此我无法像在视图中那样使用$this->basePath() 这是我要返回的json字符串,但我希望能够返回/images/profile/jimmy/status/boned.jpg以及任何其

我试图显示一个图像,但遇到了
不允许加载本地资源的错误:file:///C:/xampp/htdocs/public/images/profile/jimmy/status/boned.jpg
在浏览器控制台中。我试图使用Zend Framework 2提供的基本路径,但我正在检索模型中的图像(据我所知),因此我无法像在视图中那样使用
$this->basePath()

这是我要返回的json字符串,但我希望能够返回
/images/profile/jimmy/status/boned.jpg
以及任何其他图像

我正在获取目录“status”之外的所有文件。我正在尝试获取状态目录中的文件。当我执行
var\u转储时
这就是我得到的
string(43)“C:\xampp\htdocs/public/images/profile/jimmy”
我不清楚为什么它会在“/jimmy”之后省略status目录

正在返回的json字符串:

{“feed”:{“username”:“Timmy”,“status”:[“我是jimmy,test”],“image”:[“videos”,“status”,“sithton.jpg”,“sith.jpg”,“edited_photos”,“diplication.jpg”,“current”,“albums”,“Screenshot”\u 2016-08-09\u 28\u 13\u 361272.jpg”,“Screenshot\u 2016-08-05\u 17\u 55\u 48\u 500802.jpg”,“515gij Imgur.png”,“htaccess”]

以下是相关的PHP代码(在模型中):

控制器代码:

public function getfriendstatusAction()
{
    $layout = $this->layout();
    $layout->setTerminal(true);

    $view_model = new ViewModel();
    $view_model->setTerminal(true);

    try {
        echo json_encode(array('feed' => $this->getStatusService()->listFriendsStatus()));
    } catch (FeedException $e) {
        echo json_encode(array('fail' => $e->getMessage()));
    }

    return $view_model;
}
jquery代码:

$.getJSON('/members/feed/get-friend-status', function(data) {
    $.each(data, function(i, item) {
        $('.w3-container.w3-card-2.w3-white.w3-round.w3-margin').find('h4').html(data[i].username);
        $('.w3-container.w3-card-2.w3-white.w3-round.w3-margin').find('p').html(data[i].status);
        $('.w3-container.w3-card-2.w3-white.w3-round.w3-margin').find('img').attr('src', data[i].images);
    });
}).fail(function(response) {
    console.log(response);
});
我一直在尝试使用PHP提供的其他目录函数,但如果我尝试任何操作,我会遇到找不到的错误目录。基本上,我试图做的是在模型中使用类似的方法
$this->basePath()

我希望这足够清楚

谢谢

这是一个截图,显示了我正在获取的内容以及我希望如何获取状态目录,而不是它之外的目录

我有个主意。 在您的代码中:

$status_dir = pathinfo(getcwd() . '/images/profile/' . $value['username'] . '/status/');
// ..............
chdir($status_dir['dirname']);
var_dump($status_dir['dirname']);
尝试:
var\u dump($status\u dir)

我猜“status”将出现在“basename”和/或“filename”中
pathinfo
将参数字符串路径的最后一段获取为'basename'。 Pathinfo只将字符串解析为路径并返回数组信息,不检查它是否有isDir或isFile。正确的chdir应该是
chdir($status_dir['dirname']./.$status_dir['basename'])如果需要使用pathinfo


换句话说,'images/profile/jimmy/status'的dirname是'images/profile/jimmy',这就是为什么在
var\u dump($status\u dir['dirname'])中看不到状态的原因。
为什么
chdir($status\u dir['dirname'])
工作不正常。

你看了吗?在项目中,
/public
应该是相对路径的根。如果您使用
$this->basePath(pathinfo($file)['basename'])
请求文件/图像,您应该根据
/public
目录的使用情况获得特定文件的相对路径。如果文件位于
/public
文件夹中的“某处”,则应添加此文件,例如:
$this->basePath('/images/profiles/'.pathinfo('/images/profiles/'.pathinfo($file)['basename'])
,但我可以在模型中这样做吗?我不是在控制器或视图中执行此操作。当我尝试时,我得到的是
字符串(43)“C:\xampp\htdocs/public/images/profile/jimmy”
<代码>foreach($image_query as$value){if(is_dir(getcwd()./public/images/profile/'.$value['username'.]./status/')){$status_dir=pathinfo(getcwd()./public/images/profile/'.$value['username']./status/');}
有点困惑为什么它不包含/status/如果您不是在视图中执行,为什么要使用jQuery代码?这毫无意义。为什么要像你在第一句中说的那样“显示图像”,而不是在视图中您应该做的是确保该文件存在于控制器中,如果(file_exists(getcwd()。/images/profile/'.$fileName)){..}
,您可以使用一个简单的
。另外,在
/public/index.php
中,您会发现一个声明,将工作目录设置为
/public
,这样您就不需要在路径中使用
/public
。这样做了,我现在需要做的唯一一件事就是返回路径,以便它将正确加载到视图中。这就是我所拥有的返回数组('username'=>ucfirst($value['username']),'status'=>status,'images'=>status\u dir['dirname']./'.$status\u dir['basename'./'.$images)但是它给了我一个数组到字符串的转换错误。我只想包含包含图像的目录,以便它能正确加载到视图中。$images-是一个数组。你是一个混合字符串连接(
'images'=>$status\u dir['dirname']./'./.$status\u dir['basename'./'./'
)和一个数组(
$images
)是的,我想是的,我只想包括路径和图像。填充$images数组例如:
$images\u path=$status\u dir['dirname'./'$status_dir['basename']./';foreach(数组_diff(scandir($images_path,1),数组('.','..')作为$value){$images[]=**$images_path.*$value;}返回数组('username'=>ucfirst($value['username']),'status'=>status,'images'=>$images)
OR
foreach(数组_diff(scandir($images_path,1),数组('.','..')作为$value){$images[]=$value;}返回数组('username'=>ucfirst($value['username']),'status'=>status$status,'images'=>images,'images_path'=>images\u path)为什么这两个**?
$status_dir = pathinfo(getcwd() . '/images/profile/' . $value['username'] . '/status/');
// ..............
chdir($status_dir['dirname']);
var_dump($status_dir['dirname']);