nginx配置后只有根目录首页index.php能访问,其他页面404

只有首页面根目录可以访问,其他页面地址都是404 not found。网上有很多介绍用url重定向,url重写都试了无效,要不就是重定向过多。其实解决方法很简单:

以phpstudy2016环境组合包为例:

1、打开vhosts.conf;

2、找到对应的域名;

  listen       80;
        server_name  www.xuduowei.com xuduowei.com;
        root   "E:/phpStudy/WWW/xuduowei/public";
        location / {
            #index  index.html index.htm index.php;
            #autoindex  on;
              try_files $uri $uri/ /index.php?$query_string;
                if (!-e $request_filename){  
                   rewrite ^/(.*) /index.php last;  
               }
        }

注意实际增加:

   try_files $uri $uri/ /index.php?$query_string;
                if (!-e $request_filename){  
                   rewrite ^/(.*) /index.php last;  
               }

注意:若是nginx服务器,直接增加如下配置:

    location / {
        if (!-e $request_filename) {
            rewrite  ^(.*)$  /index.php?s=/$1  last;
            break;
        }
    }

提示:若你的vps是虚拟机,要找准虚拟机下对应的配置项!

徐老师项目亲测有效!想学习php开发的,可以联系我。微信:weilanweb 或者15309695130

要注册ICP许可证是不是得先注册公司?

如果你想做B2C式的网站,可以先注册个10W左右的网络公司,然后办理个非经营ICP备案许可,可以先运行,运行起来后再办理经营性ICP备案许可。

另外,导航类网站只需要办理非经营性ICP许可就可以开办。

ICP备案的经营性和非经营性在备案号上就有显示,其实最简单的就是看他除了ICP备案号外还有没有一个叫“增值电信业务许可证”的东西。

如果还是不明白,可以通过HI联系。徐多蔚 15309695130  微信号:weilanweb

mysql表数据发生变化时,主动通知业务系统(mysql-udf-http)

近期接到一个任务,在商家的商品信息发生改变后,要及时通知商家的业务系统,并将变更后的数据同步过去。
第一时间想法是,在主系统的商家编辑模块插入对应代码,当商品编辑后,发送商品id至MQ中,子系统消息订阅,并进行相应处理,感觉不错,但是在主系统进行扩展,系统代码会越来越臃肿。
有没有更好的解决方案,比如让mysql主动通知业务系统,数据发生变化了?于是找到了mysql-udf-http。

mysql-udf-http 是一款简单的MySQL用户自定义函数,具有http_get()、http_post()、http_put()、http_delete()四个函数,可以在MySQL数据库中利用HTTP协议进行REST相关操作,它的安装方式如下:

tar zxvf mysql-udf-http-1.0.tar.gz
cd mysql-udf-http-1.0/
./configure --prefix=/usr/local/mysql --with-mysql=/usr/local/mysql/bin/mysql_config
make && make install

如果提示缺少libcurl,就安装curl

yum install curl*

正常的情况mysql-udf-http.so等文件将安装至/usr/local/mysql/lib/plugin下,不知什么原因我的装在了/usr/local/mysql/lib/mysql/plugin下,于是加个软链

正常的情况mysql-udf-http.so等文件将安装至/usr/local/mysql/lib/plugin下,不知什么原因我的装在了/usr/local/mysql/lib/mysql/plugin下,于是加个软链

安装成功后,进到mysql控制台,注册相关函数

create function http_get returns string soname 'mysql-udf-http.so';
create function http_post returns string soname 'mysql-udf-http.so';
create function http_put returns string soname 'mysql-udf-http.so';
create function http_delete returns string soname 'mysql-udf-http.so'; 

然后在业务表中加入更新操作的触发器

DELIMITER |  
DROP TRIGGER IF EXISTS test_update;  
CREATE TRIGGER test_update  
AFTER UPDATE ON test  
FOR EACH ROW BEGIN  
    SET @tt_re = (SELECT http_get(CONCAT('http://192.168.0.1:8080/my.do?id=', OLD.id)));  
END |  
DELIMITER ;

经测试,当商品表中的数据有更新时,mysql会发送get请求至业务系统。

INSERT 触发器

