国内很多软件开发在叫嚣着开源,但,有几个是真正做到的?最初的discuz,直到现在还是有一些目录是加密的,主要是一些API,现在又看到不少自称是开源的。请你们扪心自问,你们做到了吗?
虽然国内开发人员的素质参差不齐,但靠欺骗的手段来达到听引人的目录,你们对得起自己的良心吗??
什么是开源???看看吧。。。
开放源代码并不仅仅意味着对源代码的访问权。开放源代码软件的发布条款必须满足以下条件:
1. 自由地再发布
如果被发布的软件是由不同来源的程序组成的,许可证不得限制任何当事人或组织(party)销售或赠送作为被发布软件成分之一的开放源码软件。
许可证不得从此项销售中索取使用费或其它任何费用。(理由)
2. 源代码
程序必须包括源代码,必须允许以源代码方式发布、还必须允许以编译后的形式发布。如果产品的某个部分没有与源代码一同发布,那么必须提供通行的、不需要支 付合理范围之外的任何费用的手段以获得源代码---从网络上免费下载是一种可取的方式。源代码必须是程序员对其进行修改的最佳形式。故意地使源代码变得含 混晦涩是不允许的。也不允许给出预处理器或翻译器处理的中间结果。(理由)
3. 派生作品
许可证必须允许修改软件和派生软件,并且必须允许它们按照原软件的许可证的条款进行发布。(理由)
4. 作者的源代码的完整性
只有在许可证允许与源代码一同发布"补丁文件"(该"补丁文件"以在创建时对程序进行修改为目的)时,许可证才能限制对修改形式的源代码的发布。许可证必 须明确地允许发布由修改后的源代码生成的程序。许可证可以要求派生的作品采用不同的名称或不同的版本号以区别于原来的软件。(理由)
5. 不得歧视任何个人或团体
许可证不得歧视任何个人或者由多人组成的团体。(理由)
6. 不得歧视任何应用领域(fields of endeavor)
许可证不得限制任何人把程序应用于任何领域。例如,不得规定程序不能应用于商业领域或基因研究领域。(理由)
7. 许可证的发布
与程序有关的权利必须适用于该程序的任何使用者,并且程序的使用者也不需要为了使用该程序而获得其它许可证的许可。(理由)
8. 许可证不能针对于一个产品
与程序有关的权利不能由该程序是否作为某个软件产品的一部分来决定。如果程序从那个发布中被抽出来,并且按照程序的许可证的条款进行使用和发布,那么得到该程序的当事人或组织将获得与得到原程序的使用者相同的权利。(理由)
9. 许可证不能影响其它软件
许可证不得向与采用它的软件一同发布的其它软件提出任何限制。例如,许可证不能坚持要求在同一媒体上发布的其它程序都是开放源代码软件。(理由)
» 阅读全文
原文地址:http://hi.baidu.com/hi_bai_du_com/blog/item/fd297b89b318a8b20e24444a.html
原文:
PHP代码
- <?
-
-
-
-
-
-
-
-
-
-
-
-
-
- if(trim($picfile[0])!=""){
- $link=@mysql_connect("localhost","root","root");
-
- if($link==false) {
- echo "<script>alert('连接数据库时发生错误,请稍后再试!')</script>";
- }
- $res=mysql_select_db("kkk");
- if($res==false){
- echo "<script>alert('打开数据库时发生错误,请稍后再试!')</script>";
- }
- $tmpset=0;
-
- for($i=0;$i<=3;$i++){
-
- if(trim($picfile[$i])!=""){
-
- $fp=fopen($picfile[$i],"r");
- $picdata=fread($fp,filesize($picfile[$i]));
- fclose($fp);
-
- $picdata=addslashes($picdata);
-
-
- $qu="insert into images(picdata,pictext) values('$picdata','$pictext[$i]')";
- $res=@mysql_query($qu,$link);
- if($res==false){
- echo "<script>alert('图片 ".$i." 提交失败!')</script>";
- continue;
- }
- $tmpset=$tmpset+1;
- }
- }
- echo "<script>alert('操作成功!实际入库图片数 ".$tmpset." 张')</script>";
- }
- ?>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>无标题文档</title>
- </head>
-
- <body>
- <form action="<? echo $PHP_SELF; ?>" method="post" enctype="multipart/form-data" name="form1">
- <input type="file" name="picfile[]">文件说明<input type="text" name="pictext[]"><br/>
- <input type="file" name="picfile[]">文件说明<input type="text" name="pictext[]"><br/>
- <input type="file" name="picfile[]">文件说明<input type="text" name="pictext[]"><br/>
- <input type="file" name="picfile[]">文件说明<input type="text" name="pictext[]"><br/>
- <input type="submit" name="Submit" value="提交">
- </form>
- </body>
- </html>
显示存在mysql中的图片
- <?
-
-
-
-
- $link=@mysql_connect("localhost","root","root");
- mysql_select_db("kkk");
- $qu="select picid,picdata from images where picid=$picid";
- $res=@mysql_query($qu,$link);
- $num=mysql_num_rows($res);
- if($num==0){
- print "<br/><br/><br/>";
- print "<p><b>没有这张图片!</b></p>";
- exit();
- }
- $row=@mysql_fetch_row($res);
- header("Content-type:image/");
- echo $row[1];
- ?>
——END——
仔细看看吧。。。是怎么误人子弟的。唉。
1、上传没有上传(大哥,你这是读本地文件呐,如果是这样的话,那。。。要那个enctype有啥用?)
2、变量直接全局(。。。。。。。。)
3、二进制字段是可以直接echo输出的吗??不谈别的,刚才你都addslashes了,为什么输出的时候没有stripslashes??
4、header头。。。。
5、for循环,直接就是3了。。这个居然就写死了
6、$tmpset的加法。。。都用了for了,用这个有意义吗??直接用$i不就完了?(这个就不算他的问题,算是习惯吧)
7、BLOB字段的插入。。。直接插的吗???看这里MySQL 5 中 blob 类型字段的插入
自2000年5月22日发布正式稳定版8年之后,8月8日标志着PHP 4生命的终结,官方不再提供支持,不会再有安全补丁发布。PHP 4.4.9是PHP 4.x的最后一个版本。管理员和开发者失去了最后一个不升级到新一代版本开发环境的理由。过去几年,PHP 5提供了多种升级的途径,它的最新版本是5.2.6。但PHP 4发布8年之后,仍然有相当多的系统将不会在未来迁移到PHP 5,其中有相当的一部分可能永远也不会升级到PHP 5。
对于那些不升级到新版PHP的用户,PHP专家Stefan Esser将通过Suhosin项目继续为PHP 4.x系列提供第三方安全补丁。
对象的持久化最初是从JAVA那边提出来的,只是人家是编译型的语言,而PHP是解释性语言,在PHP4的时候已经可以持久化了,只是那时候PHP的性能还只是一般(相对于5而言,主要是指对象操作方面),如今PHP5横行于世,持久化也就在各种各样的项目中被使用。
今天再整理一下,争取明天发出来,如果太多,那就只能连载了。。
本人较懒,黑黑
在工作中我总是会发现有些人的程序里有些不妨碍程序正常执行的小问题,并且很多人都常常愿意这样写,下面我列举一下
1.php属于弱语言,所以在使用一个变量的时候,不需要为其指定变量类型和初始化值,但是我强烈建议在使用一个变量前,先为其初始化一个默认值,这样既安全又规范
2.
if (条件表达式1 && 条件表达式2)
//do something
else
//do something
?>
当进行与运算操作的时候,最好把最可能返回"False"的表达式放在操作的前面,这样当if条件遇到false后,就不在执行false以后的运算了,这样加快程序的执行速度,但是要注意一点的是false以后的条件表达式如果是个赋值的表达式,例如:
$a = 1;
$b = 0;
if (($a > 1) && ($b = 2))
?>
这段程序在$a > 1这个地方就执行完了,$b = 2的赋值操作将不再执行,结果$b的值还是0.
3.在使用mysql数据库的时候,执行"select count"操作的时候,尽量使用count(*)而不是count(一个字段),count(*)会直接使用索引文件进行统计(inndb类型的表除外)而不是去遍历整个数据表
4.在使用group by的时候,如果没有必要对返回结果集合进行排序,建议加上"order by null",这样会减少一步排序的操作
5.为table建立复合索引的时候,比如"name-city-age"这个索引,这个索引是由表中的字段name,city,age组成的,虽然我们 只为这张表建立了一个索引,但其实...嘿嘿嘿...这是三个索引,恩,哪三个索引呢...name,name-city,name-city-age这 三个索引,请注意,复合索引遵循的是最左原则,所以name-age,city-age将不会使用索引...
6.在建索引的时候,如果能保证这个(复合)索引的字段(组合)的值肯定是唯一值,那么就把这个(复合)索引建成唯一索引...
取自abetterday的博客:http://www.phpwap.cn/?action=articleContent&articleId=153