Coder Social home page Coder Social logo

zblogcn / zblogphp Goto Github PK

View Code? Open in Web Editor NEW
797.0 48.0 250.0 54.55 MB

Z-BlogPHP博客程序

Home Page: https://www.zblogcn.com

License: MIT License

JavaScript 8.60% PHP 49.51% CSS 9.70% HTML 25.96% Hack 4.64% Less 1.58% Batchfile 0.01%
z-blog php mysql blog sqlite cms postgresql pgsql zblog

zblogphp's Introduction

Z-BlogPHP

Z-BlogPHP 是由 Z-Blog 社区提供的博客程序,一直致力于给国内用户提供优秀的博客写作体验。从 2005 年起发布第一版,至今已有 18 年的历史,是目前国内为数不多的持续提供更新的开源 CMS 系统之一。

我们的目标是使用户沉浸于写作、记录生活,不需要关注繁琐的设置等,让用户专注于创作。对于用户而言,它简单易用,体积小,速度快,支持数据量大。对开发者而言,它又有着强大的可定制性、丰富的插件接口和精美的主题模板。

我们一直在努力把 Z-BlogPHP 打造成高可玩性、乐高积木式的网站程序!

期待 Z-BlogPHP 能成为您写博、建站的上佳选择。

安全漏洞说明 / Security Vulnerabilities

For security vulnerabilities, please contact us via contact#rainbowsoft.org and do not post on GitHub Issue.

提交安全漏洞,请直接联系我们:contact#rainbowsoft.org。您也可以通过先知安全服务平台360 补天国家信息安全漏洞共享平台等平台向我们提交。请不要在 GitHub Issue 等公开领域发布和漏洞有关的信息,更不要百度翻译成英文后向我们提交,我们看得懂汉字。

致某些安全初学者:在管理员权限下,通过后台主题管理/插件管理上传 PHP 文件不是漏洞!自从 2017 年起,CNVD 已经给我们报了至少五次相关“漏洞”(如 CNVD-2019-12772、CNVD-2019-43601)。请不要用这种东西浪费我们和 CNVD 的时间,同时通过刷低水平“漏洞”骗到的 CNVD 编号对你的简历没有任何帮助。

社区说明

  1. 使用交流及开发建议,请转向Z-Blog 论坛
  2. 开发文档,参看文档
  3. 提交功能 BUG,请在论坛内,或直接在 GitHub Issue 内提交;
  4. 欢迎 Pull Request,如果你喜欢,请为我们点一个 Star :)

免责申明

链接

运行环境

  • Windows / Linux / macOS and so on...
  • IIS / Apache / nginx / Lighttpd / Kangle / Tengine / Caddy and so on...
  • PHP 5.2 - 8.2
  • MySQL 5+ / MariaDB 10+ / SQLite 3 / PostgreSQL

安装说明

首先请确保网站目录拥有 755 权限。若要使用 GitHub 内的开发版本,请先下载稳定版并安装,然后再用 GitHub 内的文件进行覆盖,方可使用。

  1. 上传 Z-BlogPHP 程序到网站目录
  2. 打开 http://你的网站/ ,进入安装界面
  3. 建立数据库
    • 选择 MySQL 数据库,请输入空间商为您提供的 MySQL 帐号密码等信息
    • 选择 SQLite,请确保服务器支持 SQLite,安装程序将在点击下一步后自动创建 SQLite 数据库文件
    • 选择 Postgresql 数据库,请 Postgresql 相关的主机名数据库名帐号密码等信息
  4. 填写你为站点设置的管理员账号密码,务必使用强口令账号
  5. 点击下一步,安装成功,进入网站

安装完成后请删除 zb_install 文件夹。对于 GitHub 上的开发版本,请删除 standardstestsutils 等文件夹。

代码标准及说明

代码标准

开源协议

Z-BlogPHP 项目,基于 The MIT License 协议开放源代码。

zblogphp's People

Contributors

birdol avatar chrishyze avatar github-actions[bot] avatar imlgmcom avatar involvements avatar jeeinn avatar ljeonhack avatar movni avatar ossso avatar rainbowsoft avatar wdssmq avatar zblogcn-bot avatar zhaowe1 avatar zhouzishu avatar zsxsoft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zblogphp's Issues

伪静态的bug?

分类的链接规则设置为
{%host%}{%alias%}/{%page%}/
对应的iis6 下的伪静态规则是
RewriteRule /(?:[^./_])/(?!zb_)([^/]+)/(?.)? /index.php?alias=$1&rewrite=1 [I,L]

这前面的正则把css给匹配了... 导致css失效...

安装时务数据库安装失败