DELIMITER |  
DROP TRIGGER IF EXISTS test_insert;  
CREATE TRIGGER test_insert  
AFTER INSERT ON test
FOR EACH ROW BEGIN  
    SET @tt_re = (SELECT http_get(CONCAT('http://192.168.0.1:8080/my.do?id=', OLD.id))); 
END |  
DELIMITER ;

DELETE 触发器

DELIMITER |  
DROP TRIGGER IF EXISTS test_delete;  
CREATE TRIGGER test_delete  
AFTER DELETE ON test  
FOR EACH ROW BEGIN  
    SET @tt_re = (SELECT http_get(CONCAT('http://192.168.0.1:8080/my.do?id=', OLD.id)));  
END |  
DELIMITER ; 

下载地址
http://code.google.com/p/mysql-udf-http

csdn下载
http://download.csdn.net/detail/cyantide/9455805

来源:https://blog.csdn.net/cyantide/article/details/50828746

借鉴:https://www.cnblogs.com/phpper/p/7587031.html

我们项目开发中,应该从哪几个方面提高项目性能?

我们项目开发中,应该从哪几个方面提高项目性能?【原创】

1、硬件;服务器要稳定,可靠,带宽大,允许的并发数要高;
2、软件【开发的程序】。

a、数据库
1、创建合适的字段类型及分配合适的长度;

例如:

密码:md5加密,对应的字段:char 32
年龄:tinyint 无符号

提示:整型的长度是结合0填充一起使用的。

2、默认值尽可能不要设置null

3、索引的创建;

4、合理的分表设计。

b、程序中值的调取【从数据库中调取】

单表查询,多表查询

子查询;【性能较低】
左右链接;
关联查询;

合理的 select 字段1,字段2 from 表
不合理的 select * from 表

不合理的 select count(*) from 表 where >>>
不合理的 select count(姓名) from 表 where >>>
合理的 select count(主索引ID) from 表 where >>>

c、优化。
1、静态化;
2、缓存[1、页面缓存;2、内存缓存]。

JAVA和JSP之间的关系

我现在给你一个JAVA和JSP之间的关系,以及JAVA的完整认识

JAVA分为J2EE,J2SE.J2ME,下面分别介绍:

一.J2EE:Java 2 Platform Enterprise Edition 企业版,用于企业应用,支持分布式部署。

J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,
它对开发基于Web的多层应用提供了功能上的支持。它包含13种核心技术规范:
(1)Java Database Connectivity (JDBC)
以一种统一的方式来对各种各样的数据库进行存取
(2)Java Naming and Directory Interface (JNDI)
用于名字和目录服务,它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统等
(3)Enterprise Java Beans (EJB)
提供了一个框架来开发和实施分布式商务逻辑,显著地简化了具有可伸缩性和高度复杂的企业级应用的开发
(4)JavaServer Pages (JSPs) 这里就是你所说的JSP!!!!!!用以创建动态网页
(5)Java servlets
提供的功能大多与JSP类似,不过实现的方式不同
(6)Remote Method Invocation (RMI)
在远程对象上调用一些方法,使用了连续序列方式在客户端和服务器端传递数据
(7)Interface Description Language (IDL)
将Java和CORBA集成在一起
(8)Java Transaction Architecture (JTA)
可以存取各种事务
(9)Java Transaction Service (JTS)
规定了事务管理器的实现方式
(10)JavaMail
用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类
(11)JavaBeans Activation Framework(JAF)
JavaMmail利用JAF来处理MIME-编码的邮件附件,MIME的字节流可以被转换成JAVA对象,或者转换自JAVA对象
(12)Java Messaging Service (JMS)
是用于和面向消息的中间件相互通信的应用程序接口(API)
(13)Extensible Markup Language (XML)
XML是一种可以用来定义其它标记语言的语言
上面的JSP是主流,基于MVC的实现,最流行使用,也最安全(比较其他语言做的网站)
其中EJB是java最难学的东西
但是现在的sun公司出来一种新的技术:java FX,
可以像FLASH一样在浏览器中执行,但是也要安装插件,具体可以参见www.sun.com
二.J2SE:Java 2 Platform Standard Edition 标准版,用于桌面应用,也是J2EE的基础。

