Lea*_*ner 7 post curl file-upload
我正在服务器上开发一个网站,存储在另一个服务器上,我不得不以某种方式处理它.我亲身经历这种情况,我发现解决方案是使用卷曲.
请向我解释如何从零开始详细使用Curl.
更新:
我使用以下代码来测试是否已安装并启用了cURL:
<?PHP
phpinfo();
$toCheckURL = "http://board/accSystem/webroot/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $toCheckURL);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
$data = curl_exec($ch);
curl_close($ch);
preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches);
$code = end($matches[1]);
if(!$data) {
echo "Domain could not be found";
} else {
switch($code) {
case '200':
echo "Page Found";
break;
case '401':
echo "Unauthorized";
break;
case '403':
echo "Forbidden";
break;
case '404':
echo "Page Not Found";
break;
case '500':
echo "Internal Server Error";
break;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我收到了(Page found)消息
现在我可以毫无顾虑地使用cURL吧?
注意:两台服务器都是本地的
Sha*_*han 20
作为PHP开发人员,您可能已经熟悉PHP最方便的文件系统函数fopen.该函数打开一个文件流并返回一个资源,然后可以将该资源传递给fread或fwrite来读取或写入数据.有些人没有意识到文件资源不一定必须指向本地机器上的位置.
这是一个将文件从本地服务器传输到ftp服务器的示例:
$file = "filename.jpg";
$dest = fopen("ftp://username:password@example.com/" . $file, "wb");
$src = file_get_contents($file);
fwrite($dest, $src, strlen($src));
fclose($dest);
Run Code Online (Sandbox Code Playgroud)
支持的不同协议列表可以在PHP手册的附录M中找到.您可能希望使用一种采用某种加密机制(如FTPS或SSH)的协议,具体取决于网络设置和您正在移动的信息的敏感性.
curl扩展使用客户端URL库(libcurl)来传输文件.实现卷曲解决方案的逻辑通常如下:首先初始化会话,设置所需的传输选项,执行传输然后关闭会话.
使用curl_init函数初始化curl会话.该函数返回一个可以与其他curl函数一起使用的资源,就像在文件系统函数中使用fopen获取资源一样.
使用curl_setopt设置上传目标和传输会话的其他方面,curl_setopt接受curl资源,一个表示设置和选项值的预定义常量.
这是一个使用HTTP协议的PUT方法将文件从本地主机传输到远程服务器的示例:
$file = "testfile.txt";
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://example.com/putscript");
curl_setopt($c, CURLOPT_USERPWD, "username:password");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_PUT, true);
curl_setopt($c, CURLOPT_INFILESIZE, filesize($file));
$fp = fopen($file, "r");
curl_setopt($c, CURLOPT_INFILE, $fp);
curl_exec($c);
curl_close($c);
fclose($fp);
Run Code Online (Sandbox Code Playgroud)
可以在php文档中找到curl的有效选项列表.
ftp扩展允许您实现对ftp服务器的客户端访问.当前两个选项可用时,使用ftp传输文件可能有点过分...理想情况下,最好使用此扩展,需要更高级的功能.
使用ftp_connect与ftp服务器建立连接.您可以使用ftp_login通过提供用户名和密码来验证与ftp服务器的会话.使用ftp_put函数将文件放在远程服务器上.它接受目标文件名的名称,本地源文件名和预定义常量以指定传输模式:FTP_ASCII用于纯文本传输,FTP_BINARY用于二进制传输.传输完成后,ftp_close用于释放资源并终止ftp会话.
$ftp = ftp_connect("ftp.example.com");
ftp_login($ftp, "username", "password");
ftp_put($ftp, "destfile.zip", "srcfile.zip", FTP_BINARY);
ftp_close($ftp);
Run Code Online (Sandbox Code Playgroud)
小智 6
我们正在使用与您相同的用例。我们有两个服务器:应用程序服务器和存储服务器。应用程序服务器包含方法和 UI 部分,存储服务器是我们上传文件的地方。以下是我们用于文件上传的内容,工作正常:
1) 您必须在存储服务器上添加一个包含以下方法的 php 文件:
<?php
switch ($_POST['calling_method']) {
case 'upload_file':
echo uploadFile();
break;
case 'delete':
return deleteFile();
break;
}
function uploadFile() {
$localFile = $_FILES['file']['tmp_name'];
if (!file_exists($_POST['destination'])) {
mkdir($_POST['destination'], 0777, true);
}
$destination = $_POST['destination'] . '/' . $_FILES['file']['name'];
if (isset($_POST['file_name'])) {
$destination = $_POST['destination'] . '/' . $_POST['file_name'];
}
$moved = move_uploaded_file($localFile, $destination);
if (isset($_POST['file_name'])) {
chmod($destination, 0777);
}
$result['message'] = $moved ? 'success' : 'fail';
echo json_encode($result);
}
function deleteFile() {
if (file_exists($_POST['file_to_be_deleted'])) {
$res = unlink($_POST['file_to_be_deleted']);
return $res;
}
return FALSE;
}
?>
Run Code Online (Sandbox Code Playgroud)
2) 在您的应用程序服务器上。
创建一个将 $_FILES 数据传递到存储服务器的方法。
$data = array(
'file' => new CURLFile($_FILES['file']['tmp_name'],$_FILES['file']['type'], $_FILES['file']['name']),
'destination' => 'destination path in which file will be uploaded',
'calling_method' => 'upload_file',
'file_name' => 'file name, you want to give when upload will completed'
);
**Note :CURLFile class will work if you have PHP version >= 5**
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, PATH_FOR_THAT_PHP_FILE_ON_STORAGE_SERVER_FILE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60000);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_HOST']);
$response = curl_exec($ch);
if (curl_errno($ch)) {
$msg = FALSE;
} else {
$msg = $response;
}
curl_close($ch);
echo $msg;
Run Code Online (Sandbox Code Playgroud)
通过这种方式,使用 CURL 它将调用存储服务器文件方法并上传文件,并且您可以调用方法删除文件。
希望这会有所帮助。
| 归档时间: |
|
| 查看次数: |
23266 次 |
| 最近记录: |