首页 > 编程技术 > php

php实现ftp上传下载文件的例子

发布时间:2016-11-25 15:47

在php中我们可以利用ftp_connect相关函数实现文件上传与下载功能,其实就是ftp客户端一样的操作,下面我来给大家介绍如何利用php来实现。

php的代码如下

 代码如下 复制代码

$ftp_server='www.111cn.net';//服务器
$ftp_user_name='111cn.net';//用户名
$ftp_user_pass='password';//密码
$ftp_port='21';//端口
$ftp_put_dir='data/photo/thumb/data2';//上传目录

$ftp_conn_id = ftp_connect($ftp_server,$ftp_port);
$ftp_login_result = ftp_login($ftp_conn_id, $ftp_user_name, $ftp_user_pass);

if((!$ftp_conn_id) || (!$ftp_login_result)) {
echo'连接到ftp服务器失败';
exit;
}else{

ftp_pasv($ftp_conn_id,true); //返回一下模式,这句很奇怪,有些ftp服务器一定需要执行这句

ftp_chdir($ftp_conn_id, $ftp_put_dir);
$ftp_upload = ftp_put($ftp_conn_id, '3c264461abdf49de2ddaabc3426ceb65.jpg', 'data111cn.net3c264461abdf49de2ddaabc3426ceb65.jpg', FTP_BINARY);
//var_dump($ftp_upload);//看看是否写入成功
ftp_close($ftp_conn_id); //断开
}

注解

ftp_connect() 函数建立一个新的 FTP 连接。

若成功,则返回一个连接标识,否则返回 false。

The ftp_login() function logs in to the specified FTP connection.
ftp_login()函数的作用是:登录 FTP 服务器。

This function returns TRUE on success and FALSE and a warning on failure.
如果函数成功执行将返回True;如果失败将返回False,并给出警告。

ftp_put() 函数把文件上传到服务器。

若成功则返回 true,失败则返回 false。

我初步理解是strlen只能计算英文字符,而mb_strlen是可以计算中文与英文字符的长度,下面我来详细的介绍 strlen和mb_strlen的区别.

定义和用法

strlen() 函数返回字符串的长度。

语法

strlen(string)参数 描述
string 必需。规定要检查的字符串。

而mb_strlen()函数的参考也是一样的。

例子

 代码如下 复制代码

<?php
$str=‘中文a字1符‘;
echo strlen($str);
echo ‘<br />‘;
echo mb_strlen($str,‘UTF8‘);
//输出结果
//14
//6
?>

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14
在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在 UTF-8编码下,一个汉字占3个字节)。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和 strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用 mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。


注意事项

php默认是不支持mb_strlen()函数的,需要安装扩展模块。安装方法如下:

 代码如下 复制代码

yum install php-mbstring

找到mbstring.so的位置,可以使用rpm -ql 安装的rpm名

修改/etc/php.ini配置文件,增加

 代码如下 复制代码

extension=php_mbstring.so

并确保php_mbstring.so模块在extension_dir = "/usr/lib64/php/modules"配置所指的路径里。

本文章简单总结的一个PHP if和or哪个效率对比程序,大家可参考参考。

实例说明

 代码如下 复制代码

<?php
$t1 = microtime();
 
while($i<=10000){
    if(!defined('APP_PATH'));      // 0.011059
    // defined('APP_PATH') OR 1;   // 0.009398
    $i++;
}
 
$t2 = microtime();
echo $t2 - $t1;
?>

例2

 代码如下 复制代码

<?php
$t1 = microtime();
 
while($i<=1000000){
    if(!defined('APP_PATH'));      //0.20043
    // defined('APP_PATH') OR 1;   //0.107475
    $i++;
}
 
$t2 = microtime();
echo $t2 - $t1;
?>

大家去测试一下吧这里我测试了的结果是or 比if效率要高一些哦。

在php中我们合并数据有两种简单快速的方式一种方式是利用array_merge()函数来操作,另一种办法是利用+号,下面我们来看看哈。

用法

array array_merge ( array $array1 [, array $array2 [, array $... ]] )

例子 1

 代码如下 复制代码
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));
?>

输出:

 代码如下 复制代码

Array ( [a] => Horse [b] => Cat [c] => Cow )

例子2

 代码如下 复制代码

