DropFTPを配布。

ドップして一つのファイルを転送するソフトを作りました。
こんなのどうしているのかと疑問を持つ人もいると思いますが
業務上、こんなソフトが要るという会社などもいるのではないかと
思いで作りました。

ダウンロードはこちらから
https://zip358.com/tool/DropFTP.zip

ソースコードは下記になります。
※FTP部分はWinSCPのライブラリを使用しています。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WinSCP;

namespace dropFTP
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void upbtn_Click(object sender, EventArgs e)
        {

            String err = "";

            if (hostText.Text == "") {
                err += "ホスト名が設定されていません\n";
            }

            if (idText.Text == "")
            {
                err += "IDが設定されていません\n";
            }

            if (passText.Text == "")
            {
                err += "passが設定されていません\n";
            }

            if (remText.Text == "")
            {
                err += "アップロード場所が設定されていません\n";
            }

            if (uplab.Text == "")
            {
                err += "アップロードファイルが設定されていません\n";
            }

            var RadioGroup = groupFTP.Controls.OfType<RadioButton>().SingleOrDefault(rb => rb.Checked == true);
            if (RadioGroup == null) {
                err += "アップロード環境が設定されていません\n";
            }

            if (err != "")
            {
                MessageBox.Show(err);
            }
            else {
                if (RadioGroup.Text == "FTP") {
                    upFTP();
                }
                if (RadioGroup.Text == "SFTP")
                {
                    upSFTP();
                }

            }
        }

            private int upFTP() {
            try
            {
                // Setup session options
                SessionOptions sessionOptions = new SessionOptions
                {
                    Protocol = Protocol.Ftp,
                    HostName = hostText.Text,
                    UserName = idText.Text,
                    Password = passText.Text,
                    PortNumber =int.Parse(portText.Text)
                };

                using (Session session = new Session())
                {
                    // Connect
                    session.Open(sessionOptions);

                    // Upload files
                    TransferOptions transferOptions = new TransferOptions();
                    transferOptions.TransferMode = TransferMode.Binary;

                    TransferOperationResult transferResult;
                    if (remText.Text.EndsWith("/"))
                    {
                        transferResult = session.PutFiles(@uplab.Text, remText.Text, false, transferOptions);
                    }
                    else
                    {
                        transferResult = session.PutFiles(@uplab.Text, remText.Text + "/", false, transferOptions);
                    }
                    // Throw on any error
                    transferResult.Check();

                    // Print results
                    foreach (TransferEventArgs transfer in transferResult.Transfers)
                    {
                        MessageBox.Show("アップロードしました");
                    }
                }

                return 0;
            }
            catch (Exception e)
            {

                MessageBox.Show("Error: {0}" + e);
                return 1;
            }

        }
        private int upSFTP()
            {
                try
                {
                    // Setup session options
                    SessionOptions sessionOptions = new SessionOptions
                    {
                        Protocol = Protocol.Sftp,
                        HostName = hostText.Text,
                        UserName = idText.Text,
                        Password = passText.Text,
                        PortNumber = int.Parse(portText.Text),
                        GiveUpSecurityAndAcceptAnySshHostKey = true
                    };

                using (Session session = new Session())
                {
                    // Connect
                    session.Open(sessionOptions);

                    // Upload files
                    TransferOptions transferOptions = new TransferOptions();
                    transferOptions.TransferMode = TransferMode.Binary;

                    TransferOperationResult transferResult;
                    if (remText.Text.EndsWith("/")) { 
                        transferResult = session.PutFiles(@uplab.Text, remText.Text, false, transferOptions);
                    } else { 
                        transferResult = session.PutFiles(@uplab.Text, remText.Text + "/", false, transferOptions);
                    }
                        // Throw on any error
                        transferResult.Check();

                        // Print results
                        foreach (TransferEventArgs transfer in transferResult.Transfers)
                        {
                        MessageBox.Show("アップロードしました");
                        }
                    }

                    return 0;
                }
                catch (Exception e)
                {

                    MessageBox.Show("Error: {0}" + e);
                    return 1;
                }

            }

            private void Form1_DragDrop(object sender, DragEventArgs e) {
            //e.Effect = DragDropEffects.Copy;
            string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            uplab.Text = fileName[0];

        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy;
        }

        private void radioSFTP_CheckedChanged(object sender, EventArgs e)
        {
            portText.Text = "22";
        }

        private void radioFTP_CheckedChanged(object sender, EventArgs e)
        {
            portText.Text = "21";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            this.MaximumSize = this.Size;
            this.MinimumSize = this.Size;
        }
    }


}

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法。

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法
10年ぐらいまえのコードを見直して改善したコードが下記になります。
10年前はクラスを使わない方法で構築したのだけど、今回はクラスの概念を
使って構築。ここ何年かで自分のコーディングの技術は上がっているかといえば
そうでもないですが、昔よりかは技術の幅は広がっていると思いたいw
※qiita日付は数年前にUPしたのですけど、コード自体は10年前のコードです。

 

<?php
//五分置きのクロンを走らせてください。
//php5.6以上推奨? エラーの場合:explodeを見直してください 
class cronphp2{
    
    public $set = array(
            array("file"=>"/home/tool/test1.php","year"=>"*","month"=>"*","day"=>"*","hour"=>"*","minute"=>"*"),
            array("file"=>"/home/tool/test2.php","year"=>"2018","month"=>"7","day"=>"7","hour"=>"*","minute"=>"*/10"),
            array("file"=>"/home/tool/test3.php","year"=>"*","month"=>"*","day"=>"7","hour"=>"7","minute"=>"7")
        );
    
    
    function __construct(){
        if(is_array($this->set)){
            foreach ($this->set as $key => $value) {
  
                    if(!$this->chk($value["year"],"year"))continue;
                    if(!$this->chk($value["month"],"month"))continue;
                    if(!$this->chk($value["day"],"day"))continue;
                    if(!$this->chk($value["hour"],"hour"))continue;
                    if(!$this->chk($value["minute"],"minute"))continue;
                    if(!$value["file"])continue;       
                    $h = @shell_exec("/usr/local/bin/php -f ",$value["file"]);
                    print $value["file"];
                    var_dump($h);
                
            }
        }
    } 
    
    function chk($q1="",$q2=""){

        if(!$q1)return false;
        if(!$q2)return false;
        switch ($q2) {
            case "year":
            case "month":                
            case "day":   
                $ren = array("year"=>"Y","month"=>"n","day"=>"j");
                if($q1==="*"){return true;}
                if(is_numeric($q1)){
                    if((int)$q1 == date($ren[$q2])){return true;}
                }else{
                    return false;
                }
                break;
           case "hour":
           case "minute":
                $ren = array("hour"=>"H","minute"=>"i");
                if($q1==="*"){return true;}
                if(is_numeric($q1)){
                    if((int)$q1 == date($ren[$q2])){
                        return true;
                    }else{
                        return false;
                    }
                }else{
                    if(preg_match("/\*\//",$q1)){
                        $q = explode("*/",$q1)[1];
                        if(date($ren[$q2])%(int)$q==0){
                            return true;
                        }else{
                            return false;
                        }                       
                    }
                    return false;
                }
                break;
            default:
                return false;
                break;
        }
        
        return false;
     }
}
$crn = new cronphp2();