PHP 将服务器上的文件传输到 Rackspace 云文件

发布于 2024-10-19 06:16:31 字数 2050 浏览 8 评论 0原文

我正在尝试编写一些代码,这些代码将在服务器上的指定文件夹中搜索具有特定文件扩展名(在我的例子中为 .zip)的最新文件,并将该文件传输到 Rackspace 的云文件。下面的代码是我得到的,我不断收到错误:

致命错误:未捕获的异常“IOException”,消息“无法打开文件进行阅读:/home/test 中的资源 id #8” /public_html/cloudapi/cloudfiles.php:1952 堆栈跟踪: #0 /home/test/public_html/final.php(60): CF_Object->load_from_filename(资源 id #8) #1 {main} 扔进 /home/ test/public_html/cloudapi/cloudfiles.php on line 1952

我在下面使用的代码最初是为了通过 html 上传表单上传内容而完成的。我正在尝试调整相同的代码以使用本地服务器文件而不是上传的文件。您将看到之前用于上传脚本的注释代码,以向您展示上传脚本的工作原理。

<?php

// include the Cloud API.
require('cloudapi/cloudfiles.php');


// START - Script to find recent file with the extension .zip in current folder
$show = 2; // Leave as 0 for all
$dir = ''; // Leave as blank for current

if($dir) chdir($dir);
$files = glob( '*.zip');
usort( $files, 'filemtime_compare' );

function filemtime_compare( $a, $b )
{
return filemtime( $b ) - filemtime( $a );
}

$i = 0;
foreach ( $files as $file )
{
++$i;
if ( $i == $show ) break;
$value = $file;  //Variable $value contains the filename of the recent file to be used in Cloud Files API
}
// END - Script to find recent file with the extension .zip in current folder



// START - Rackspace API code to upload content to cloud files container
// Rackspace Connection Details;
$username = "randomusername"; // put username here
$key = "234887347r93289f28h3ru283h2fuh23093402398"; // api key

// Connect to Rackspace
$auth = new CF_Authentication($username, $key);

$auth->authenticate();
$conn = new CF_Connection($auth);

//Set the Container you want to use
$container = $conn->get_container('Backups');

//Temp store the file
//$localfile = $_FILES['uploadfile']['tmp_name'];
//$filename = $_FILES['uploadfile']['name'];
$localfile = fopen($value, "r");
$filename = $value;


//Uploading to Rackspace Cloud
$object = $container->create_object($filename);
$object->load_from_filename($localfile);

echo "Your file has been uploaded";

// END - Rackspace API code to upload content to cloud files container
?>

I am trying to script some code that will search a specified folder on the server for the latest file with a specific file extension (in my case .zip) and transfer that file to Rackspace's Cloud Files. The code below is as far i got and i keep getting the error:

Fatal error: Uncaught exception 'IOException' with message 'Could not open file for reading: Resource id #8' in /home/test/public_html/cloudapi/cloudfiles.php:1952 Stack trace: #0 /home/test/public_html/final.php(60): CF_Object->load_from_filename(Resource id #8) #1 {main} thrown in /home/test/public_html/cloudapi/cloudfiles.php on line 1952

The code that i'm using below was originally done for uploading content via an html upload form & i'm trying to adapt the same code to use a local server file instead of an uploaded file. You will see commented code with was previously for an upload script to show you how the upload script had worked.

<?php

// include the Cloud API.
require('cloudapi/cloudfiles.php');


// START - Script to find recent file with the extension .zip in current folder
$show = 2; // Leave as 0 for all
$dir = ''; // Leave as blank for current

if($dir) chdir($dir);
$files = glob( '*.zip');
usort( $files, 'filemtime_compare' );

function filemtime_compare( $a, $b )
{
return filemtime( $b ) - filemtime( $a );
}

$i = 0;
foreach ( $files as $file )
{
++$i;
if ( $i == $show ) break;
$value = $file;  //Variable $value contains the filename of the recent file to be used in Cloud Files API
}
// END - Script to find recent file with the extension .zip in current folder



// START - Rackspace API code to upload content to cloud files container
// Rackspace Connection Details;
$username = "randomusername"; // put username here
$key = "234887347r93289f28h3ru283h2fuh23093402398"; // api key

// Connect to Rackspace
$auth = new CF_Authentication($username, $key);

$auth->authenticate();
$conn = new CF_Connection($auth);

//Set the Container you want to use
$container = $conn->get_container('Backups');

//Temp store the file
//$localfile = $_FILES['uploadfile']['tmp_name'];
//$filename = $_FILES['uploadfile']['name'];
$localfile = fopen($value, "r");
$filename = $value;


//Uploading to Rackspace Cloud
$object = $container->create_object($filename);
$object->load_from_filename($localfile);

echo "Your file has been uploaded";

// END - Rackspace API code to upload content to cloud files container
?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦旅人picnic 2024-10-26 06:16:31

我知道这是一个旧线程。但是为了在寻找解决方案时可能登陆此页面的人们的利益...

您的代码的问题是:

以下语句打开文件以供阅读

$localfile = fopen($value, "r");

但是,当您进行 load_from_filename 调用时,例程再次尝试打开相同的文件并失败,因为您已经在 $localfile 中打开了它。

因此,注释掉前面的命令,您应该能够成功运行该脚本。

I know this is an old thread. But for the benefit of people who may land at this page while searching for a solution...

The problem with your code is:

The following statement opens the file for reading

$localfile = fopen($value, "r");

However when you place the load_from_filename call, the routine again tries to open the same file and fails because you already have it open in $localfile.

So comment out the previous command and you should be able to run the script successfully.

凉薄对峙 2024-10-26 06:16:31

由于未从读取文件中定义内容类型,因此引发错误。

Error's being thrown in because content type not defined from read file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文