月度归档:2016年06月

术业有专攻,列举一些专业成熟的工具和解决方案

不折腾,多年走弯路的经验告诉我,不遵守以下原则必将浪费生命和时间。
没有问题就不要折腾,遇到问题或需求再去研究并解决。
用成熟的技术,不要做技术小白鼠。
不要追求完美 ,世界本来就是不完美的,好和坏是一半一半的。任何事物都有两面性。要接受不完美。
追求简单、 实用、快速、高效。

  • 工具的选用:选择对所使用的语言支持最好的IDE(以下只针对windows平台)
    • .NET就用Visual Studio
    • Java就用JetBrains IntelliJ IDEA
    • Python就用JetBrains PyCharm
    • PHP就用JetBrains PhpStorm
    • 数据库开发用Navicat或不同数据库的专用工具(如sql server management studio 和 plsql developer)
    • 编辑器可以选用Notepad++或sublime
  • Web开发:
    • 没有要求,就用PHP,专为Web而生
      • 给客户做网站,如果不需要维护,可以不用框架
      • 需要长期维护的必须用框架,可以选择的框架有CodeIgniter3或现代化的框架YII2。
      • Laravel虽然流行,但比较吃资源,性能有点弱,真正做项目时要好好考量。
      • IDE用PHPStrom
      • 数据库层用PDO
      • 自己搭建环境用nginx+php-fpm+php7+pgsql
    • 如果需要.net
      • 自己一个人开发就用 asp.net webform简单粗暴效率高
      • 团队开发用asp.net mvc,方便分工合作
      • 跨平台用mono来支持。Linux上服务器用Jexus。
      • asp.net core刚出来,先不用,过几年再说。
    • 如果需要JAVA,就用JFinal,国人开发,据说还不错,我没实践。
  • 前端框架
    • 考虑兼容性就用pintuer或bootstrap2,兼容性最好,兼容IE8。不考虑兼容性就用bootstrap3或bootstrap4
    • 弹层用国产layer http://layer.layui.com/
    • js框架用jquery
  • 数据库
    • 给客户做可以用mysql或者mssql,通用性更好。mysql在linux下直接用apt-get安装,省事。不要自己编译,不要没事找事。
    • 没要求或自己用也可以用pgsql(pgsql管理工具使用Navicat for PostgreSQL)。pgsql省内存,性能好,稳定,功能强大——实践出来的。
  • 做底层的C/C++
  • 做windows程序的.NET
  • 做安卓开发的Java
  • 做苹果应用的oc和swift
  • 做跨平台桌面程序的Qt
  • 做服务器的Linux
  • 做桌面系统Windows或MAC
  • 服务器后台服务程序可以用C/C++和Java以及Python
  • 做博客的WordPress或Typecho(这货稍微有点折腾)
  • 做笔记的evernote或为知笔记
  • 主机能备案最好选择国内,否则就用香港阿里云或日本conaha,PHP虚拟空间用香港londit,asp.net虚拟空间用webweb香港云。

在codeigniter中使用blade模板引擎

使用compoer引入blade库

composer require "philo/laravel-blade": "3.*"

在helpers目录下创建 view_helper.php

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
require_once 'vendor/autoload.php';

use Philo\Blade\Blade;

if (!function_exists('view')) {
    function view($name = NULL, $data = [], $mergeData = [])
    {
        $CI = &get_instance();
        if (!isset($CI->blade)) {
            $views = __DIR__ . '/../views';
            $cache = __DIR__ . '/../cache';
            $CI->blade = new Blade($views, $cache);
            $elapsed_time = $CI->benchmark->elapsed_time('total_execution_time_start', 'total_execution_time_end');
            $CI->blade->view()->share('elapsed_time', $elapsed_time);
        }
        echo $CI->blade->view()->make($name, $data, $mergeData)->render();
    }
}

在config/autoload.php中,引入 

$autoload['helper'] = array('view', 'url');

controller中:

<?php defined('BASEPATH') or exit('No direct script access allowed');
class Welcome extends CI_Controller
{
    public function index()
    {
        return view('index', ['name' => 'haha']);
    }
    public function test()
    {
        echo 'this is a test';
    }
}

还是喜欢codeigniter的简洁和可扩展性,用来做中小项目还是很爽的。

Laravel无法加载.env的问题

在万网虚拟主机上,发现laravel无法加载.env中配置的信息,然后一路跟踪发现,问题出在PHPDotEnv这个库上
在Loader.php里有一个函数如下:

public function setEnvironmentVariable($name, $value = null)
{
    list($name, $value) = $this->normaliseEnvironmentVariable($name, $value);

    // Don't overwrite existing environment variables if we're immutable
    // Ruby's dotenv does this with `ENV[key] ||= value`.
    if ($this->immutable && $this->getEnvironmentVariable($name) !== null) {
        return;
    }

    putenv("$name=$value");

    $_ENV[$name] = $value;
    $_SERVER[$name] = $value;
}

里面使用了putenv函数,把.env里面的配置放到了系统环境变量里面。通过var_dump查看返回值发现都是NULL, 可以猜测万网虚拟主机应该是禁用了putenv这个函数。

解决办法就是放弃使用.env文件,把里面的一些配置信息放到config/app.php里面去。