0%

在Github创建的PHP项目,通常是通过composer进行依赖资源包的管理,然后有些时候自己在git上的项目,别人使用composer下载的时候,报出项目找不到的问题,这个时候,就需要在Github和Packagist之间建立一个联动关系。

实践案例

楼主个人在Github上的项目yii2-library,便是通过composer进行管理,composer.json的相关配置如下:

{
  "name": "liumapp/yii2-library",
  "description": "common library for yii2",
  "version":"v1.0.0",
  "type": "library",
  "license": "MIT",
  "authors": [
    {
      "name": "liumapp",
  "email": "liumapp.com@gmail.com",
  "homepage": "http://www.liumapp.com",
  "role": "Creator"
  }
  ],
  "require": {
    "php": ">=5.4.0",
  "yiisoft/yii2": "2.0.10",
  "yiisoft/yii2-bootstrap": "2.0.6",
  "bower-asset/pace": "^1.0",
  "bower-asset/fontawesome": "4.7",
  "bower-asset/bootstrap3-wysihtml5-bower":"*",
  "bower-asset/bootstrap-datepicker":"v1.6.4",
  "bower-asset/eonasdan-bootstrap-datetimepicker":"v4.14.30",
  "bower-asset/select2":"4.0.3",
  "bower-asset/ztree_v3":"v3.5.26",
  "bower-asset/echarts":"3.3.2"
  },
  "autoload": {
    "psr-4": {
      "liumapp\\library\\": ""
  }
  }
}

然后我们在本地新建一个项目,添加对liumapp/yii2-library的依赖,相关代码如下:

"require": {
  "liumapp/yii2-library":"dev-master"
},

然后我们执行

composer install

不出意外,命令行会给出以下错误信息:

The requested package liumapp/yii2-library could not be found in any version, there may be a typo in the package name.
阅读全文 »

最近项目上涉及到一个将html转化为pdf的需求,这里选择了wkhtmltopdf来实现,可是在具体实施过程中,发现这里面还涉及到一个“linux服务器上默认没有中文字体,导致wkhtmltopdf渲染的pdf文件不能显示中文的问题”,所以写一篇博客,帮助还有同样需求的小伙伴们快速解决问题。

安装wkhtmltopdf

为方便,以下代码都是作为root用户在Centos命令行下操作:

cd ~

wget http://download.gna.org/wkhtmltopdf/0.12/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz

xz -d wkhtmltox-0.12.3_linux-generic-amd64.tar.xz

tar -xvf wkhtmltox-0.12.3_linux-generic-amd64.tar

cd wkhtmltox

cd bin

//测试

./wkhtmltopdf "http://www.taobao.com" 1.pdf 

如果打开的1.pdf成功渲染出来,那说明wkhtmltopdf安装成功,不过在这里,一般能够看到1.pdf里面的中文字体并没有被成功渲染出来,那么接下来说明字体问题的解决。

服务器安装中文字体

正式开工之前要准备的工具

1.fontconfig

yum install fontconfig

成功后会有这样的消息出来:

阅读全文 »

yii2自带的urlManage可以很方便的提供url美化,但是其默认配置的却是Apache环境下的,对于nginx,还需要我们额外的修改nginx.conf配置。

yii2配置

直接上代码

‘components’ => [

'urlManager' => [
  'enablePrettyUrl' => true,//开启URL美化
  'showScriptName' => false,//禁用index.php文件
],

]

上述代码是在yii的配置文件中设置的,很简单的几行即可开启yii的url美化。

配置nginx

重点在这里

server {
      listen       8081;
      server_name  localhost;

      #charset koi8-r;

      #access_log  logs/host.access.log  main;
      location / {
         add_header 'Access-Control-Allow-Origin' '*';
         add_header 'Access-Control-Allow-Credentials' 'true';
         add_header 'Access-Control-Allow-Methods' 'GET';
          root   /usr/local/var/www/fangxin/frontend/web/;
          index  index.html index.htm index.php;
          if (!-e $request_filename) {
              rewrite  ^(.*)$  /index.php?s=$1  last;
              break;
          }

      }

      location ~ \.php$ {
          add_header 'Access-Control-Allow-Origin' '*';
          add_header 'Access-Control-Allow-Methods' 'GET';
          add_header 'Access-Control-Allow-Methods' 'GET';

          fastcgi_buffer_size 128k;
          fastcgi_buffers 32 32k;

          root           /usr/local/var/www/fangxin/frontend/web/;
          fastcgi_pass   127.0.0.1:9000;
          fastcgi_index  index.php;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
          include        fastcgi_params;
          if (!-e $request_filename) {
              rewrite ^(.*)$ /index.php?r=$1 last;
              break;
          }
      }

  }
阅读全文 »

Directory

这是笔者自造的一个车轮,可用于方便的解决PHP创建/删除目录,创建/删除文件,及对应权限的问题。

使用方法

