【发布时间】:2015-09-10 05:01:02
【问题描述】:
我一直在使用托管在 Google App Engine 平台上的 PHP Codeigniter 框架。
据我们所知,出于安全原因,Google 不允许像一般平台一样上传图片。所以我使用 Google Cloud Storage 上传图片,并通过在 Codeigniter 中创建一个独立的库成功实现了它。
我遇到的问题是如何在 foreach 或 for 循环中为它们提供服务。如果我调用图像一次而不是显示在网页上,但是如果我尝试在循环中实现该代码,它会在循环计数器进入秒计数时停止。下面是我创建并循环调用的库和 Helper 函数。
图书馆:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
use google\appengine\api\cloud_storage\CloudStorageTools;
class Display {
var $config = Array();
var $image_url = '';
var $folder = '';
var $image = '';
var $size = 400;
var $crop = true;
public function __construct(){
$bucket = CloudStorageTools::getDefaultGoogleStorageBucketName();
$this->image_url = 'gs://' . $bucket . '/uploads/';
}
public function image_url(){
$path = $this->image_url.$this->folder.'/';
$this->image_url = ( !empty($this->image) && is_file( $path . $this->image)) ?$path .$this->image:'noimage_thb.png' ;
$image_url = @CloudStorageTools::getImageServingUrl($this->image_url);
/*printArray($this->image_url,1);*/
if($image_url == ''){
$image_url = '';
}
return $image_url;
}
}
?>
辅助功能:
if (!function_exists('image_url')) {
function image_url($folderName,$image, $size, $crop = false)
{
$CI =& get_instance();
// we first load the upload library
$CI->load->library('display');
$CI->display->folder = $folderName;
$CI->display->image = $image;
$CI->display->size = $size;
$CI->display->crop = $crop;
$url = $CI->display->image_url();
return $url;
}
}
查看文件代码(循环):
<div class="fotorama" data-allowfullscreen="true" data-nav="thumbs">
<?php
$images = explode(",", $dbdata['beach_photo']);
for ($img_no = 0; $img_no < count($images); $img_no++) {
$imageUrl = image_url('venue', $images[$img_no], '400');
?>
<img src="<?php echo $imageUrl; ?>" class="img-responsive"/>
<?php } ?>
</div>
如果有人遇到同样的问题,请留下您的答案。
【问题讨论】:
-
任何错误或有任何输出??
-
@Abdulla 是的,我在控制台中收到错误,但在页面上没有。我收到“NetworkError:500 Internal Server Error - http://*******.appspot.com/venue/venueDetailes/elements-mall-jaipur”当文件不存在但我交叉检查文件时出现当我打印 $images 数组的 secong 键元素时也会显示。
-
问题在于您的 URL 或您传递的数据
-
@Abdulla 我认为这不是因为我个人执行了为 $image 数组中初始化的图像生成的每个 url。 $images = explode(",", $dbdata['beach_photo']);在这个变量中,我得到 0 到 2 的数组索引值,并且我对所有三个元素都执行了。如果我执行单个调用,它不会给出任何错误,但是每当我进行多个调用时,它会在控制台中给出错误,并且 PHP 脚本会停止并且不执行剩余的脚本。希望这是有道理的。
标签: php image codeigniter google-app-engine google-cloud-storage