从文件路径 Zend Framework 2 中删除文档根目录

Removing document root from file path Zend Framework 2

我正在尝试显示图像,但我在浏览器控制台中 运行 遇到 Not allowed to load local resource: file:///C:/xampp/htdocs/public/images/profile/jimmy/status/boned.jpg 错误。我想做的是使用 Zend Framework 2 提供的基本路径,但我正在检索模型中的图像(据我所知),我不能像在看法。

这是我的 json 字符串,我正在 returning 但希望能够 return /images/profile/jimmy/status/boned.jpg 以及其中的任何其他图像。

我正在获取目录 'status' 之外的所有文件。我正在尝试获取状态目录中的文件。当我执行 var_dump 这就是我得到的结果 string(43) "C:\xampp\htdocs/public/images/profile/jimmy" 我不清楚为什么它在 '/jimmy'

之后省略了状态目录

json 正在 return 编辑的字符串:

{"feed":{"username":"Timmy","status":["this is jimmy, test"],"images":["videos","status","sithtoon.jpg","sith.jpg","edited_photos","diploma.jpg","current","albums","Screenshot_2016-08-09_21_28_13_361272.jpg","Screenshot_2016-08-05_17_55_48_500802.jpg","515gIIJ-Imgur.png",".htaccess"]}}

这里是相关的PHP代码(在模型中):

public function listFriendsStatus()
{
    $user_id = $this->getUserId()['id'];

    // get the friend ids based on user id
    // and then compare the friend id to the id in status table
    $friend_query = new Select('friends');

    $friend_query->columns(array('friend_id'))
    ->where(array('user_id' => $user_id));  

    $query = $this->sql->getAdapter()->query(
        $this->sql->buildSqlString($friend_query),
        Adapter::QUERY_MODE_EXECUTE
    );

    if ($query->count() > 0) {
        $friend_id = array();

        foreach ($query as $result) {
            $friend_id[] = $result['friend_id'];
        }


        $status = new Select('status');

        $status->columns(array('status'))
        ->where(array('id' => $friend_id)); 

        $status_query = $this->sql->getAdapter()->query(
            $this->sql->buildSqlString($status),
            Adapter::QUERY_MODE_EXECUTE
        );

        if ($status_query->count() > 0) {
            // check if a image was used
            $members = new Select('members');

            $members->columns(array('username'))
            ->where(array('id' => $friend_id));

            $image_query = $this->sql->getAdapter()->query(
                $this->sql->buildSqlString($members),
                Adapter::QUERY_MODE_EXECUTE
            );

            if ($image_query->count() > 0) {
                foreach ($image_query as $value) {
                    if (is_dir(getcwd() . '/images/profile/' . $value['username'] . '/status/')) {
                        $status_dir = pathinfo(getcwd() . '/images/profile/' . $value['username'] . '/status/');
                    }
                }


                $images = array();

                chdir($status_dir['dirname']);

                var_dump($status_dir['dirname']);

                // retrieve the image inside the status directory
                foreach (array_diff(scandir($status_dir['dirname'], 1), array('.', '..')) as $values) {
                    $images[] = $values;    
                }
            } else {
                throw new FeedException("The user does not exist in the user table.");
            }

            $status = array();

            // get all the statuses
            foreach ($status_query as $rows) {
                $status[] = $rows['status'];    
            }

            return array('username' => ucfirst($value['username']), 'status' => $status, 'images' => $images); // how to just get the basePath path with zf2
        } else {
            throw new FeedException("No status was found for your friends.");
        }
     } else {
        throw new FeedException(sprintf("Could not locate any friends for %s", $this->user));
     }
}

控制器代码:

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_dump($status_dir);

我猜 'status' 会在 'basename' 和/或 'filename' 中 pathinfo 获取参数字符串路径的最后一段作为 'basename'。 Pathinfo 只将字符串解析为路径和 return 数组信息,不检查它的 isDir 或 isFile。如果您需要使用路径信息,您正确的 chdir 应该看起来像 chdir($status_dir['dirname'] . '/' . $status_dir['basename'] );

换句话说:'images/profile/jimmy/status' 的目录名是 'images/profile/jimmy',这是您在 var_dump($status_dir['dirname']) 中看不到状态以及 chdir($status_dir['dirname']) 无法正常工作的原因。