从文件路径 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'])
无法正常工作的原因。
我正在尝试显示图像,但我在浏览器控制台中 运行 遇到 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'])
无法正常工作的原因。