<?php
echo "rn第一种情况rn";
$a=array(1,2,3,4,5,6);
$b=array(7,8,9);
 
$c=array_merge ($a,$b);
print_r($c);
$c=$a+$b;
print_r($c);
$c=$b+$a;
print_r($c);
 
 
echo "rn第二种情况rn";
$a=array('a','b','c','d','e','f');
$b=array('a','x','y');
 
$c=array_merge ($a,$b);
print_r($c);
$c=$a+$b;
print_r($c);
$c=$b+$a;
print_r($c);
 
 
echo "rn第三种情况rn";
 
$a=array(
 1=>'a',
 2=>'b',
 3=>'c',
 4=>'d',
 5=>'e',
 6=>'f');
$b=array(
 1=>'a',
 7=>'x',
 8=>'y');
 
$c=array_merge ($a,$b);
print_r($c);
$c=$a+$b;
print_r($c);
$c=$b+$a;
print_r($c);
?>

本文章来给大家先介绍PHP中文字符串截取的一些问题及关于如何解决英文和汉字混合的情况下会出现乱码的解决方法。

1. 截取GB2312中文字符串

 代码如下 复制代码

<?php

//截取中文字符串

function mysubstr($str, $start, $len) {

$tmpstr = “”; $strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {

if(ord(substr($str, $i, 1)) > 0xa0) {

$tmpstr .= substr($str, $i, 2); $i++;

}

else $tmpstr .= substr($str, $i, 1);

}

return $tmpstr;

}

?>

2. 截取utf8编码的多字节字符串

 代码如下 复制代码

<?php

//截取utf8字符串
function utf8Substr($str, $from, $len)

{

return preg_replace(‘#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,’.$from.’}’.
‘((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,’.$len.’}).*#s’, ‘$1′,$str);
}

?>

但是在英文和汉字混合的情况下会出现如下问题:

如果有这样一个字符串

 代码如下 复制代码
$str="这是一个字符串";

为了截取该串的前10个字符,使用

 代码如下 复制代码
if(strlen($str)>10) $str=substr($str,10)."…";

那么,echo $str的输出应该是"这是一个字…"


那么要如何解决这个问题了,下面我来分享一个可以支持gb2312,gbk,big三种编码。

例1

 

 代码如下 复制代码
$len = 19;
$text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
echo strlen($text)<=$len ? $text : (substr($text,0,$len).chr(0)."....");
/****chr(0)不是null
null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000
虽然chr(0)不会显示出什么,但是他是一个字符。
当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。而值为0x81到0xff与0x00组合始终都显示为“空”
根据这一特点,在substr的结果后面补上一个chr(0),就可以防止出现乱码了
注:
编码 第一字节 第二字节
gb2312 0xa1-0xf7 0xa1-0xfe
gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e
big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e
其次这个是网上搜索的,支持utf-8编码,原作者不详:
 *****/
     function subString_UTF8($str, $start, $lenth)
    {
        $len = strlen($str);
        $r = array();
        $n = 0;
        $m = 0;
        for($i = 0; $i < $len; $i++) {
            $x = substr($str, $i, 1);
            $a  = base_convert(ord($x), 10, 2);
            $a = substr('00000000'.$a, -8);
            if ($n < $start){
                if (substr($a, 0, 1) == 0) {
                }elseif (substr($a, 0, 3) == 110) {
                    $i += 1;
                }elseif (substr($a, 0, 4) == 1110) {
                    $i += 2;
                }
                $n++;
            }else{
                if (substr($a, 0, 1) == 0) {
                    $r[ ] = substr($str, $i, 1);
                }elseif (substr($a, 0, 3) == 110) {
                    $r[ ] = substr($str, $i, 2);
                    $i += 1;
                }elseif (substr($a, 0, 4) == 1110) {
                    $r[ ] = substr($str, $i, 3);
                    $i += 2;
                }else{
                    $r[ ] = '';
                }
                if (++$m >= $lenth){
                    break;
                }
            }
        }
        return $r;
    } // End subString_UTF8;
}// End String

#由于此函数返回的是一个数组,因此要配合join函数来显示字符串:
#join('',subString_UTF8($str, $start, $lenth));
#在页面显示的时候还可以在此语句后面连一个"..."

标签:[!--infotagslink--]

您可能感兴趣的文章: