又是basename,其实真的不想谈它,只是这两天在修正neatpic的BUG时,又被它折腾了。
前两天有朋友在回复里说,还是对中文处理一下吧。所以,我想了想,对中文又重新更新了下,结果问题就来了。我明明文件名是:“图片2副本.jpg”,但在cache之后就成了“2副本.jpg”,2前面的图片两个字就没有了。。这个,也太妖异了。得,你说不支持中文吧,干脆连后面的副本也没有就算了。却偏偏把前面的中文去掉了。
后来用pathinfo也测试了一下,同样的问题。。。
但是我在win服务器下却一切正常。后来我检查了一下我的WEB服务器,我的版本是5.2.6,
测试代码:echo basename('E:/test/图片2副本');点击查看测试页。
这个真叫一个妖啊。。。
所以我现在是:str_replace(dirname($filename).DIRECTORY_SEPARATOR,'',$filename);
希望遇到同样问题的能够再次避免吧。。
本文内容全部来自《集体智慧编程》一书,原书采用的是python,因为没有python编程环境,所以用PHP实现
PHP代码
- <?php
-
-
-
-
- $datalist = array(
- 'Lisa Rose' => array(
- 'Lady in the Water' => 2.5,
- 'Snake on a Plane' => 3.5,
- 'Just My Luck' => 3.0,
- 'Superman Returns' => 3.5,
- 'You, Me and Dupree' => 2.5,
- 'The Night Listener'=> 3.0
- ),
- 'Gene Seymour' => array(
- 'Lady in the Water' => 3.0,
- 'Snake on a Plane' => 3.5,
- 'Just My Luck' => 1.5,
- 'Superman Returns' => 5.0,
- 'You, Me and Dupree' => 3.5,
- 'The Night Listener'=> 3.0
- ),
- 'Michael Phillips' => array(
- 'Lady in the Water' => 2.5,
- 'Snake on a Plane' => 3.0,
- 'Superman Returns' => 3.5,
- 'The Night Listener'=> 4.0
- ),
- 'Claudia Puig' => array(
- 'Snake on a Plane' => 3.5,
- 'Just My Luck' =>3.0,
- 'Superman Returns' => 4.0,
- 'You, Me and Dupree' => 2.5,
- 'The Night Listener'=>4.5
- ),
- 'Mick LaSalle' => array(
- 'Lady in the Water' => 3.0,
- 'Snake on a Plane' => 4.0,
- 'Just My Luck' => 2.0,
- 'Superman Returns' => 3.0,
- 'You, Me and Dupree' => 2.0,
- 'The Night Listener'=> 3.0
- ),
- 'Jack Matthews' => array(
- 'Lady in the Water' => 3.0,
- 'Snake on a Plane' => 4.0,
- 'Superman Returns' => 5.0,
- 'You, Me and Dupree' => 3.5,
- 'The Night Listener'=> 3.0
- ),
- 'Toby' => array(
- 'Snake on a Plane' => 4.5,
- 'Superman Returns' => 4.0,
- 'You, Me and Dupree' => 1.0,
- ),
- );
-
-
-
-
-
- function sim_distance ( $datalist , $person1 , $person2)
- {
- $si = array();
- foreach ( $datalist[$person1] as $moviename => $grade ){
- if( array_key_exists( $moviename, $datalist[$person2] )){
- $si[$moviename] = 1;
- }
- }
- if( emptyempty( $si )){
- return 0;
- }
- $powers = 0;
- foreach ( $si as $moviename=>$val ){
- $powers += pow( ($datalist[$person1][$moviename] - $datalist[$person2][$moviename] ), 2 );
- }
- return 1 / (1+ sqrt($powers));
- }
-
-
- echo( sim_distance( $datalist , 'Lisa Rose' , 'Gene Seymour') );
- echo( '<br/>' );
-
-
-
-
-
-
- function sim_person ( $datalist ,$person1 , $person2)
- {
- $si = array();
- foreach ( $datalist[$person1] as $moviename => $grade ){
- if( array_key_exists( $moviename, $datalist[$person2] )){
- $si[$moviename] = 1;
- }
- }
- if( emptyempty( $si )){
- return 1;
- }
- $n = count( $si );
- $sum1 = $sum1Sq = $sum2 = $sum2Sq = $pSum = 0;
- foreach ( $si as $moviename => $val ){
- $sum1 += $datalist[$person1][$moviename];
- $sum1Sq += pow( $datalist[$person1][$moviename], 2 );
- $sum2 += $datalist[$person2][$moviename];
- $sum2Sq += pow( $datalist[$person2][$moviename], 2 );
- $pSum += ( $datalist[$person1][$moviename] * $datalist[$person2][$moviename]);
- }
-
- $num = $pSum - ( $sum1 * $sum2 / $n);
- $den = sqrt( ( $sum1Sq - pow( $sum1, 2 ) / $n) * ( $sum2Sq - pow( $sum2, 2 ) / $n) );
- if ( $den == 0 ){
- return 0;
- }
- return ($num / $den );
- }
-
-
- echo( sim_person( $datalist , 'Lisa Rose' , 'Gene Seymour') );
-
- ?>
有点长,随便看看吧
其实 很多朋友已经在说我的neatpic了。我只是没时间重写。
原来的程序是walkerlee写的,我只是旁边加了一下工。
所以这次我重写的时候压力好大。。。
基本上,大部分功能完成,暂时还没有实现把图片详细地址隐藏起来
已完成功能:
1、单文件(保持不变)
2、生成数据的cache,在目录下图片很多的时候,方便读取(图片信息我没有在初始化的时候生成到Cache里,留着给未来进行处理吧)
3、模版(也是一个模型而已,因为最初的那版是写死的,很多朋友说不方便改进,不过那时候是04年,将就点吧)
4、语言包(语言包只是一个虚幻的概念,测试模型而已)
5、文件名自然排序(原来的程序没有这个功能)
未完成功能:(短时间内不作更新了)
1、中文文件名。。。和操作系统有关啊。如果再改进就用base64处理一下了,这样显示就不太会有问题
2、管理(目前没有管理功能,也就是说不能上传,和人工重建缓存)
3、缩图和原图模式(好象没有什么必要吧?现在模版可以自己做的情况下,用jquery的thickbox或者lightbox,都可以避免这种问题了)
4、其他未知问题(图片详细地址没有隐藏,没有考虑外链,没有打包下载等等)
5、未计算子目录(不过我都在下拉列表里显示全路径了,顺便说一下,目录也没有排序)
目前测试地址为:http://neatstudio.com/neatpic/。
下载地址为:neatpic.rar
注意:1、目前的程序几乎没有任何注释
2、对于目录判断等并没有完善,因此我打包的时候将目录结构都一并打包上来
3、语言包功能几乎无效。
4、更多小问题,目前暂时不作解释和更新(这才是最重要的提醒。。。)
欢迎留下意见,我会在收集完信息后,一并修改
本文来自:http://www.phpv.net/html/1712.html,有点意思。纯属一笑吧,不过有时候看着也是一种悲哀。
如果你是一个程序员, 或者你就读计算机相关专业, 那么你应该能理解下面这些诡异的小习惯是怎么养成的, 或者你本身就有着其中的某些习惯:
0. 程序员数数会从0开始数起.
例: 程序员吵 架的时候会说: “我数三下, 你再不闭嘴我就不客气了! 零! 一! 二!” 或者列清单的时候编号会从0.开始写.
因: array[0]是数组的第一个元素.
评: 这个习惯的养成是一个艰难的过程. 多少次的越界, 多少次的循环次数错误让我们深深的记住了从0开始.
1. 程序员用肯定和否定 回答选择性的问题.
例: 问 “您想喝咖啡还是喝茶?” 程序员答: “嗯.”
因: 当条件或||有一个子句值为真, 则整个语句值为真.
评: 这个习惯夸张了一点, 但这的确是程序员思 维方式的通病, 用计算机的处理逻辑处理人类问题. 当然这样的回答显然是存在编程错误的, 因为对于这个问题他错误的返回了布尔型的值. 虽然高度怀疑有没有人关心这种回答的结果是怎样, 还是给出一个答案. 如果真的在程序的世界里, 服务员会优先考虑给你咖啡, 如果没有咖啡了, 才会端茶给你.
2. 程序员普遍患有或曾经患有分号结尾综合症;
例: 比如这几行;
因: 大部分程序, 特别是多数程序员的启蒙编程语言C语言是用分号结尾语句的;
评: 换行之前习惯用分号结尾, 这是程序员专 属的坏习惯. 还记得编译报的各种诡异的错最后原因总是少了那一个小小的”;”吗? 这就是这个坏习惯的成因. 据说分号结尾是有典故的, 因为键盘上的分号正好在右手小拇指的位置, 比起句号之类有着得天独厚的地理优势. 当然也有不需要分号结尾的编程语言(比如Ruby还有Python), 刚用起来会因为没有分号结尾而格外纠结.
3. 程序员对”语言”的概念和普通人有差.
例: 问: “你都会哪些语言?” 普通人: “我会汉语和英语, 还会一点点法语.” 程序员: “我会C语言, C++ 和 Java, 还会一点点Ruby.”
因: 程序员的世界里没有母语和外语, 只有编程语言.
评: 说真的, 程序语言的语法学起来比外语更容易, 拿到一个用没学过的语言写的程序, 你多少可以看懂部分程序. 程序语言没有国界, 是各国程序员交流最好的桥梁.
4. 程序员格外格外的厌恶括号/引号不配对的情形.
例: 看到这样的内容 (举个简单的例子(我知道你懂的), 你能表示”我很淡定我不抓狂吗?
因: 各种不配对问题会导致编译错误.
评: 扫视代码, 对不配对的情况异常敏感, 瞥一眼就能发现哪里少了个右括号. 这种症状在使用那些带自动补全功能的开发环境时变得更为纠结.
5. 程序员认为 千(k) == 1024.
例: 程序员换算表: 1km == 1024m, 1kg == 1024g.
因: 成因很曲折 计算机是二进制的世界 -> 1024是2的10次方 -> 英语里用kilo一词来表示 -> kilo翻译成中文是”千”, 比如千米, 千克.
评: 也许一般人会认为500, 1000是很整的数, 但程序员会觉得512, 1024是很整的数. 不要奇怪, 如果128, 256, 512这种形式看着不够整, 帮你转换成二进制: 10000000, 100000000, 1000000000…
6. 程序员惯用 == 来表示相等的意思.
例: 见5.
因: 在程序语言中, “=” 是赋值, “==” 才用来判断二者是否相等.
评: 单等和双等的区别是程序入门必修课, 也是老师爱考的考点. 如果在C语言if语句的判定条件里写了个单等, 编译能通过, 结果却往往不对, 够一个新手查上一阵子的. 当然目前的语言大都考虑到这一点, 防止了这类的误写, 但是单等和双等的差异已经深入每个程序员的 内心.
7. 程序员使用”//”表示”请无视这一行文字”.
例: 餐厅中. 程序员A: “我吃鱼香肉丝盖饭, 你吃什么?”
程序员B: “宫保鸡丁盖饭.”
程序员A 在点菜单写上:
鱼香肉丝盖饭 1
宫保鸡丁盖饭 1
程序员B: “我还是要牛肉面吧!”
程序员A 更正点菜单:
鱼香肉丝盖饭 1
// 宫保鸡丁盖饭 1
牛肉面 1
因: 程序中用”//”为代码加上注释, 程序运行时会无视掉”//”开头的代码行.
评: 如果和一伙程序员在一起时被冷落了, 可以抱怨一句”喂喂喂我是被注释掉了吗?” 相信一向以幽默感丰富又有爱心著称的程序员们会关注你的.
8. 程序员有 中文标点恐惧症.
例: 如果你注意到了, 这篇文章自始至终都在使用英文标点, 这就是最好的例子.
因: 程序中的全部符号都严格需要是英文半角标点.
评: 这个坏习惯是有中国特色的, 中国程序员特 有的. 任何一名优秀的我国程序员都应该可以作到区别中文标点和英文标点. 比如, 和,还有 ’和 ‘. 真的, 当年初学编程的时候, 诸如 “error C2018: unknown character ’0xa3′” 的错误看得还不够多吗!
就是这样一群人, 如果你慢吞吞的用电脑他们会急躁的抢过键盘熟练的使用各种快捷键, 他们会对着小孩子讲计算机的三原色是红绿蓝而不是红黄蓝, 他们描述大小距离更偏向于以像素作单位, 陪女朋友看电影看到电影院座位上稀稀落落的人就想做磁盘碎片整理…抱怨归抱怨, 这不也正是他们的可爱之处吗!