【问题标题】:Post Uploaded file to another PHP page?将上传的文件发布到另一个 PHP 页面?
【发布时间】:2010-12-27 09:33:54
【问题描述】:

这是我的问题。我有一个不是很“用户友好”的票证跟踪系统,但我希望我的用户在不让他们看到的情况下向系统提交“票证”。

我只使用自定义 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' ?

-以色列

【问题讨论】:

    标签: php http file-upload curl https


    【解决方案1】:

    好吧,我不能说我自己已经完成了,但根据有关 CURL 和文件处理的 PHP 文档 (PHP.net)

    CURLOPT_INFILE |上传时要读取的文件。

    对于选项参数的以下值,值应该是流资源(例如使用 fopen()):

    您应该能够在已上传的文件上调用fopen()(请参阅有关Handling File Uploads 的文档)我不确定,但您可能需要将move_uploaded_file() 调用到服务器上的受控目录在打电话之前fopen()

    例如:

    $ch = curl_init();
    
    $file = fopen($_FILES['file-field-name']['tmp_name'], 'r');
    
    // OTHER CURL CONFIGURATION
    curl_setopt($ch, CURLOPT_INFILE, $file);
    
    curl_exec($ch);
    

    【讨论】:

      【解决方案2】:

      首先,您的脚本可以通过 $_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 将读取文件并将其包含在 POST 中。

      然后使用

      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
      

      【讨论】:

      • 现在我的问题是。我失去了原来的名字吗?我做了一个 print_r($_FILES) 并且我看到了原始名称和文件的临时路径。当我的其他应用程序发布文件时,它将是 /tmp/kwsnWjwn 而不是 'FriendlyName.xls' ?
      • Israel Lopez,你会失去使用 libcurl 的原始名称。我不相信您可以使用 libcurl 设置此值,尽管其他工具可能允许这样做。但是,您可以使用 PHP 的 move_uploaded_file() 函数将临时文件移动/重命名为系统上的友好名称,然后在 $post_fields 数组中使用该文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2017-07-02
      相关资源
      最近更新 更多