本节教程开始讲解如何与文件进行交互。以帮助大家理解PHP中的所有类型的文件操作!
php文件操作的注意事项
在php中对文件操作,一定要非常谨慎。
常见的错误包括编辑了错误的文件,用垃圾数据填补了硬盘驱动器和意外删除了文件的内容。
在日常的php开发中,对于文件操作这一块,应该合理的使用方法,并做好异常的捕获等,以最大可能的避免不必要的误操作,甚至重大的文件安全故障。
php文件操作概述
学习php的文件操作,需要了解如何创建,打开和关闭文件。
有了这些基础知识后,我们将学习文件的基本操作,包括:读,写,追加,截断,用PHP上传文件等。
下面开始php文件操作中的最简单部分,带领大家掌握在php中创建文件的方法。
PHP文件的创建
在这一节中,学习如何使用PHP创建一个文件。
在php中,一个有趣的现象,可以用fopen打开与创建文件,都可以使用此方法。
在PHP中使用fopen函数打开文件。
它也可以创建一个文件,如果它没有找到函数调用中指定的文件。
所以,如果使用fopen打开一个不存在的文件,它会创建它。
另外,用fopen打开文件时,可以进行写入或追加,这个后面会有介绍。
php如何创建一个文件
fopen函数有两个重要的参数。
首先,必须提供的文件名。
其次,必须告诉这个方法将要进行哪些操作,比如从文件中读取,写入信息等。
要创建一个文件,则必须提供一个文件名,并告诉PHP,要写入一个文件。
参考代码:
<?php //创建文件 //by www. $ourFileName = "testFile.txt"; $ourFileHandle = fopen($ourFileName, 'w') or die("can't open file"); fclose($ourFileHandle); ?>
代码说明:
在当前目录下创建文件testFile.txt。
创建程序检测到文件testFile.txt并不存在,又检测到方法中用到了'w'选项,就会创建该文件。
$ourFileName = "testFile.txt";
将待创建的文件:testFile.txt 存储到一个PHP字符串变量$ ourFileName中。
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
此段代码实际上有两个部分。
首先,使用fopen方法的打开功能,并提供了两个参数:文件名、及通配字符'w',表示如果该文件不存在,则以写入方式创建它。
这里提前说下,什么是文件句柄,当用fopen函数操作相关文件时,即会返回一个文件句柄。
这里将文件句柄保存到$ ourFileHandle变量中,有关文件句柄的更多内容,在以后的文章中会详细介绍。
fclose($ourFileHandle);
此句是关闭打开的文件。
fclose接收一个参数,即要被关闭的文件句柄。
php文件权限
除了以上fopen函数中的可写参数'w',或以后要讲到的'a'选项外。
在运行php的文件操作程序之前,还要检查是否已授予PHP文件将信息写入到硬盘驱动器的许可权限。
在linux系统中,设置权限使用chmod命令,使用chmod允许PHP文件写入到磁盘上,从而使其能够创建一个文件。
有关php文件操作的基础知识,就介绍这些吧,希望对大家有所帮助。
更多php文件操作的教程,请关注后续提供的文章。
PHP的命令echo输出文本到Web浏览器的一种手段。
纵观你的PHP的职业生涯中,您将使用echo命令比其他任何命令,都要经常的多。
所以,让我们给它一个坚实的认真仔细地阅读吧!
输出一个字符串
要输出一个字符串,就像我们在前面的课程中完成,使用PHP的echo。
您可以将其中一个字符串变量,或您可以使用引号,像我们这样的下面,创建一个字符串echo功能将输出。
代码:
<?php $myString = "Hello!"; echo $myString; echo "<h5>I 喜欢 PHP!</h5>"; ?>
结果:
Hello!
I 喜欢 PHP!
在上面的例子中,我们输出“Hello!”顺利。我们输出的文本被发送给用户的形式的网页,所以重要的是,我们使用适当的HTML语法!
我们在我们的第二个echo语句使用echo写一个有效的头5 HTML语句。要做到这一点,我们干脆把<H5>开头的字符串,并关闭它在结尾的字符串。仅仅因为你使用PHP使网页并不意味着你可以忘记HTML语法!
小心呼应引号!
可以输出HTML与PHP。但是,你必须要小心,当使用HTML代码或其他任何字符串,包括引号!echo使用引号来定义字符串的开头和结尾,所以你必须使用以下策略之一,如果你的字符串包含引号:
不要使用引号里面你的字符串
逃脱你的引号是用一个反斜杠在字符串中。只是为了逃避引号直接放置一个反斜杠前引号,即\“
引号里面的字符串使用单引号(撇号)。
请参阅下面的例子中,正确的和错误的使用回显示:
代码:
<?php // This won't work because of the quotes around specialH5! echo "<h5 >I love using PHP!</h5>"; // OK because we escaped the quotes! echo "<h5 specialH5\">I love using PHP!</h5>"; // OK because we used an apostrophe ' echo "<h5 >I love using PHP!</h5>"; ?>
如果你想输出一个字符串,其中包括引号,请使用单引号(')或逃脱的引号,它前面放置一个反斜杠(\“)。反斜杠告诉PHP您希望引号内使用,串并没有被用来结束echo的字符串。
呼应变量
赞同变量是很容易的。 PHP语言的开发投入一些额外的工作,使所有的变量几乎万无一失呼应的共同任务!无引号是必需的,,,即使变量不持有串。
下面是正确的格式呼应变量。
代码:
<?php $my_string = "Hello Bob. My name is: "; $my_number = 4; $my_letter = a; echo $my_string; echo $my_number; echo $my_letter; ?>
结果:
Hello Bob. My name is: 4a
呼应变量和文本字符串
您也可以将里面的双引号字符串变量(例如“字符串和变量”)。通过把一个变量里面的引号(“”),你是在告诉PHP,你想让它抓住该变量的字符串值,并用它在字符串。
来看下面的例子。
代码:
<?php $my_string = "Hello Bob. My name is: "; echo "$my_string Bobettta <br />"; echo "Hi, I'm Bob. Who are you? $my_string <br />"; echo "Hi, I'm Bob. Who are you? $my_string Bobetta"; ?>
结果:
Hello Bob. My name is: Bobetta
Hi, I'm Bob. Who are you? Hello Bob. My name is:
Hi, I'm Bob. Who are you? Hello Bob. My name is: Bobetta
通过将一个字符串变量里面,你可以保存自己一些时间,使你的代码更易于阅读,但它确实需要一些时间来适应。
记住要使用双引号,不会抢单引号的字符串值。单引号将只是输出变量名的字符串,喜欢)$ my_string),而不是(你好我的名字是鲍勃。:)。
PHP的echo - 不是一个函数
echo是不是一个功能,而是它是一个语言结构。当您使用函数在PHP中,他们有一个非常特别的形式,这是我们将要在后。
现在,只需知道echo是一种特殊的工具,你会来了解和热爱它的!
有关php中echo回显内容的这个命令,就介绍到这里了,希望对大家有所帮助。
在yii中可以很方便的使用memcache配置。
在main.php的components中加入cache配置:
array( 'components'=>array( 'cache'=>array( 'class'=>'CMemCache', 'servers'=>array( array( 'host'=>'server1', 'port'=>11211, 'weight'=>60, ), array( 'host'=>'server2', 'port'=>11211, 'weight'=>40, ), ), ), ), )
说明:
1)class指明所有缓存类,CMemCache即为memcache
2) 当要使用多个cache轮询时,可以给每个cache配权重(weight)。如果只有一个cache,不加这个配置就可以了。
二,使用
调用memcache的方法:
<?php $key = 'people'; $value = json_encode(array('name'=>'ball', 'age'=>'male')); $expire = 10; yii::app()->cache->set($key, $value, $expire); Yii::app()->cache->get($key); Yii::app()->cache->delete($key); ?>
更多api请参阅yii手册CMemCache部分。
三,问题
当你统一使用yii的扩展对memcache进行存取时,不会有什么问题。但现实中会有这么一种情况:你在使用yii开发后台,但前台的同学并未用yii,而是使用了原生的memcache api对数据进行操作。这时会遇到一些问题。
如上文二中的例子,如果使用原生的memcache api,Memcache::get,用people作key是取不到值的!
原因是,yii的set对key和value都做了处理。默认情况下,对key加前缀并做md5变换,对value进行serialize()。这就难怪使用Memcache::get('people')取不到值了。
解决:
简单的方法,可以通过配置,让yii的memcache扩展不进行额外的"小动作"。
<?php 'cache' => array( 'class' => 'system.caching.CMemCache', 'servers' => array( array('host' => '127.0.0.1', 'port' => 11211)), 'keyPrefix' => '', 'hashKey' => false, 'serializer' => false) ?>
其中:
keyPrefix:key的前缀,默认用CApplication::getId()方法生成。
hashKey:对key进行hash操作,默认md5
serializer:value的序列化方法,默认serialize
将这些都置空,扩展的行为就同原生Memcache一致了。
四,更多memcache方法调用
yii扩展中,只有memcache的最常用操作,并没有类似原生memcache的decrement和increment等操作。
不过可以使用扩展中的getMemCache方法获得原生memcache对像,然后就可以使用原生方法了。
<?php $mem = Yii::app()->cache->getMemCache(); $res = $mem->decrement($key); ?>
使用原生方法时,最好设置上文(三)中提到的配置,不然同时使用yii的扩展方法和memcache的原生方法会产生错误。