高级php面试题及部分答案 (2)


    /**
     * 运行结果
     *
     sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php -f 123 -g 456
        Array
        (
            [f] => 123
            [g] => 456
        )
     */


    /*
     * 方法三 提示用户输入,然后获取输入的参数。有点像C语言
     *  在命令行下运行 /usr/local/php/bin/php ./getopt.php
     */
    fwrite(STDOUT, "Enter your name: ");
    $name = trim(fgets(STDIN));
    fwrite(STDOUT, "Hello, $name!");
    /**
     * 运行结果
     *
     sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php
     Enter your name: francis
     Hello, francis!
     */
 
 


1.8 (mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;
int : 数值类型
char : 固定长度字符串类型
varchar : 可变长度字符串类型
datetime : 时期时间类型
text : 文本类型

varchar和char有什么区别:
a. char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。
而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。

b. char 固定长度,所以在处理速度上要比varchar快速很多,但是浪费存储空间,
所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。


1.9 error_reporting 等调试函数使用
error_reporting() 函数能够在运行时设置php.ini中 error_reporting 指令。
所以可以再程序中随时调节显示的错误级别。
使用此函数时 display_errors必须是打开状态。

1.10 您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
 

1.11 posix和perl标准的正则表达式区别;

1.12 Safe_mode 打开后哪些地方受限.
启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打开、命令执行等函数.
所有操作文件的函数将只能操作与脚本UID相同的文件.


1.13 写代码来解决多进程/线程同时读写一个文件的问题。
PHP是不支持多线程的,可以使用php的flock加锁函数实现。
$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // 进行排它型锁定
fwrite($fp, "Write something here\n");
flock($fp, LOCK_UN); // 释放锁定
} else {
echo "Couldn\'t lock the file !";
}
fclose($fp);


1.14 写一段上传文件的代码。
upload.html
<form enctype="multipart/form-data" method="POST" action="upload.php">
Send this file: <input type="file" />
<input type="submit" value="Send File" />
</form>

upload.php
$uploads_dir = \'/uploads\';
foreach ($_FILES["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["tmp_name"][$key];
$name = $_FILES["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}


1.15 Mysql 的存储引擎,myisam和innodb的区别。
a. MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.
b. MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快.
c. InnoDB不支持FULLTEXT类型的索引.
d. InnoDB 中不保存表的具体行数,也就是说,
执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,
但是MyISAM只要简单的读出保存好的行数即可.
e. 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
f. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
g. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,
但是对于使用的额外的InnoDB特性(例如外键)的表不适用.
h. MyISAM支持表锁,InnoDB支持行锁。
 


二. web 架构,安全,项目经验
2.1 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。


2.2 使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请先打开mod_rewrite.
首先,打开mod_rewrite模块。

其次,http.conf找到以下代码段:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
将其中的:AllowOverride None 改为 AllowOverride All ,重启httpd服务即可。

然后,在项目根目录下简历 .htaccess 文件,填写规则。
  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwxdx.html