2
我安裝了一個服務器(VPS)並確保啓用了JSON插件。 現在,我使用Laravel和一個幫助程序文件返回文件的代碼列表。 它在Localhost上工作,但不能在HTTPS服務器上工作。Json在本地主機上工作,但不在服務器上
現在,這個回聲json_encode($ enteries)在localhost(MAMP)上工作,但不能在肝臟服務器上工作。 我正在使用Laravel V5.2 我得到responset類型:text/html在服務器上的響應。 鑑於本地主機,它來應用程序/ json
謝謝你提前。
<?php
namespace ImageBrowser;
use ImageBrowserEntry\ImageBrowserEntry;
use Thumbnail\Thumbnail;
class ImageBrowser {
// path to file upload directory
private $contentPath = '';
public function __construct()
{
$this->contentPath = public_path() .\Config::get('global.DIRECTORY_SEPERATOR'). \Config::get('global.image_browser_path');
}
private function canAccess($path) {
return \ImageHelper::startsWith(realpath($path), realpath($this->contentPath));
}
private function ensureAccess($path) {
if (!$this->canAccess($path)) {
header('HTTP/1.0 403 Forbidden');
die();
}
}
private function normalize($path) {
if (!\ImageHelper::endsWith($path, '/')) {
$path .= '/';
}
return $path;
}
public function basePath() {
return $this->normalize($this->contentPath);
//return $this->normalize(realpath(dirname(__FILE__) . $this->contentPath));
}
public function getList($path) {
$this->ensureAccess($path);
header('Content-Type: application/json');
$dir = array_map(function ($scan_entry) use ($path) {
if (\ImageHelper::startsWith($scan_entry, '.')) {
return;
}
$entry = new ImageBrowserEntry();
$fullpath = realpath($path . $scan_entry);
$entry->name = $scan_entry;
$entry->type = is_dir($fullpath) ? 'd' : 'f';
$entry->size = filesize($fullpath);
if ($entry->type == 'f' && preg_match('/\\.(png|gif|jpg|jpeg)$/i', $scan_entry) == 0) {
return;
}
return $entry;
}, scandir($path));
$entries = array();
foreach ($dir as $entry) {
if ($entry) {
$entries[] = $entry;
}
}
echo json_encode($entries);
}
public function setImageHeaders($path, $type=null) {
if (!$type) {
$type = \ImageHelper::getImageType($path);
}
header("Content-type: image/" . $type);
header("Expires: Mon, 1 Jan 2099 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// get the size for content length
$size = filesize($path);
header("Content-Length: $size bytes");
if (ob_get_contents()) ob_end_clean();
//ob_clean();
flush();
}
public function getThumbnail($path) {
$this->ensureAccess($path);
$image = new Thumbnail($path);
$this->setImageHeaders($path, $image->getType());
$image->downscale();
$image->render();
}
public function getImage($path) {
$this->ensureAccess($path);
$this->setImageHeaders($path);
readfile($path);
}
public function destroy($path, $entry) {
$target = $this->normalize($path) . $entry;
$this->ensureAccess($target);
if (is_dir($target)) {
\ImageHelper::rmdir_r($target);
} else {
unlink($target);
}
}
public function create($path, $entry) {
$this->ensureAccess($path);
mkdir($path . $entry);
}
public function saveFile($file, $path) {
$path = $this->normalize($path);
$this->ensureAccess($path);
$name = basename($file['name']);
$target = $path . $name;
move_uploaded_file($file['tmp_name'], $target);
header('Content-Type: application/json');
$result = new ImageBrowserEntry();
$result->size = filesize($target);
$result->name = $name;
echo json_encode($result);
}
}
訪問瀏覽器中顯示的JSON端點是什麼? – ceejayoz
,你真的應該使用'response() - > json()' - 你的Laravel控制器通常不應該直接回顯東西。 – ceejayoz
這是一個不同的腳本。是的,我嘗試了response() - > json()。仍然返回text/html。 –