安装时候如果不存在数据库会自动创建数据库,以及ZBP默认表,
但是不会创建默认数据,比如文章、用户等

网站标题中的单引号未转义

BUG:如果网站标题为:天下我管'S Blog

并且把 标题引入到页面js脚本。会导致js执行错误。

另外类似这种,config里有大量未转义的符号。不仅仅是单引号了.... 需要转义哪些领导懂的...
会导致phpmyadmin导出的sql文件无法再次导入到新网站上去。

增加mail类支持

现在的情况是每个需要邮件的插件都自己加一个smtp ,php mailer之类的东西... 多了有点烦... 程序内置一个给大家用吧... 顺路找回密码什么的也做了。

API

遵循RESTful API规范。
编写以测试驱动,需要单元测试和集成测试。
需要测试数据。

错误的接口挂接函数导致提交base类型之后,meta被清空

举个例子:
有个函数fun挂在了分类提交success的接口上,fun的功能是向一个不存在的主机post参数,也就是会post失败或者超时等。

提交分类编辑的内容后,这时候如果在success借口之前die掉,这个分类的meta还可以正常保存,如果去掉die,继续运行,整个meta被清空了。

假如全站使用ssl应用中心会因为浏览器安全措施无法加载js/css

/zb_users/plugin/AppCentre/include.php
直接贴

<?php
#注册插件
RegisterPlugin("AppCentre","ActivePlugin_AppCentre");
//检测ssl
$ssl = 'http';
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") {
    $ssl = 'https';
}
define('APPCENTRE_URL',$ssl.'://app.zblogcn.com/client/');
define('APPCENTRE_SYSTEM_UPDATE',$ssl.'://update.zblogcn.com/zblogphp/');

define('APPCENTRE_API_URL',$ssl.'://app.zblogcn.com/api/index.php?api=');
define('APPCENTRE_API_APP_ISBUY','isbuy');
define('APPCENTRE_API_USER_INFO','userinfo');
define('APPCENTRE_API_ORDER_LIST','orderlist');
define('APPCENTRE_API_ORDER_DETAIL','orderdetail');


function ActivePlugin_AppCentre() {
    global $zbp;
    Add_Filter_Plugin('Filter_Plugin_Admin_LeftMenu','AppCentre_AddMenu');
    Add_Filter_Plugin('Filter_Plugin_Admin_ThemeMng_SubMenu','AppCentre_AddThemeMenu');
    Add_Filter_Plugin('Filter_Plugin_Admin_PluginMng_SubMenu','AppCentre_AddPluginMenu');
    Add_Filter_Plugin('Filter_Plugin_Admin_SiteInfo_SubMenu','AppCentre_AddSiteInfoMenu');

    if(method_exists('ZBlogPHP','LoadLanguage')){
        $zbp->LoadLanguage('plugin','AppCentre');
    }else{
        if(is_readable($f=$zbp->path . 'zb_users/plugin/AppCentre/language/' . $zbp->option['ZC_BLOG_LANGUAGEPACK'] . '.php'))
            $zbp->lang['AppCentre'] = require($f);
        elseif(is_readable($f=$zbp->path . 'zb_users/plugin/AppCentre/language/' . 'zh-cn' . '.php'))
            $zbp->lang['AppCentre'] = require($f);
    }
}

function InstallPlugin_AppCentre(){
    global $zbp;
    $zbp->Config('AppCentre')->enabledcheck=1;
    $zbp->Config('AppCentre')->checkbeta=0;
    $zbp->Config('AppCentre')->enabledevelop=0;
    $zbp->Config('AppCentre')->enablegzipapp=0;
    $zbp->SaveConfig('AppCentre');
}


function AppCentre_AddMenu(&$m){
    global $zbp;
    $m['nav_AppCentre']=MakeLeftMenu("root",$zbp->lang['AppCentre']['name'],$zbp->host . "zb_users/plugin/AppCentre/main.php","nav_AppCentre","aAppCentre",$zbp->host . "zb_users/plugin/AppCentre/images/Cube1.png");
}

function AppCentre_AddSiteInfoMenu(){
    global $zbp;
    if($zbp->Config('AppCentre')->enabledcheck){
        $last=(int)$zbp->Config('AppCentre')->lastchecktime;
        if( (time()-$last) > 11*60*60 ){
            echo "<script type='text/javascript'>$(document).ready(function(){  $.getScript('{$zbp->host}zb_users/plugin/AppCentre/main.php?method=checksilent&rnd='); });</script>";
            $zbp->Config('AppCentre')->lastchecktime=time();
            $zbp->SaveConfig('AppCentre');
        }
    }
    if($zbp->version>=150101 && (int)$zbp->option['ZC_LAST_VERSION']<150101)
        echo "<script type='text/javascript'>$('.main').prepend('<div class=\"hint\"><p class=\"hint hint_tips\"><a href=\"{$zbp->host}zb_users/plugin/AppCentre/update.php?updatedb\">请点击该链接升级数据库结构</a></p></div>');</script>";
}

