สคริปต์อัพโหลดไฟล์บันทึกเสียงไปเก็บใน FTP Server ครับ

Your Open Source Solution For Unified Comunnications And More…

สคริปต์อัพโหลดไฟล์บันทึกเสียงไปเก็บใน FTP Server ครับ

โพสต์โดย nuiz » 24 ก.พ. 2021 09:45

สคริปต์นี้จะอัพโหลดไฟล์บันทึกเสียงในไดเร็คตอรี่ /var/spool/asterisk/monitor บนเครื่อง Issabel/FreePBX/Elastix ไปเก็บไว้ใน FTP Server ครับ เขียนด้วย php เวลาอัพโหลดไปจะสร้างโฟลเดอร์บน FTP server แยกเป็นปี เดือน วันที่ เหมือนอย่างในเครื่อง Issabel/FreePBX/Elastix เลยครับ สคริปต์จะสร้างให้ เราไม่ต้องสร้างเอง

วิธีการทำมีดังต่อไปนี้ครับ

1. ติดตั้ง FTP Server จะบน Windows หรือ Linux ก็ได้
- ติดตั้ง FileZilla FTP Server บน Windows
- ติดตั้ง FTP Server บน CentOS
แล้วอย่าลืมทดสอบด้วยนะครับว่าสามารถเชื่อมต่อ FTP server ได้ อัพโหลดไฟล์ไปเก็บไว้ได้ สร้างโฟลเดอร์ใหม่ได้

2. สร้างไฟล์สคริปต์นี้
สร้างเป็นชื่ออะไรก็ได้ เช่น ftpupload นามสกุลอะไรก็ได้ เช่น .php สร้างไว้ในไดเร็คตอรี่ไหนก็ได้บนเครื่อง Issabel/FreePBX/Elastix เช่น /var/lib/asterisk/agi-bin อย่าลืมแก้ไขบรรทัด $ftphost $ftpport $ftpuser $ftppass ตามจริง

โค้ด: เลือกทั้งหมด
#!/usr/bin/php -q
<?php

if(!isset($argv[1])) {
   $remote_dir=date('Y/m/d').'/';
} else {
   $remote_dir=$argv[1].'/';
}

$ftptimeout='90';
$ftpport='21';
$ftphost='192.168.100.100';
$ftpuser='demo';
$ftppass='demo';

$sounds_dir='/var/spool/asterisk/monitor/';
$local_dir=$sounds_dir.$remote_dir;

if(!is_dir($local_dir)){
    echo "Directory $local_dir does not exist.\n";
    exit;
}

chdir($local_dir);

$conn_id=ftp_connect($ftphost,$ftpport,$ftptimeout) or die("Could not connect to $host");
$login_result=ftp_login($conn_id,$ftpuser,$ftppass);

if(!ftp_chdir($conn_id,$remote_dir)){
   echo "Create $remote_dir on FTP server.\n";
   ftp_mkdir($conn_id,$remote_dir);
   ftp_chdir($conn_id,$remote_dir);
}

$i=0;
$files = array_diff(scandir($local_dir), array('.', '..'));
foreach($files as $file) {
  //check if filename exist on remote, then copy file.
   $remote_file=$file;
   //check if file already exist on ftp server
   $res=ftp_size($conn_id,$remote_file);
   
   if($res != -1){
     //echo "File $remote_file size $res\n";
     //echo "No new file.\n";
   } else {
     echo "File: $remote_file\n";
     ftp_put($conn_id,'$remote_file',$file,FTP_BINARY);
     $i++;
   }
}

echo "Directory $remote_dir Total $i files copied.\n";
ftp_close($conn_id);
?>


3. ทำให้ไฟล์ execute ได้
โค้ด: เลือกทั้งหมด
chmod 755 /var/lib/asterisk/agi-bin/ftpupload.php


4. ทดสอบอัพโหลดไฟล์เสียง
เวลารันสคริปต์นี้ รันได้ 2 แบบครับ คือ
- แบบไม่ระบุวันที่ คือพิมพ์ชื่อไฟล์เฉยๆ เช่น /var/lib/asterisk/agi-bin/ftpupload.php สคริปต์จะใช้วันปัจจุบัน
- แบบระบุวันที่ คือพิมพ์ชื่อไฟล์ ตามด้วยวันที่ เช่น /var/lib/asterisk/agi-bin/ftpupload.php 2021/02/23 จะอัพโหลดไฟล์เสียงของวันที่ 23/02/2021 ครับ ให้ระบุปี ค.ศ. 4 หลัก เดือน 2 หลัก วันที่ 2 หลัก ไม่งั้นสคริปต์จะหาไดเร็คตอรี่บน Issabel/FreePBX/Elastix ไม่เจอนะครับ

5. ให้รันสคริปต์นี้อัตโนมัติจาก crontab
อยากให้รันสคริปต์ตอนกี่โมง วันไหน หรือวันที่เท่าไหร่ ก็ตั้งได้เลยครับ ผมให้รันทุก 1 นาที ตลอด 24 ชั่วโมง
โค้ด: เลือกทั้งหมด
* * * * * /usr/bin/php /var/lib/asterisk/agi-bin/ftpupload.php
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

ย้อนกลับไปยัง Issabel - Open Source Solution For Unified Comunnications

ผู้ใช้งานขณะนี้

่กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 1 ท่าน

cron