2009-12-16 16 views
1

這是我的問題。我有一個不太「用戶友好」的票據跟蹤系統,但我希望我的用戶向系統提交「票據」而不讓他們看到它。上傳文件到另一個PHP頁面?

我剛剛使用自定義HTTP表單併發布到票據跟蹤系統。一個問題是'成功/完成'頁面容易讓人迷惑。所以我想......因爲我不能改變票系統使用不同的'成功'頁面。我將僅使用CURL處理HTTP Post交換並報告定製成功或問題頁面。下面是一些抽象代碼。

文件:tickethelper.php

<?php 
extract($_POST); 
$url = 'TICKETSYSTEMURL'; 
$fields = array(
     'fullname'=>urlencode($fullname), 
     /*many more fields*/ 
     ); 

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
rtrim($fields_string,'&'); 
$ch = curl_init(); 

curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$contents = curl_exec($ch); 
curl_close($ch); 
if((strlen(strstr($contents,'Your ticket has been submitted')))>0){ 
     header("Location: http://THANKYOU"); 
} 
     else{ 
       header("Location: http://OOPS"); 
     } 

?> 

不過,我意識到的是,我很想念我的文件上傳。我見過的大多數CURL示例都是將本地文件上傳到遠程HTTP POST頁面。

我該如何處理從我的用戶HTTP表單接收文件,在'tickethelper'中處理這個文件並將其發佈到'TICKETSYSTEMURL'?

- 以色列

回答

1

好了,我不能說我這個做自己,但根據PHP文檔中有關捲曲和文件處理(PHP.net

CURLOPT_INFILE |上傳時應該讀取傳輸的文件。

值應該是一個流資源(使用fopen()函數,例如)的選項參數的以下值:

你應該能夠調用fopen()對已上傳的文件(參見到關於Handling File Uploads)我不知道,但你可能需要調用fopen()

例如前致電move_uploaded_file()到服務器上的一個控制目錄文件:

$ch = curl_init(); 

$file = fopen($_FILES['file-field-name']['tmp_name'], 'r'); 

// OTHER CURL CONFIGURATION 
curl_setopt($ch, CURLOPT_INFILE, $file); 

curl_exec($ch); 
1

首先,您的腳本可以通過$ _FILES數組訪問上傳的文件。

http://www.tizag.com/phpT/fileupload.php

的$ _FILES數組就是PHP店 所有有關文件的信息。 是這個數組的兩個元素,我們 將需要了解這個 的例子。

  • uploadedfile - uploadedfile是我們在HTML 表單中分配的參考。我們需要這個來告訴 $ _FILES數組我們想要 與哪個文件一起玩。
  • $ _FILES ['uploadedfile'] ['name'] - name包含用戶上傳文件的原始路徑。
  • $ _FILES ['uploadedfile'] ['tmp_name'] - tmp_name包含駐留在 服務器上的 臨時文件的路徑。該文件應存在於臨時目錄中的 服務器上,其臨時名稱爲 。

要在你的libcurl發送POST這個文件,使用領域而不是字符串數組。包括文件中的一個字段:

$post_fields = array (
    $key => $value, 
    ... 
    $file_key => "@" . $filename, 
); 

如果使用「@」符號,將libcurl的讀取文件並將其包含在後。

然後使用

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
+0

現在我的問題是。我是否放棄原來的名字?我做了一個print_r($ _ FILES),我看到了原始名稱和文件的臨時路徑。當我的其他應用程序發佈文件時,它將是/ tmp/kwsnWjwn而不是'FriendlyName.xls'? – 2009-12-16 21:38:58

+0

以色列洛佩茲,你會失去原來的名字使用libcurl。我不相信你可以使用libcurl來設置這個值,儘管其他工具可能會允許它。但是,您可以使用PHP的move_uploaded_file()函數將臨時文件移動/重命名爲系統上的友好名稱,然後在$ post_fields數組中使用該文件。 – bmb 2009-12-16 22:03:45

相關問題