php 监控文件变化 并上传到服务器

最近有个思路。想要监控本地文件变化 并上传到指定服务器。

刚开始有这个想法的时候找了很多资料。关于 windows 和linux 上怎么监控文件变化的

最后选择了 比较MD5值的方法。

我也写了一段 但是也大同小异。 于是 其中借用了别人的代码

他的github 是 https://github.com/tansuo1989/mydemo/blob/master/php-demo/file_watch.php

话不多说 上代码

<?php
/**
 * Created by PhpStorm.
 * User: eddie
 * Date: 2018/3/5
 * Time: 10:37
 */

class FileWatch
{

    protected $all = array();

    public function __construct($dir)
    {
        $this->watch($dir);
    }

    //子类中重写这个方法
    public function run($file)
    {
    }

    protected function all_file($dir)
    {
        if (is_file($dir)) {
            $this->all[$dir] = md5_file($dir);
            return $this->all;
        }
        if (is_dir($dir)) {
            $open = opendir($dir);
            while (($file = readdir($open)) !== false) {
                if ($file != "." && $file != "..") {
                    $f = $dir . "/" . $file;
                    if (is_file($f)) {
                        $this->all[$f] = md5_file($f);
                    } elseif (is_dir($f)) {
                        $this->all_file($f);
                    }

                }
            }
        }
        return $this->all;
    }

    public function watch($dir)
    {
        $this->all = array();
        $old = $this->all_file($dir);
        while (true) {
            sleep(2);
            $this->all = array();
            $new = $this->all_file($dir);
            $re = array_diff($new, $old);
            $del = array_diff_key($old, $new);
            $re = array_merge($re, $del);
            if ($re) {
                $this->all = array();
                $old = $this->all_file($dir);
                $file = array_keys($re);
                $this->run($file[0]);
            }
        }
    }
}//endclass
//使用方法
class mywatch extends FileWatch
{
    public function run($file)
    {
        if(!empty($file)) {
            echo "new file or file has been changed with ".$file.PHP_EOL;
            echo "please choose 1 or 0 to upload files or skip ".PHP_EOL;
            $fileName = explode(‘/‘, $file);

            while (true) {
                $a = trim(fgets(STDIN));
                if(ctype_digit($a)) {
                    echo $a.PHP_EOL;
                    if($a == 1) {
                        //上传文件
                        echo "you choose upload files ".PHP_EOL;
                        // 判断系统
                        switch (PHP_OS) {
                            //linux 需要用scp 命令
                            case ‘Linux‘:
                                exec(‘scp ‘.$file.‘ [email protected]:/home/‘.$file);
                                break;
                            case ‘WINNT‘:
                                exec(‘PSCP.exe ‘.$file.‘ [email protected]:/home/‘.end($fileName));
                                break;
                        }
                        break;
                    } else {
                        //不管 跳过
                        echo "you choose skip ".PHP_EOL;
                        break;
                    }
                } else {
                    echo ‘please enter 0 or 1‘.PHP_EOL;
                }
            }
        } else {
            echo "no files has created and no files has been changed".PHP_EOL;
        }
    }
}
echo ‘Your System is ‘.PHP_OS.PHP_EOL;
echo "Welcome to use fileWatch System".PHP_EOL;
$watch = new mywatch("./");

  这段代码 在linux 上运行是没有报错 但是在windows 上运行 出错了 还在找原因。

原文地址:https://www.cnblogs.com/eddief/p/8508316.html

时间: 2024-09-29 17:54:54

php 监控文件变化 并上传到服务器的相关文章

JAVA基础知识之InputStreamReader流 和 将本地文件通过前端上传到服务器上

将本地文件通过前端上传到服务器上 public BaseResponseSwagger resolveFile(@Valid @ApiParam(value = "file")@RequestParam(name = "file",required = true) MultipartFile file){ if(file.isEmpty()){ throw new SoftwareException(ComStatusCodeEnum.COM_PARAM_VALID

.net 文件上传到服务器【转】

最忌你在一个文档管理系统,包裹文件上传下载等. http://blog.csdn.net/pmy_c_l/article/details/73743843 官方链接:https://msdn.microsoft.com/zh-cn/library/system.io.filestream.read.aspx /// <summary> /// 读取本地文件上传到服务器 /// </summary> /// <param name="localfilepath&quo

Linux 文件上传Linux服务器

进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示出文本和基本的图形输出.众所周知,如今的Linux环境已经发生了巨大变化,所有的Linux发行版都配备了某种类型的图形化桌面环境.但是,如果向输入shell命令,仍然需要使用文本显示来访问shell的CLI. Linux发行版通常使用Ctrl+Alt组合键配合F1或F7来进入图形界面.Ubuntu使

WEB版一次选择多个文件进行批量上传(Plupload)的解决方案

WEB版一次选择多个文件进行批量上传(Plupload)的解决方案 转载自http://www.cnblogs.com/chillsrc/archive/2013/01/30/2883648.html 说明:Plupload支持多种浏览器,多种上传方式! 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如 windows程序一样,一次选择多个文件进行批量上传.这样在某些应用上就显得很不人性化,有时候客户希

Android文件上传至服务器

项目演示及讲解 优酷  http://v.youku.com/v_show/id_XODk5NjkwOTg4.html 爱奇艺  http://www.iqiyi.com/w_19rs1v2m15.html#vfrm=8-7-0-1 土豆  http://www.tudou.com/programs/view/fv0H93IHfhM 项目下载 1.手机端选择文件上传至服务器端 http://download.csdn.net/detail/u010134178/8457679 2.手机端拍照上传

MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件02-多文件上传

上一篇中,使用客户端jJSAjaxFileUploader插件实现单文件异步上传,本篇实现多文件异步上传. 本篇源码在github,先看效果: ● 上传文件显示进度条. ● 停止上传按钮和关闭缩略图按钮. ● 限制上传文件的类型. ● 限制上传文件的尺寸. ●同时上传多个文件成功后显示缩略图.文件名: ● 点击界面上的删除按钮,界面删除,同步删除文件夹中文件. ● 再点击上传文件,界面追加一行新的缩略图.文件名.删除按钮: □ HomeController 把上传的文件名改成以GUID命名的格式

C#文件上传到服务器——转载至wcj1984abc

C# 上传文件 webconfig 配置 <!--文件上传类型-->  <add key="FileType" value=".doc,.xls,.txt,.rar"/>  <add key="PicTureTye" value=".jpg|.gif|.png|.bmp|.psd|.svg|"/>  <!--上传文件大小-->  <add key="FileSiz

Myeclipse中文件已经上传到服务器目录下,文件也没有被占用,但是页面中无法读取和使用问题的解决方法

这个问题是由于Myeclipse中文件不同步引起的.在Myeclipse中,工程文件是由Myeclipse自动扫描添加的,如果在外部修改了工程目录中的文件但又关闭了自动刷新功能,则会引起文件不同步.此外,在外部没有修改Myeclipse工程中的文件也有可能引起该问题. 解决方法: 有两种解决方法: 1)手动刷新.即在Myeclipse的工程目录中,右键refresh(或者按下F5). 2)配置Myeclipse的选项: a)Myeclipse启动时,刷新workspace,即勾选:window-

java文件上传到服务器

最近项目中使用到了文件从本地到服务器的功能.其实是为了解决目前浏览器不支持获取本地文件全路径.不得已而想到上传到服务器的固定目录,从而方便项目获取文件,进而使程序支持EXCEL批量导入数据. 在前台界面中 <form method="post" enctype="multipart/form-data" action="../manage/excelImport.do"> 请选文件:<input type="file&