วิธีการทำมีดังต่อไปนี้ครับ
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