2017-08-03 236 views
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); 
    } 
} 
+0

访问浏览器中显示的JSON端点是什么? – ceejayoz

+1

,你真的应该使用'response() - > json()' - 你的Laravel控制器通常不应该直接回显东西。 – ceejayoz

+0

这是一个不同的脚本。是的,我尝试了response() - > json()。仍然返回text/html。 –

回答

0

找到自己回答。 Laravel env。是奇怪的,我改变的只是删除本地PHP对象方法,然后它的工作。

相关问题