PHP递归复制文件夹的类

 更新时间:2016年11月25日 17:17  点击:1669
复制文件夹是相当的复杂的一个过程了,我们需要先判断类型是文件还是目录,然后查找目录中是否还有目录了,下面我们来看一个关于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');
?>

今天我们一起来看一篇关于Magento新建组件控制器不生效或 404问题的解决办法,希望碰到此类问题的同学可以和小编一起来看看吧,具体的操作细节如下所示。

检查链接是否有错误

链接错误通常有两个可能,一个是拼写错误;另一个是后台开启了将 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

本文章来为各位介绍一篇关于ZBLOG PHP调用随机文章、热门文章、热评文章的例子,希望这篇教程能够为各位同学带来帮助的哦.
使用方法:

 

第一、在我们的主题目录中需要创建include.php文件,如果有就直接添加脚本

 

 代码如下 复制代码

/**
* 获取文章列表
* @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;

}

 

然后就是在我们需要的界面模板中调用。

 

A - 随机文章

 

 代码如下 复制代码

{$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>

 

随机10篇文章

 

B - 热门文章

 

 代码如下 复制代码

{$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>

 

调用10篇热门文章

 

C - 热评文章

 

 代码如下 复制代码

{$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>

 

调用10篇热评文章。

 

具体的根据我们实际使用调用就可以。
PHP提交MYSQL数据库中文内容乱码问题其实与查询乱码是一样的我们只需要把它进行一个简单的调整即可了,在数据库连接处填写mysql_query("set names 'utf8'");即可解决了.
无论是ASP还是PHP程序语言,甚至有其他WEB语言,基础的应用无非就是数据库添加、读取、编辑、删除等需求,再复杂的功能项目都围绕这些进行的。在录入MYSQL数据库的时候提交的中文数据出现乱码问题,这个问题对于新手学习PHP肯定是有遇到过的。

 

其实问题还是比较简单的,肯定是编码不对应导致的。比如页面的编码,数据库字段的编码,以及数据库链接编码问题,这里老蒋全部采用UTF-8编码,那需要寻找这几个地方的问题,就解决乱码问题。

 

第一、页面编码问题

 

我们在WEB页面中,需要全部保持是UTF-8编码。

 

第二、创建数据库的时候编码问题

 

在"PHP创建MYSQL数据库与数据表常用命令和数据类型设定"文章中,老蒋采用的是SQL直接导入的方式,我们在添加数据库字段的时候,如果我们是需要全部保持UTF-8编码的时候,我们需要在最后"CHARSET=utf8",这里保持数据库字段的UTF8。

 

第三、数据库链接的编码问题

 

在数据库链接文件处,我们需要设置:

 

mysql_query("set names 'utf8'");

 

同样的是UTF8编码设置。

 

这样,通过3处的统一编码,我们在提交数据之后,乱码问题肯定是可以解决的。

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;
    }
?>

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与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写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?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常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31