需要修改才能使用的原因与前一篇文章的描述相同,还是因为我们在 SAE 的代码空间中没有写权限。
言归正传,需要修改的两个文件及其路径:

  • include/conn.inc.php
  • data/httpfile/upload.class.php

如果您不是全新安装,则需要用 phpMyAdmin 导出数据库结构和数据为.sql格式并导入您在 SAE 相应应用的 MySQL 数据库。
如果导入出错,将.sql语句中的 “LOCK TABLES 表名 WRITE;” 和 “UNLOCK TABLES;” 全部注释掉即可导入成功,数量较多可以使用全文替换。

然后,您可以先修改再上传,也可以先上传再修改,下面是修改后的代码,注意如果以下代码出错,请在文章末尾下载完整附件。

修改后的 conn.inc.php 可以实现正常连接 MySQL 数据库,当然您得先初始化才行,代码如下:

if(!defined('IN_PHPMYWIND')) exit('Request Error!');
/*
**************************
(C)2010-2013 phpMyWind.com
update: 2012-2-14 17:19:08
**************************
*/
//数据库服务器
$db_host = SAE_MYSQL_HOST_M.":".SAE_MYSQL_PORT;
//数据库用户名
$db_user = SAE_MYSQL_USER;
//数据库密码
$db_pwd = SAE_MYSQL_PASS;
//数据库名
$db_name = SAE_MYSQL_DB;
//数据表前缀
$db_tablepre = 'pmw_';
//数据表编码
$db_charset = 'utf-8';

修改后的 upload.class.php 可以解决文件上传的问题,上传的文件将保存在您的 Storage 空间里。
注意需要将两处 "您的 Storage Domain" 替换为您设置的值,代码如下:

if(!defined('IN_PHPMYWIND')) exit('Request Error!');
/*
**************************
(C)2010-2013 phpMyWind.com
update: 2011-4-21 14:52:54
person: Feng
**************************
*/
//不限制响应时间
@set_time_limit(0);
//引入水印文件
require(PHPMYWIND_DATA.'/watermark/watermark.class.php');
/*
* 上传函数
*
* @access    public
* @upfile    string  上传表单name
* @iswatermark  string  是否添加水印
*/
function UploadFile($upfile, $iswatermark='')
{
  global $dosql;
  global $cfg_max_file_size;
  global $cfg_image_dir, $cfg_soft_dir, $cfg_media_dir;
  global $cfg_upload_img_type, $cfg_upload_soft_type, $cfg_upload_media_type;
  global $cfg_markswitch, $cfg_markpicurl, $cfg_markminwidth, $cfg_markminheight, $cfg_markwhere, $cfg_marktext, $cfg_marksize, $cfg_markcolor, $cfg_marktype;
  //检测是否存在
  $tempfile_tn = isset($_FILES[$upfile]['tmp_name']) ? $_FILES[$upfile]['tmp_name'] : '';
  if($tempfile_tn=='' or !is_uploaded_file($tempfile_tn))
  {
    //return '请选择要上传的文件!';
    return '请选择上传文件或您上传的文件超过php.ini设定最大文件上传限制['.ini_get('upload_max_filesize').']!';
  }
  //获取上传文件信息
  $tempfile  = $_FILES[$upfile];
  $tempfile_name = $tempfile['name'];
  $tempfile_size = $tempfile['size'];
  $tempfile_ext  = strtolower(substr(strrchr($tempfile_name, '.'), 1));
  //强制限定的某些文件类型禁止上传
  if(in_array($tempfile_ext, explode('|', 'php|pl|cgi|asp|aspx|jsp|php3|shtm|shtml')))
  {
    return '您上传的文件类型为:['.$tempfile_ext.'],该类文件不允许通过后台上传!';
  }
  //检查文件类型,上传文件目录
  if(in_array($tempfile_ext, explode('|', strtolower($cfg_upload_img_type))))
  {
    $upload_url = 'image';
    //$upload_dir = $cfg_image_dir;
    $upload_dir = 'image';
  }
  else if(in_array($tempfile_ext, explode('|', strtolower($cfg_upload_soft_type))))
  {
    $upload_url = 'soft';
    //$upload_dir = $cfg_soft_dir;
    $upload_dir = 'soft';
  }
  else if(in_array($tempfile_ext, explode('|', strtolower($cfg_upload_media_type))))
  {
    $upload_url = 'media';
    //$upload_dir = $cfg_media_dir;
    $upload_dir = 'media';
  }
  else
  {
    return '您上传的文件类型为:['.$tempfile_ext.'],该文件类型不允许上传!';
  }
  $save_type = $upload_url;
  //检查文件大小
  if($tempfile_size > $cfg_max_file_size)
  {
    return '您上传的文件超过系统设定最大文件上传限制['.GetRealSize($cfg_max_file_size).']!';
  }
  //创建文件夹
  $ymd = date('Ymd');
  $upload_url .= '/'.$ymd;
  $upload_dir .= '/'.$ymd;
  //上传文件名称
  $filename = time()+rand(1,9999).'.'.$tempfile_ext;
  //上传文件路径
  $save_url = 'uploads/'.$upload_url.'/'.$filename;
  $save_dir = $upload_dir.'/'.$filename;
  $s = new SaeStorage();
  //移动临时文件到指定目录
  $result = $s->upload("您的 Storage Domain" ,$save_dir ,$tempfile_tn);  if($result)
  {
    //添加数据库记录
    $dosql->ExecNoneQuery("INSERT INTO `#@__uploads` (name, path, size, type, posttime) VALUES ('$filename', '".$s->getUrl("luopeita",$save_dir)."', '$tempfile_size', '$save_type', '".time()."')");
    //上传成功,返回数组
    return array($filename, $tempfile_size, $s->getUrl("您的 Storage Domain",$save_dir), $save_dir);
  }
  else
  {
    return '发生未知错误,上传失败!';
  }
}

点击下载修改后的文件:PHPMyWind.zip
本文代码修改自 SAEBBS-duyueping:http://cloudbbs.org/forum.php?mod=viewthread&tid=25243

版权属于:香菇
本文链接:https://blog.siitake.cn/phpmywind-sae.html
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!