软件开发: 07 2008存档

看了一本讲性能优化的书,挑出其中比较有意思的建议,仅供参考:

1. 同样是加减乘除,int比float和double都要快,所以尽量用int做加法、乘法运算,最后再除法,变回浮点型

2. “&&”符的左右判断可以更考究,比如:if( (strlen(a)>10) && (b>100) )没有 if( (b>100) && (strlen(a)>10) )高效,因为strlen较花时间

3. 对于多层的if-else语句来说,要把可能性最高的放在开始,这样逻辑通常就在第一个判断后执行,避免了总是经过多次判断走到后面的else上

4. 通常switch比if-else快

5. 迭代比递归快

6. 快速字符串比较方法:先比较两个字符串的第一个字符,再全部比较。因为通常待比较的字符压根儿就不同,没必要一来就strcmp这么大动干戈

7. 把字符串以int方式读取来比较能够加快比较速度

8. fprintf比fstream快不了多少,但fgets比getline快很多
目标:搭一个简单的http上传服务,还有客户端
环境:php-4.3

在服务端准备一个action.php,内容如下:

<?php
  // 在 4.1.0 以前的 PHP 中,需要用 $HTTP_POST_FILES 代替 $_FILES。
  // 在 4.0.3 以前的 PHP 中,需要用 copy() 和 is_uploaded_file() 来代替 move_uploaded_file()。
 
  $uploaddir = '/tmp/upload/';
  $uploadfile = $uploaddir. $_FILES['file']['name'];
  print "<pre>";
  if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $_FILES['file']['name']))
  {
      print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
      print_r($_FILES);
  }
  else
  {
      print "Possible file upload attack!  Here's some debugging info:\n";
      print_r($_FILES);
  }
  print "</pre>";
?>

设置php.ini

参数 设置 说明
file_uploads on 是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir -- 文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize 2000m 允许上传文件大小的最大值。默认为2M
post_max_size 2000m 指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
说明
一般地,设置好上述四个参数后,在网络正常的情况下,上传<=8M的文件是不成问题
但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得继续设置下面的参数。
max_execution_time 3600 每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time 3600 每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit 200m 每个PHP页面所吃掉的最大内存,默认8M

重启apache使服务生效

客户端upload.php代码:
<?php
  
  $ch = curl_init();
 
  $data = array('name' => 'cookie_log.txt', 'file' => '@/home/cookie_log.txt');
 
  curl_setopt($ch, CURLOPT_URL, 'http://localhost/action.php');
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 
  curl_exec($ch);

?>
运行upload.php,即把cookie_log.txt上传。

参考网站:
http://kb.discuz.net/index.php?title=PHP%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0