function AppCentre_AddThemeMenu(){
    global $zbp;
    echo "<script type='text/javascript'>var app_enabledevelop=".(int)$zbp->Config('AppCentre')->enabledevelop.";</script>";
    echo "<script type='text/javascript'>var app_username='".$zbp->Config('AppCentre')->username."';</script>";
    echo "<script src='{$zbp->host}zb_users/plugin/AppCentre/theme.js' type='text/javascript'></script>";
}

function AppCentre_AddPluginMenu(){
    global $zbp;
    echo "<script type='text/javascript'>var app_enabledevelop=".(int)$zbp->Config('AppCentre')->enabledevelop.";</script>";
    echo "<script type='text/javascript'>var app_username='".$zbp->Config('AppCentre')->username."';</script>";
    echo "<script src='{$zbp->host}zb_users/plugin/AppCentre/plugin.js' type='text/javascript'></script>";
}


//$appid是App在应用中心的发布后的文章ID数字号,非App的ID名称。
function AppCentre_App_Check_ISBUY($appid){
    global $zbp;
    $postdate = array(
        'email'=>$zbp->Config('AppCentre')->shop_username,
        'password'=>$zbp->Config('AppCentre')->shop_password,
        'appid'=>$appid,
        );
    $http_post = Network::Create();
    $http_post->open('POST',APPCENTRE_API_URL.APPCENTRE_API_APP_ISBUY);
    $http_post->setRequestHeader('Referer',substr($zbp->host,0,-1) . $zbp->currenturl);

    $http_post->send($postdate);
    $result = json_decode($http_post->responseText,true);
    return $result;
}

ViewComment缺少接口

event

ViewComment这个函数,是不是也要过一下接口:Filter_Plugin_ViewComments_Template之类的比较好一些?

或者其他的什么办法能干扰一下提交评论后的ajax输出呢?
我在尝试UBB,http://www.birdol.com/article/890.html

现在的情况是,刷新后一切正常,但是直接提交就直接显示UBB代码了。

PHP模板解析错误

js代码:

if(margin != undefined){ $li.css("margin-right", margin+'px');}

会被解析成PHP语言

if(margin != undefined) css("margin-right", margin+'px');; ?>

四字节Unicode编码问题

比如字符【𥊍】

MySQL无法存储\u0000-\uFFFF以上的字符,解决这个问题需要MySQL 5.6+, 表结构内字符整理改为utf8mb4_general_ci

兼容方案待定

ViewList函数完善

    case 'category':

        if (strpos($zbp->option['ZC_CATEGORY_REGEX'], '{%id%}') !== false) {
            $category = $zbp->GetCategoryByID($cate);
        }
        if (strpos($zbp->option['ZC_CATEGORY_REGEX'], '{%alias%}') !== false) {
            $category = $zbp->GetCategoryByAliasOrName($cate);
        }

改成在分类地址当中,使用了{$alias}时,只要GetCategoryByAliasOrID,不要用Name。

管理员可以互相删除

Howl插件无法细化权限分配。希望能够保护管理员帐号。不允许互相删除。系统应该保护id=1的用户,不被删除。

GetGuestAgent函数优化

function GetGuestAgent() {
return $_SERVER["HTTP_USER_AGENT"];
}

先isset判断再return,有时候会因为这个报错...别问我怎么发现的-_-

应用中心的两个问题

1、收费应用在线更新,提示联系作者,这和作者一毛钱关系没有啊,验证是在应用中心完成的,插件也是存在应用中心的。
2、“我的应用仓库” 这个地方,“安装应用”字样,改成“安装/更新应用”,很多人以为这里存的是老版本,还有的人以为这里安装会覆盖插件设置。

错误提示友好化建议

1、zbp->showerror的页面就不要给普通用户看了,很多人因为这个页面太丑,去吧error.html给改了,反而输出调试信息无法输出。普通用户给个alert信息,哪怕不准确,写个未知错误都行,真的,足够了。

2、安装插件或者主题的时候,如果是依赖插件,提示依赖ID,最好带上插件链接,这样就方便安装。如果是冲突插件,提示插件名字,最好带上禁用按钮,点一下就禁用了,很方便。

求增加ParseOrder功能...

把sql里增加一个ParseOrder吧.... 加入类似order by obj->Metas->XX 这种.... 反正也有ParseWhere了不是么....

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.