PHP 确实是世界上最好的语言..

2015-01-08 16:31:39 +08:00
 emptyhua
file_get_contents('zip://test.zip#test.txt');

直接读取zip中的指定文件,这么贴心,碉堡了。。
11818 次点击
所在节点    PHP
78 条回复
mactalk
2015-01-09 11:31:55 +08:00
@robertlyc Ruby真牛逼!难道Ruby写程序都是定义好错误的类然后在程序中一直改吗?
mactalk
2015-01-09 11:36:15 +08:00
@yuankui 这就是所谓的选择性无视。php虽然够烂,但也有它好的地方,楼主说的file_get_contents就在实际工作中帮我省掉很多事。别的语言出个语法糖把10行的代码压缩到1行,就够拥簇者高兴个2,3天。php有个能把几十行代码(可能还不止)压缩到一个的函数,就变成了"也就是封装一个函数"的事。
kyrw369
2015-01-09 11:40:59 +08:00
谁知道java完成此功能的代码呢
zhuzhichao
2015-01-09 11:50:45 +08:00
确实不知道有如此厉害的用法。心中又默默念了一遍『PHP 是世界上最好的语言』
leondotli
2015-01-09 12:04:02 +08:00
这跟PHP语言唯一的关系就是标准库里加入了一个好的库,猜想streams就是一个设计良好的库,但是不是很复杂?下面是一种简单方案。

函数 file_get_contents(path);
实现
protocol, package, file = parse_path(path)
protocol_handler = find_protocol_handler(protocol)
file = protocol_handler.load(package).get(file)
return file
当然另外有地方去register_protocal_handler(protocol, implement)...,只要设计好协议了,那些实现都不是什么大问题。
RemRain
2015-01-09 13:01:37 +08:00
语言很多槽点,但内置函数的强大程度无可质疑,比如 date、string、array、openssl 等,绝大多数是 10 年前,PHP 4.0 时代就有的,虽然其他语言封装下,挂上 lib 也能实现,但别忘了,这些都是 PHP 内置的,是 PHP 开发者贴心设计的。

比如:strtotime('this monday', $time);

获取时间戳对应那一周的第一天,对应的还有 last day of this month 等,第一次知道这样的用法时震惊了,好奇去看了下源码,时间解析部分就一个 C 文件,2.5w 行代码,光 goto 对应的 label 就有 1000 多个,彻底跪了
nine
2015-01-09 13:27:26 +08:00
@mactalk
php中调用别人的库的时候,发现功能不能完全满足需要
做法
1 patch源码
缺点:每次更新库需要重新path,或不更新。

2 extend出一个类
缺点:各种层层extend,命名污染严重。

3 把源码剥出来,自己单独写一个
缺点:重复造了个轮子,资源没有得到复用。


ruby的打开类的意义在于

可以方便的在外围对库进行扩展。
这样上游库更新的时候,不需要每次都去patch源码。
减少命名污染。
viaNull
2015-01-09 13:40:12 +08:00
估计LZ是铜币不够用了
拿去不用谢~
fork3rt
2015-01-09 15:03:04 +08:00
PHP是世界上最好的语言, 没有之一
andybest
2015-01-09 15:38:58 +08:00
如果 test.zip 有 10G 大小,这么搞服务器会崩么?
Showfom
2015-01-09 16:23:13 +08:00
@andybest 服务器内存上96G 吧- -
Jack
2015-01-09 16:27:46 +08:00
有没有能直接看到压缩包内文件列表的办法。。。
mactalk
2015-01-09 16:35:54 +08:00
@nine 学习了。那如果上游库更新比较大,下游打开类动态修改的代码也应该要一起变动吧?
nine
2015-01-09 20:50:56 +08:00
@mactalk
那是肯定的,因为还是打patch嘛
不过一般就是上游修改了之后,下游跑一遍单元测试,跑通的就无需理会,只改跑不通的。
mingyun
2015-01-11 21:04:36 +08:00
还有这个用法。。。
yuankui
2015-01-13 12:48:11 +08:00
@NCE
@mactalk
看来两位都是phper
在没有T的情况下,我在phper群中丢了一个嘲讽,纯粹就是找死。。
sohu022
2015-01-14 16:26:49 +08:00
@kyrw369
ZipFile zipFile = new ZipFile("test.zip");
InputStream zipInputStream = zipFile.getInputStream(zipFile.getEntry("test.txt"));

DEMO:

public class ReadTextFileInZip {
public static void main(String[] args) throws IOException {
ZipFile zipFile = new ZipFile("test.zip");
InputStream zipInputStream = zipFile.getInputStream(zipFile.getEntry("test2.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(zipInputStream));
String line = null;
while((line = br.readLine())!= null){
System.out.println(line);
}
br.close();
}
}
xwsoul
2015-01-15 10:40:09 +08:00
这样的事实就不用一再重复了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/160363

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX