PHP Переносит файл на сервере в облачные файлы Rackspace


Я пытаюсь написать некоторый код, который будет искать в указанной папке на сервере последний файл с определенным расширением (в моем случае .zip) и передавать этот файл в облачные файлы Rackspace. Приведенный ниже код - это то, что я получил, и я продолжаю получать ошибку:

Фатальная ошибка: Неперехваченное исключение "Исключение IOException" с сообщением "Не удалось открыть файл для чтения: Идентификатор ресурса #8" в /home/test/public_html/cloudapi/cloudfiles.php:1952 Трассировка стека: #0 /home/test/public_html/final.php (60): cf_object->имя файла load_from_filename (Идентификатор ресурса #8) #1 {основной}, добавленный/home/test/public_html/cloudapi/cloudfiles.php в строке 1952

Код, который я использую ниже, изначально был сделан для загрузки контента через форму загрузки html, и я пытаюсь адаптировать тот же код для использования файла локального сервера вместо загруженного файла. Вы увидите закомментированный код с was ранее для сценария загрузки, чтобы показать вам, как работал сценарий загрузки.

<?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
?>
Author: imbayago, 2011-02-25

2 answers

Я знаю, что это старая тема. Но в интересах людей, которые могут зайти на эту страницу в поисках решения...

Проблема с вашим кодом заключается в следующем:

Следующая инструкция открывает файл для чтения

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

Однако, когда вы выполняете вызов load_from_filename, подпрограмма снова пытается открыть тот же файл и терпит неудачу, потому что он уже открыт в $localfile.

Поэтому закомментируйте предыдущую команду, и вы сможете запустить скрипт успешно.

 2
Author: Venu, 2011-05-31 13:22:02

Ошибка возникает из-за того, что тип содержимого не определен из прочитанного файла.

 0
Author: imbayago, 2011-03-10 07:35:59