PHP递归复制文件夹的类
<?php
/*
* 文件夹复制类,
* 吴钧泽 2015年11月2日16点29分
*/
class CopyFile
{
public $fromFile;
public $toFile;
/*
* $fromFile 要复制谁
* $toFile 复制到那
*/
function copyFile($fromFile,$toFile){
$this->CreateFolder($toFile);
$folder1=opendir($fromFile);
while($f1=readdir($folder1)){
if($f1!="." && $f1!=".."){
$path2="{$fromFile}/{$f1}";
if(is_file($path2)){
$file = $path2;
$newfile = "{$toFile}/{$f1}";
copy($file, $newfile);
}elseif(is_dir($path2)){
$toFiles = $toFile.'/'.$f1;
$this->copyFile($path2,$toFiles);
}
}
}
}
/*
* 递归创建文件夹
*/
function CreateFolder($dir, $mode = 0777){
if (is_dir($dir) || @mkdir($dir,$mode)){
return true;
}
if (!$this->CreateFolder(dirname($dir),$mode)){
return false;
}
return @mkdir($dir, $mode);
}
}
//使用方法
//引入本类,直接new copyFile('要复制谁','复制到那');
//$file = new CopyFile('./10010','./10010copy');
?>
检查链接是否有错误
链接错误通常有两个可能,一个是拼写错误;另一个是后台开启了将 store view code 加在链接里,但测试的时候没有写到地址栏 – -
检查组件是否已打开
有的时候因为某些原因组件没有被开启,这样相关的控制器自然不可用了。可以到后台 System / Configuration > ADVANCED / Advanced 查找组件是否存在于列表中。
如果组件确实没有打开,一般都是配置文件或者程序的拼写问题导致的。特别是那种本地可用但放到服务器上出问题的,百分之七十都是因为大小写不正确 – -
检查组件的 config.xml 配置文件
以原生产品组件为例,前台控制器的配置方式如下:
<config>
...
<frontend>
<routers>
<catalog>
<use>standard</use>
<args>
<module>Mage_Catalog</module>
<frontName>catalog</frontName>
</args>
</catalog>
</routers>
</frontend>
...
</config>
如果需要重写这个控制器,可以这样配置:
<config>
...
<frontend>
<routers>
<catalog>
<args>
<modules>
<Infinity_Catalog before="Mage_Catalog">Infinity_Catalog</Infinity_Catalog>
</modules>
</args>
</catalog>
</routers>
</frontend>
...
</config>
检查组件及控制器的文件名、类名、方法名
Magento 的组件目录有两个控制器相关的文件夹,一个是 Controller,另一个是 controllers。前者一般是用来定义路由方法的,似乎比较少用到;后者才是控制器安放的地方。与其他常用部件(Block、Helper、Model)不同,控制器文件夹的首字母是小写,且末尾有个 s(很想吐槽做架构那位是暗恋小s么,好吧我知道你 “小” 是因为重写方法跟 “大” 的不一样,“s” 是用来跟 Controller 作区分)。
控制器的文件名是
[控制器名(首字母大写)]Controller.php
比如原生产品前台控制器文件名为 ProductController.php。也是跟其他常用部件(Block、Helper、Model)不一样,后边带了个 Controller。
控制器的类名是
[命名空间(首字母大写)]_[组件名(首字母大写)]_[控制器名(首字母大写)]Controller
比如原生产品前台控制器类名为 Mage_Catalog_ProductController。还是跟其他常用部件(Block、Helper、Model)不一样,把 “Controller” 这个特征名词放到了类名末尾,而不是 [组件名] 之后。
行为的方法名是
[行为(首字母小写)]Action
且该方法必须是 public 的,一般不带参。比如原生前台产品详细页方法名这样定义的:public function viewAction()。
通过插入代码检查
一般来说通过以上几步就可以解决问题了,如果还是不行的话就要到以下两个方法中插入 log 代码,检查相关的模块、控制器、行为是否出了什么问题。
Mage_Core_Controller_Varien_Router_Standard::match
Mage_Core_Controller_Varien_Front::dispatch
代码如下 | 复制代码 |
/**
* 获取文章列表 * @param int $count 数量 * @param null $cate 分类ID * @param null $auth 用户ID * @param null $date 日期 * @param null $tags 标签 * @param null $search 搜索关键词 * @param null $order 排序 * @param null $option * @return array|mixed */ function TcgetList($count = 10, $cate = null, $auth = null, $date = null, $tags = null, $search = null, $option = null,$order=null) { global $zbp; if (!is_array($option)) {
$option = array(); } if (!isset($option['only_ontop']))
$option['only_ontop'] = false; if (!isset($option['only_not_ontop'])) $option['only_not_ontop'] = false; if (!isset($option['has_subcate'])) $option['has_subcate'] = false; if (!isset($option['is_related'])) $option['is_related'] = false; if ($option['is_related']) {
$at = $zbp->GetPostByID($option['is_related']); $tags = $at->Tags; if (!$tags) return array(); $count = $count + 1; } if ($option['only_ontop'] == true) {
$w[] = array('=', 'log_IsTop', 0); } elseif ($option['only_not_ontop'] == true) { $w[] = array('=', 'log_IsTop', 1); } $w = array();
$w[] = array('=', 'log_Status', 0); $articles = array();
if (!is_null($cate)) {
$category = new Category; $category = $zbp->GetCategoryByID($cate); if ($category->ID > 0) {
if (!$option['has_subcate']) {
$w[] = array('=', 'log_CateID', $category->ID); } else { $arysubcate = array(); $arysubcate[] = array('log_CateID', $category->ID); foreach ($zbp->categorys[$category->ID]->SubCategorys as $subcate) { $arysubcate[] = array('log_CateID', $subcate->ID); } $w[] = array('array', $arysubcate); }
}
} if (!is_null($auth)) {
$author = new Member; $author = $zbp->GetMemberByID($auth); if ($author->ID > 0) {
$w[] = array('=', 'log_AuthorID', $author->ID); } } if (!is_null($date)) {
$datetime = strtotime($date); if ($datetime) { $datetitle = str_replace(array('%y%', '%m%'), array(date('Y', $datetime), date('n', $datetime)), $zbp->lang['msg']['year_month']); $w[] = array('BETWEEN', 'log_PostTime', $datetime, strtotime('+1 month', $datetime)); } } if (!is_null($tags)) {
$tag = new Tag; if (is_array($tags)) { $ta = array(); foreach ($tags as $t) { $ta[] = array('log_Tag', '%{' . $t->ID . '}%'); } $w[] = array('array_like', $ta); unset($ta); } else { if (is_int($tags)) { $tag = $zbp->GetTagByID($tags); } else { $tag = $zbp->GetTagByAliasOrName($tags); } if ($tag->ID > 0) { $w[] = array('LIKE', 'log_Tag', '%{' . $tag->ID . '}%'); } } } if (is_string($search)) {
$search=trim($search); if ($search!=='') { $w[] = array('search', 'log_Content', 'log_Intro', 'log_Title', $search); } } if(!empty($order)){
if($order=='new'){ $order = array('log_PostTime'=>'DESC'); } if($order=='hot'){ $order = array('log_ViewNums'=>'DESC'); } if($order=='comm'){ $order = array('log_CommNums'=>'DESC'); } if($order=='rand'){ $order = array('rand()'=>' '); } } $articles = $zbp->GetArticleList('*', $w, $order, $count, null, false);
if ($option['is_related']) {
foreach ($articles as $k => $a) { if ($a->ID == $option['is_related']) unset($articles[$k]); } if (count($articles) == $count){ array_pop($articles); } } return $articles;
}
|
代码如下 | 复制代码 |
{$array=TcgetList(10,null,null,null,null,null,null,'rand');}
<ul id="related"> {foreach $array as $related} <li><span class="time">{$related.Time('m-d')}</span><span class="title"><a href="{$related.Url}" title="{$related.Title}">{$related.Title}</a></span></li> {/foreach} </ul> |
代码如下 | 复制代码 |
{$array=TcgetList(10,null,null,null,null,null,null,'hot');}
<ul id="related"> {foreach $array as $related} <li><span class="time">{$related.Time('m-d')}</span><span class="title"><a href="{$related.Url}" title="{$related.Title}">{$related.Title}</a></span></li> {/foreach} </ul> |
代码如下 | 复制代码 |
{$array=TcgetList(10,null,null,null,null,null,null,'comm';}
<ul id="related"> {foreach $array as $related} <li><span class="time">{$related.Time('m-d')}</span><span class="title"><a href="{$related.Url}" title="{$related.Title}">{$related.Title}</a></span></li> {/foreach} </ul> |
s
图片添加水印我相信各位朋友都知道的,今天我们来看一段php的图片添加水印例子,希望文章能够帮助到各位朋友.<?php
/**
* 图片添加水印
* $target 源文件路径
* $wtrmrk_file 水印图片路径
* $newcopy 添加水印后的图片路径
*
*/
public function watermark_image($target, $wtrmrk_file, $newcopy) {
$watermark = imagecreatefrompng($wtrmrk_file);
imagealphablending($watermark, false);
imagesavealpha($watermark, true);
$img = imagecreatefromjpeg($target);
$img_w = imagesx($img);
$img_h = imagesy($img);
$wtrmrk_w = imagesx($watermark);
$wtrmrk_h = imagesy($watermark);
$dst_x = ($img_w ) – ($wtrmrk_w); // For centering the watermark on any image
$dst_y = ($img_h) – ($wtrmrk_h ); // For centering the watermark on any image
imagecopy($img, $watermark, $dst_x, $dst_y, 0, 0, $wtrmrk_w, $wtrmrk_h);
imagejpeg($img, $newcopy, 100);
imagedestroy($img);
imagedestroy($watermark);
//return $img;
}
?>
相关文章
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
Jupyter Notebook读取csv文件出现的问题及解决
这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06- php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
- 有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
- 又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- 今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
ant design中upload组件上传大文件,显示进度条进度的实例
这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29- 这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
- 这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31