1

そのため、xlsファイルとxlsxファイルをサーバー(YiiフレームワークのNginX)にアップロードしようとしています。サーバーには、データを解析してデータベースに追加するためのphpスクリプトがあります。

十分に単純です。

しかし、私は最初のブロックでつまずきました。ファイルをアップロードするとき、PHPExcelはファイルを見つけられないようです。正直なところ、ファイルがどこにあるべきかをしっかりと理解できないため、ファイルがそこにあるかどうかはわかりません。以下は私のコードです

<code>
<?php
spl_autoload_unregister(array('YiiBase','autoload')); 

/** Include path **/

set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/share/nginx/www/dashboard/protected/extensions/phpexcel/Classes/');


/** PHPExcel_IOFactory */

include 'PHPExcel/IOFactory.php';
spl_autoload_register(array('YiiBase','autoload'));

echo $_FILES . "<br />";

$inputFileName = $_POST;

foreach ($inputFileName as $key => $value) {
    echo "Key: $key; Value: $value<br />\n";
    }
    echo $inputFileName["file"] . "<br />";

echo 'Loading file ',pathinfo($inputFileName["file"],PATHINFO_BASENAME),' using IOFactory to identify the format<br />'; 

//This is where it breaks  
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName["file"]);
</code>

そしてそれが壊れたとき、それは私にこのエラーを渡します:

<code>
Could not open Active, Telemetered, Electricity Accounts 17-10-2012.xlsx for reading! File does not exist.
</code>

そしてこのスタックトレース:

<code>
 /**  
225      * Can the current PHPExcel_Reader_IReader read the file?  
226      *  
227      * @param     string         $pFileName  
228      * @return     boolean  
229      * @throws Exception  
230      */
231     public function canRead($pFilename)  
232     {  
233         // Check if file exists  
234         if (!file_exists($pFilename)) {  
235             throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");  
236         }  
237 
238         // Check if zip class exists  
239         if (!class_exists('ZipArchive',FALSE)) {  
240             throw new Exception("ZipArchive library is not enabled");  
241         }  
</code>

今、私が理解しているように、pathinfo()はファイルを見つけるために必要なものをPHPに提供するはずであり、アップロードボタン(単純なhtmlフォーム;ファイル名は$から取得できます)を押すと、そのファイルはphpの一時フォルダーに存在するはずです_POST、それで私はそれがそこまで到達することを知っています)、しかしそれは実際にアップロードされていないか、それがアップすると失われます。

どんな助けでも大歓迎です!

編集:htmlアップロードフォーム:

<code>
<form action="testFile" method="post">
<label for="file" />
<input type="file" name="file"   />
<br />
<input type="submit">
</form>
</code>

編集:

HTMLアップロードフォームに問題がありました。enctypeを設定しなかったため、$_FILESは入力されませんでした。エンコーディングをマルチパート/フォームデータに設定すると、必要な情報を取得できます。あなたがた両方に感謝します!

4

1 に答える 1

1

Yiiを使用しているので、CUploadedFileクラスを使用してgetInstance、アップロードされたファイルに関するアクセスと情報を取得するために呼び出します。CUploadedFileのYiiドキュメントによると

CUploadedFileは、アップロードされたファイルの情報を表します。

getInstanceを呼び出してアップロードされたファイルのインスタンスを取得し、saveAsを使用してサーバーに保存します。名前、tempName、タイプ、サイズ、エラーなど、ファイルに関するその他の情報を照会することもできます。

例えば:

$form->model->xlsx = CUploadedFile::getInstance($form->model, 'xlsx');
//save the file, as an example I am assuming that file is an xlsx
$file = '/importedfiles/'.uniqid().".xlsx";
if($model->xlsx->saveAs($file))
{
//import PHPExcel if you have not already done so
Yii::import('sharedLibraries.PHPExcel.PHPExcel',true);
                
$inputFileType = PHPExcel_IOFactory::identify($file);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($file);
$objWorksheet = $objPHPExcel->getActiveSheet();
..........
}
else
{
//handle the error as file could not be saved
}
于 2012-11-20T20:17:18.343 に答える