包括JAVA基础,IO,Swing,AWT,线程,集合等知识.也是学习JAVA的必经之路(基础)!
三.J2ME:Java 2 Platform Micro Edition 移动版用于小型设备,是J2SE的一个子集。

主要的技术如下:

Connected Limited Device Configuration【CLDC】:是组成资源有限的移动信息设备的 Java 运行时环境的两种配置之一。CLDC 描述最基本的库和虚拟机特性,所有包含 K 虚拟机(K virtual machine,KVM)的 J2ME 环境实现中都必须提供这些库和特性。
Mobile Information Device Profile【MIDP】:是组成资源有限的移动信息设备的 Java 运行时环境的两种配置之一。MIDP 提供核心应用程序功能,包括用户界面、网络连接、本地数据存储和应用程序生命周期管理。
Connected Device Configuration【CDC】:是一个基于标准的框架,用来构建和交付可以跨许多连接网络的消费类设备和嵌入式设备共享的应用程序。
Mobile 3D Graphics API for J2ME【M3G】:是一种轻量的交互式 3D 图形 API,它作为可选的包与 J2ME 和 MIDP 结合使用。

所以你所说的JAVA和JSP的关系就这样豁然开朗!

JAVA是一种编程语言,可以编写应用程序,主要应用在网络编程上。 
JSP是建立在JAVA基础上的一种网络编程语言,只能在网页上应用。 
JavaScript是一种Web脚本语言,可以嵌入在HTML中,可以由浏览器解释执行。

可以把jsp理解为脚本

java为面向对象语言

jsp作用主要是负责页面展现,java负责逻辑,业务处理

jsp 本质 是servlet,servlet本质是 java类,就是这么个关系。

为什么要使用PHP单例模式及应用实例

首先我们要知道明确单例模式这个概念,那么什么是单例模式呢?

单例模式顾名思义,就是只有一个实例。

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,

这个类我们称之为单例类。

单例模式的要点有三个:

一是某个类只能有一个实例;

二是它必须自行创建这个实例;

三是它必须自行向整个系统提供这个实例。

下面我们讨论下为什么要使用PHP单例模式?

多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种”计划生育”。而PHP每次执行完页面都是会从内存中清理掉所有的资源. 因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了. 单单从这个方面来说, PHP的单例的确有点让各位失望. 但是单例仅仅只有这个功能和应用吗? 答案是否定的,我们一起来看看。

1. php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时(废话), 如果使用单例模式, 则可以避免大量的new 操作消耗的资源。

2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend framework的FrontController部分。

3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。

* 单例模式举例,其要点如下:
*
* 1. $_instance 必须声明为静态的私有变量
* 2. 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序new 类从而失去单例模式的意义
* 3. getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用
* 4. ::操作符只能访问静态变量或静态函数
* 5. PHP的单例模式是相对而言的,因为PHP的解释运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。
* 也就是说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量, 还是类的静态成员,都会在页面执行完毕后被清空,结果会重新建立新的对象,这样也就完全失去了Singleton的意义。
* 不过,在实际应用中同一个页面中可能会存在多个业务逻辑,这时单例模式就起到了很重要的作用,有效的避免了重复  new 对象(注: new 对象会消耗内存资源)这么一个行为,所以我们说PHP的单例模式是相对而言的。

数组排序问题:

js:

<script>
var a=Array(1,2,3,100,200,60,50); 

a.sort(function(a,b){
	if(a<b){return 1 //a<b return 1从大到小的排序
	} else{
	return 0
	}
})

alert(a);
</script>

PHP:方法一:

<?php
 $a=array(1,2,3,100,200,60,50);

 usort($a,function($a,$b){
	if($a<$b){
		return 1; //a<b return 1从大到小的排序
	} else{
	return 0;
	}
});
  print_r($a);

?>

PHP方法二:

<?php
 $a=array(1,2,3,100,200,60,50);
rsort($a);//rsort从大到小排序  ;sort是从小到大
 
  print_r($a);

?>

 

 

 

redis是一个key-value存储系统。和Memcached类似

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。[1]
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)
目前,Vmware在资助着redis项目的开发和维护。
百科:https://baike.baidu.com/item/Redis/6549233?fr=aladdin