1
2
3
4
5
6
7
8
9
$lmD = new Directory();
$lmD->setBasePath('/usr/local/var/www/');
$lmD->buildPath('img/a' , 0755);
$lmD->buildPath('img/b' , 0755);
$lmD->buildPath('img/c' , 0755);
$lmD->buildFile('img/a/a.txt' , 0755);
$lmD->buildFile('img/b/b.txt' , 0755);
$lmD->buildFile('img/c/c.txt' , 0755);
$lmD->removeDirs('img/' , ['a']);//img目录下除了a以外其他全部删除掉

上述代码执行后会产生一个/usr/local/var/www/img/a/a.txt文件,b.txt和c.txt存在过,但之后被删除了。

阅读全文 »

FlintStone

Flintstone是一款key-value键值对类型的基于文件的database,实际应用场景比较适合于搭建PHP缓存机制。


下载安装

利用 composer:

在composer.json文件中使用以下代码

"require": {
  "fire015/flintstone":"v1.9.0"
},

执行composer require fire015/flintstone命令

如何使用

写入操作的示范代码如下:

阅读全文 »

composer.json文件下的autoload属性有一项psr-4的键值对,这个psr-4的value直接关系到类自动加载的成果与否

问题情景


Git上新建一个项目,名为pay。

pay项目的意义是为后续项目提供支付宝、微信、银行卡等方式的支付功能,那么,自然有必要进行模块化的开发和部署,这里采用了composer进行管理。

Git上新建第二个项目,名为project。

project项目同样采用了composer进行管理,只是现在需要集成pay项目。

pay项目的composer.json


{
  "name": "",
  "type": "",
  "description": "",
  "minimum-stability": "",
  "keywords": ["alipay", "weixin", "支付宝支付", "微信支付", "集成支付接口SDK"],
  "license": "",
  "authors": [
    {
      "name": "",
      "email": "",
      "homepage": "",
      "role": ""
  }
  ],
  "require": {
    "php": ">=5.4.0"
  },
  "autoload": {
    "psr-4": {
      "huluwa\\huluwa-pa\\": ""//请注意这一行
  }
  }
}
阅读全文 »

换肤效果

昨天学一了个网页换肤的效果:点击换肤,会出来相应图片供选择,替换背景。最后的效果达到了,再来回顾一下制作过程中自己觉得下次需要重视和仍旧搞不清的点。

58cdfc7c09f1e.jpg

给“换肤”使用span标签,然后class=”click”,“pic”的盒子里装着供选择替换的小图片。点击“换肤”,”pic”滑下;点击文档,“pic”滑上。但是,要阻止冒泡事件。同时,”pic”也包含在文档里,所以,也要阻止冒泡事件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

$(".click").click(function(e){

$(".pic").slideDown();

e.stopPropagation();//阻止冒泡;

})

$(document).click(function(){

$(".pic").slideUp();

})

$(".pic").click(function(e){

e.stopPropagation();//因为PIC包含在document里面;

})

滑上滑下的问题解决之后,接下来就是图片的替换啦!

找到“pic”下面的li,点击执行啥啥啥————

ul li").click(function(){
1
2
3
4
5
6
7
8

$(this).addClass("first").siblings().removeClass("first");

var imasrc = $(this).attr("datesrc");//返回匹配元素的值

$("body").css("background-image","url('./images/"+imasrc+"')")

})

自定义属性的形式为:“data-*”。

所以上面要写的代码就是:点击li里的当前图片,其class属性会返回给所有同胞元素并去除。

阅读全文 »

这是一个关于css优先级的问题,此篇文章纯原创,翻版必究。

示例代码

<style>
  .background {
    background-color:red ! important;
  }

  .white {
    background-color:white;
  }

</style>
<body>
  <div class="background white">
    aaa
  </div>
</body>

毫无疑问,我们的div的背景色会是红色,因为!important属性会将red的优先级放在white之上,但如果我们对代码进行如下修改:

<style>
  .background {
    background-color:red ! important;
  }

  body .white {
    background-color:white;
  }

</style>
<body>
  <div class="background white">
    aaa
  </div>
</body>

那么在火狐浏览器下,我们div的背景色将一半为红,一半为白。
因为body .white的写法,让white的描述更加具体,而css优先级的判断算法里面,对于描述更具体的,优先级更高,所以!important并不会百分百important

阅读全文 »

在ajax请求中,如果服务器端的响应是302 Found,那么ajax的complete()与error()回调函数中得到的状态码都是404,而不是302。
原文链接

新的解决办法


目前309并没有被http协议规定用处,那么我们在后台脚本接受到ajax的请求后,在需要返回302响应的情况下,改为返回309,即可进行正常的处理。

阅读全文 »

当你百度“如何让Div居于页面底部”,相信很多人给你的答案都是:

position:fixed;bottom:0

或者

body{
 position:relative
}
.footer{
position:absolute;bottom:0
}

然而这种代码导致的结果是,当一个页面高度超出屏幕高度时,底部永远显示在用户界面的下方,但我们想要的结果往往是当用户下拉到页面底部时,才显示footer的Div。
所以lm在这里想要给大家介绍一下,我们公司经常使用的header,container,footer页面布局方式

页面结构


首先给一张样图:
很简单的header,container和footer结构。

f0cff5b060814dadb72c5c7fafba32f4-upload.jpg

页面特点

阅读全文 »