我想实时和自动地将我的本地主机(Windows)与我的远程服务器同步。所以当我修改,创建或删除一个文件时,这个工具应该自动更新远程服务器。这个应用必须保持两个服务器实时同步。请我真的需要你的帮助。我试过FTPbox,但它并不总是更新,我需要更好的。我正在研究Windows,但是如果存在一些在Linux上更好。通过ftp将我的本地主机与我的服务器同步
感谢
我想实时和自动地将我的本地主机(Windows)与我的远程服务器同步。所以当我修改,创建或删除一个文件时,这个工具应该自动更新远程服务器。这个应用必须保持两个服务器实时同步。请我真的需要你的帮助。我试过FTPbox,但它并不总是更新,我需要更好的。我正在研究Windows,但是如果存在一些在Linux上更好。通过ftp将我的本地主机与我的服务器同步
感谢
尝试Dropbox或Google Drive如果你并不需要太多的信息同步。
我假设你想同步数据库和文件。这是我的出路,我希望这会对某人有所帮助。
第一个代码是本地代码,另一个代码是远程代码。
//make sure you are connected to your local database
<?php
//function to check internet connection.
function is_connected() {
if($connected = fsockopen("www.example.com", 80)){
// website, port (try 80 or 443)
if ($connected){
$is_conn = true; //action when connected
fclose($connected);
}
return $is_conn;
} else {
$is_conn = false; //action in connection failure
}
}
//if connected to internet, do the following...
if(is_connected()== true){
echo "connected";
ini_set('max_execution_time', 3000);//increase this incase of slow internet
$table_name = TableName::find_all();
//whatever way you find an array
//of all your entries on this particular
//table that you want to sync with the remote table.
$file = 'to_upload_local.php'; //a local file to put table contents into
$current = serialize($table_name);//serialize the table contents (google).
file_put_contents($file, $current);//put the serialized contents to the file.
$remote_file = 'public_html/to_upload_remote.php';//this is the file that is on the remote server that you want to overwrite with the local file to upload.
$ftp_server = "ftp.yourwebsite.org";// your ftp address
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, "yourFTPUsername", "yourFTPPassword");
// turn passive mode on
ftp_pasv($conn_id, true);
// upload a file
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)){
echo "Upload Successful";
} else {
}
// close the connection
ftp_close($conn_id);
//this script called below is to update your remote database. Its in the next example
$call_script = file_get_contents('http://path_to_your_script');
} else {
//if not connected to internet,....
echo "offline";
}
?>
在线脚本应该做的工作,应该是这个样子(你在前面的代码的最后一行称为一个):
//make sure you're connected to remote database
<?php
//this function should compare num_rows of your two
//databases values (local remote) and return the
//difference. It's used with array_udiff function.
function compare_objects($obj_a, $obj_b) {
return $obj_a->id - $obj_b->id;
}
//this function should compare contents of your two
//databases values (local remote) and return the
//difference. It's used with array_udiff function.
function comparison($obj_a, $obj_b){
if ($obj_a==$obj_b){
return 0;
}else{
return -1;
}
}
$file = '../to_upload_remote.php';//the uploaded file
$current = file_get_contents($file);//load the file
$array = unserialize($current);//unserialize to get the object array
$remote_table_name = remote_table_name::find_all();//get what you have in
//remote database
//if a new value is added, create a new entry to database with new vals
if($try_new = array_udiff($array, $remote_table_name, 'compare_objects')){
foreach($try_new as $entry){
$remote_table_name = new remote_table_name();
$remote_table_name->value = $entry->value;
//depending on the number of your columns,
//add values to remote table that were not there before.
//you can use any other suitable method to do this.
if($remote_table_name->save()){
echo "the remote_table_name was saved successfully";
}
}
} else {
echo "same number of rows";
}
//if some values are changed, update them with new vals
if($try_change = array_udiff($array, $remote_table_name, 'comparison')){
foreach($try_change as $entry){
$remote_table_name = remote_table_name::find_by_id($entry->id);
$remote_table_name->value = $entry->value;
//depending on the number of your columns,
//update values to remote table.
//you can use any other suitable method to do this.
if($remote_table_name->save()){
echo "the remote_table_name was saved successfully";
}
}
} else {
echo "All values match";
}
?>
所以,任何时候,第一个代码它读取本地表,获取所有值并将它们放入本地文件,上传本地文件并替换远程文件夹中的一个,调用远程脚本来检查未序列化的本地表并将其与在线表进行比较,然后做必要的。
如果你会做自动同步,你也会自动部署错误......不确定关于Windows - 但你可以使用[* cron *](http://www.adminschoice.com/crontab-quick -reference)在linux中安排一些东西运行,比如每分钟。您可以将它与使用[* rsync *](http://rsync.samba.org/documentation.html)的shell脚本一起使用 – alfasin