我已将我的所有代码文件托管在一个服务器上,该服务器的域名为example.com
,我就是其中一个html页面。我希望example.com的一些文件在另一台域名为example2.com
的服务器上移动。我通过互联网搜索,但我找不到任何好的解决方案。请告诉我,如果没有FTP客户端或没有我们手动上传文件的浏览器,这是可能的。或者是否有任何方法可以将HTML表单中的文件从一个服务器提交到另一个服务器,就像我们要写的那样
<form action="http://example2.com/action_page.php">
非常感谢任何帮助。
答案 0 :(得分:2)
还有两种方法可用于从其他服务器复制文件。
- 一个是从example.com中删除.htaccess文件或允许访问所有文件(通过修改.htaccess文件)。 - 通过各自的URL访问/读取这些文件,并使用&#39; file_get_contents()&#39;保存这些文件。和&#39; file_put_contents()&#39;方法。但是这种方法也会使其他人也可以访问所有文件。
$fileName = 'filename.extension';
$sourceFile = 'http://example.com/path-to-source-folder/' . $fileName;
$targetLocation = dirname( __FILE__ ) . 'relative-path-destination-folder/' + $fileName;
saveFileByUrl($sourceFile, $targetLocation);
function saveFileByUrl ( $source, $destination ) {
if (function_exists('curl_version')) {
$curl = curl_init($fileName);
$fp = fopen($destination, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
} else {
file_put_contents($destination, file_get_contents($source));
}
}
或者您可以在example.com上创建代理/服务,以在验证密码或用户名/密码组合后(根据您的要求)读取特定文件。
//In myproxy.php
extract($_REQUEST);
if (!empty($passkey) && paskey == 'my-secret-key') {
if (!empty($file) && file_exists($file)) {
if (ob_get_length()) {
ob_end_clean();
}
header("Pragma: public");
header( "Expires: 0");
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0");
header( 'Content-Type: ' . mime_content_type($file) );
header( "Content-Description: File Transfer");
header( 'Content-Disposition: attachment; filename="' . basename( $file ) . '"' );
header( "Content-Transfer-Encoding: binary" );
header( 'Accept-Ranges: bytes' );
header( "Content-Length: " . filesize( $file ) );
readfile( $file );
exit;
} else {
// File not found
}
} else {
// You are not authorised to access this file.
}
您可以通过网址&#39; http://example.com/myproxy.php?file=filename.extension&passkey=my-secret-key&#39;来访问该代理/服务。
答案 1 :(得分:1)
如果您将此文件的内容设置为:example2.com/action_page.php:
<?php
$tobecopied = 'http://www.example.com/index.html';
$target = $_SERVER['DOCUMENT_ROOT'] . '/contentsofexample/index.html';
if (copy($tobecopied, $target)) {
//File copied successfully
}else{
//File could not be copied
}
?>
并通过命令行或cron 运行它(因为你已经编写了一个与php相关的问题,但是禁止使用浏览器!)它应该将example.com/index.html的内容复制到您的站点目录(domain:example2.com),名为contentsofexample。
N.B。如果你想复制整个网站,你应该把它放在for循环中
答案 2 :(得分:0)
也可以使用zip方法在服务器之间交换文件。 您拥有两个服务器,因此不会出现安全问题。
在承载所需文件或文件夹的服务器上,创建一个php脚本并为其创建cron作业。下面的示例代码:
<?php
/**
* ZIP All content of current folder
/* ZIP File name and path */
$zip_file = 'myfiles.zip';
/* Exclude Files */
$exclude_files = array();
$exclude_files[] = realpath( $zip_file );
$exclude_files[] = realpath( 'somerandomzip.php' );
/* Path of current folder, need empty or null param for current folder */
$root_path = realpath( '' ); //or $root_path = realpath( 'folder_name' ); if the file(s) are in a particular folder residing in the root
/* Initialize archive object */
$zip = new ZipArchive;
$zip_open = $zip->open( $zip_file, ZipArchive::CREATE );
/* Create recursive files list */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator( $root_path ),
RecursiveIteratorIterator::LEAVES_ONLY
);
/* For each files, get each path and add it in zip */
if( !empty( $files ) ){
foreach( $files as $name => $file ) {
/* get path of the file */
$file_path = $file->getRealPath();
/* only if it's a file and not directory, and not excluded. */
if( !is_dir( $file_path ) && !in_array( $file_path, $exclude_files ) ){
/* get relative path */
$file_relative_path = str_replace( $root_path, '', $file_path );
/* Add file to zip archive */
$zip_addfile = $zip->addFile( $file_path, $file_relative_path );
}
}
}
/* Create ZIP after closing the object. */
$zip_close = $zip->close();
?>
在服务器上创建另一个php脚本和cron作业以接收副本,如下所示:
/**
* Transfer Files Server to Server using PHP Copy
*
*/ /* Source File URL */
$remote_file_url = 'url_of_the_zipped';
/* New file name and path for this file */
$local_file ='myfiles.zip';
/* Copy the file from source url to server */
$copy = copy($remote_file_url, $local_file );
/* Add notice for success/failure */
if( !$copy ) {
echo "Failed to copy $file...\n"; }
else{
echo "Copied $file successfully...\n"; }
$file = 'myfiles.zip';
$path = pathinfo( realpath( $file ), PATHINFO_DIRNAME );
$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
$zip->extractTo( $path );
$zip->close();
echo "$file extracted to $path"; }
else {
echo "Couldn't open $file";
}
?>
Voila!
答案 3 :(得分:-1)
<?php
/* Source File URL */
$remote_file_url = 'http://origin-server-url/files.zip';
/* New file name and path for this new file */
$local_file = 'files.zip';
/* Copy the file from source url to server */
$copy = copy( $remote_file_url, $local_file );
/* Add notice for success/failure */
if( !$copy ) {
echo "Doh! failed to copy $file...\n";
}
else{
echo "WOOT! Thanks Munshi and OBOYOB! success to copy $file...\n";
}
?>