首页 >  面试题 > 网络营销-企业面试宝典 > 

PHP面试题系列(二)

PHP面试题系列(二)

作者:eld 来源:华育国际 时间:2015-05-29 访问次数:3418
要调整 socket 读写数据的时间,你必须使用 stream_set_timeout 函数。不能分开设置读和写的超时。不过,请注意,调用 fsockopen()时,流的超时设置不影响连接的超时设置...

1.以下哪一项不是合法的 PHP 文件资源?
    A.\\server\path\filename
    B.http://www.example.com/index.php
    C.myfile.txt
    D.compress.zlib://myfile.txt
    E.以上都不合法
答案:E
    所有选项都是合法的封装器。PHP 中,几乎所有的文件访问功能能用选项中的任何一种方式来操作本地和远程文件。

2.哪个函数能创建并注册一个 PHP 的流封装器?
答案:
    stream_wrapper_register 函数用来注册一个用户自定义的文件封装器(以类的形式创建)作为封装协议。它需要两个参数:新协议的名称和操作它的类的名称。

3.用 stream_get_meta_data 函数,流 API 无法提供下列哪种信息?
    A.是否仍然有数据未读
    B.流是否过期
    C.流是否被阻挡
    D.通过流传输了多少数据
    E.流构建的成分
答案:D
    stream_get_meta_data 函数无法告诉你通过流传输了多少数据——它只能告诉你还剩多少数据需要传输。

4.以下哪些是 PHP 支持的流传输方式?(双选)
    A.http
    B.STDIO
    C.ftp
    D.STDOUT
    E.stream
答案:B 和 E
    PHP 只支持两种流传输(本地操作用 STDIO,远程操作用 stream),并且将根据创建的流的类型来自动选择合适的传输方式。

5.Stream context 提供了通过当前流传输的数据的信息,并能对以下哪个部分进行配置?(双选)
    A.流过滤器(Stream Filter)
    B.流传输器(Stream Transport)
    C.文件封装器(File Wrapper)
    D.单独的读/写流
    E.以上全部
答案:B 和 C
    Stream context 能用来修改当前文件封装器或者流本身传输的行为方式。通常不需要创建 stream context,因为 PHP 已经能够很好的处理相关问题了。

6.哪个函数能用来手动打开一个 socket,来连接一台文件封装器不支持的服务器?
答案:
    一般都用 fsockopen 函数来打开一个指向 PHP 不支持其协议的服务器的端口。这能就能让用户自定义的文件封装器与 PHP 不支持其协议的服务器进行连接。

7.PHP 不支持以下那种传输协议?
    A.tcp   B.udp    C.udg    D.pdc    E.unix
答案:D
    pdc,它不是网络传输协议。在选项之外,PHP 还支持安全传输协议,比如 ssl 和 tls。

8.假设你需要通过 tcp 周期性的向一台服务器发送数据。时间间隔不确定,你必须能在发送完成后立刻进行下次发送。而你的脚本还需要在传输间隔中完成其他操作。你在编写脚本时发现,如果服务器响应时间过长,则经常要在 fread()上等待,使得其他操作无法正常进行。如何解决这个问题?
    A.降低 max_execution_time,迫使 fread()减少等待时间
    B.调用 fsockopen()进行连接时,降低超时等待的时间
    C.关闭 socket 阻隔
    D.打开 socket 阻隔
    E.以上都不对
答案:C
    默认情况下,fsockopen 函数创建的 socket 的阻隔是打开的。这意味着任何读写数据的操作将“阻隔”其他操作,直到当前操作完成。阻隔关闭时,如果没有数据需要 fread()读取,函数将很快返回,你就可以做其他的事了。

9.处理 socket 超时时,连接超时与读写超时可以分开设置。哪个函数能实现这个功能?
答案:
    要调整 socket 读写数据的时间,你必须使用 stream_set_timeout 函数。不能分开设置读和写的超时。不过,请注意,调用 fsockopen()时,流的超时设置不影响连接的超时设置。

10.假设你需要编写一个脚本,用来通过任意一个流读取文本数据,并用另一个 ROT13编码的流写回。编码必须在用第二个流写回时进行。怎么做最合适?
    A.把编码后的数据存在临时变量中,把这个变量写入流
    B.用流过滤器即时编码
    C.创建一个 ROT13 查询表,然后一个字符一个字符的即时写入
    D.ROT13 无法即时编码
    E.以上都不对
答案:B
    流过滤器(stream filter)能应用在任何流上,并且能对数据流同时进行多个操作。举例来说,可以给一个流同时添加 ROT13 过滤器和 base64 过滤器,来合并成 base64/ROT13 编码。

11.以下脚本输出什么?
    echo long2ip (ip2long ('127.0.256'));
    ?>
    A.一个警告
    B.255.255.255.255
    C.-1
    D.127.0.1.0
    E.127.0.256.0
答案:D
    ip2long 函数将字符串 127.0.256 转换成合法的 IP 地址 127.0.1.0,long2ip()的功能正好相反。这是检查一个 IP 是否合法的有效手段(PHP 手册里就是这么说的)。

12.以下脚本输出的是什么?
    echo getservbyname ('ftp', 'tcp');
    ?>
    A.本地 FTP 服务器列表
    B.名为“tcp”的 FTP 服务器的地址
    C.与 TCP 服务器相连的名为“FTP”的端口
    D.除了 FTP 以外所有服务的端口列表
答案:C
    getservbyname 函数返回特定服务器的端口和协议——这里是 FTP 和 TCP,通常在 21 端口(并不总是这样,你可以编辑服务器配置文件来改变这个端口)。

13.gethostbynamel 函数有什么用?
    A.返回某个主机名的 IP
    B.返回某个主机名的所有 IP 列表
    C.以长整型数的形式返回某个主机的 IP
    D.以长整型数的形式返回某个主机的所有 IP 列表
    E.以上都不对
答案:B
    gethostbynamel 函数返回一个包含某个指定地址的主机下所有 IP 的数组。

14.以下那种操作不能用 ftp://流封装?(双选)
    A.读取文件    B.写入文件    C.建立一个稳定的连接并改变当前目录    D.创建新目录
答案:C 和 D
    ftp://流封装器能从 FTP 服务器读写数据,但不能改变当前目录或新建目录——FTP 客户端才行。

15.如何创建一个自定义的流处理器?
    A.调用 stream_wrapper_register()函数,并定义一个进行流操作的类
    B.用 stream_wrapper_register()注册一个处理函数
    C.创建一个和要处理的流封装器同名的类,并用 fopen()打开
    D.用 stream_load()加载流封装器
答案:A
    stream_wrapper_register 函数能注册一个新的流封装器,它需要接收用来操作流的类的名称。