文件数据使用PHP和HTML浏览按钮

时间:2012-12-21 08:27:29

标签: php file

我正在使用PHP邮件程序,其中将使用HTML浏览按钮选择模板以获取发送邮件的数据。

我想在变量中获取数据.. 无法获取数据..

Warning: fopen(filename.txt) [function.fopen]: failed to open stream: No such file or directory in PATH/php_mailer\sendmail.php on line 18
Cannot open file: filename.txt

HTML

   <form name="addtemplate"  id="addtemplate" method='POST' 
        action='' enctype="multipart/form-data">
            <table style="padding-left:100px;width:100%" border="0" cellspacing="10" cellpadding="0" id='addtemplate'>
                <span id='errfrmMsg'></span>
                <tbody>
                    <tr>
                        <td class="field_text">
                            Select Template
                        </td>
                        <td>
                            <input name="template_file" type="file" class="template_file" id="template_file" required>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <input id="group_submit" value="Submit" type="submit" name='group_submit' />
                        </td>
                    </tr>
                </tbody>
            </table>
    </form>

PHP代码

if(isset($_POST['group_submit'])){
        if ($_FILES["template_file"]["error"] > 0) {
            echo "Error: " . $_FILES["template_file"]["error"] . "<br>";
        }
        else {
            echo $templFile = $_FILES["template_file"]["name"] ;
            $templFileHandler = fopen($templFile, 'r') or die('Cannot open file:  '.$templFile); //open file for writing ('w','r','a')...
            echo $templFileData = fread($templFileHandler,filesize($templFile));
        }
    }

2 个答案:

答案 0 :(得分:4)

请将$ _FILES [“template_file”] [“name”]替换为$ _FILES [“template_file”] [“tmp_name”]

答案 1 :(得分:3)

它不起作用,因为$_FILES['template_file']['name']是浏览器发送到服务器的本地文件名;要读取您需要$_FILES['template_file']['tmp_name']的上传文件:

echo $templFile = $_FILES["template_file"]["tmp_name"] ;
echo $templFileData = file_get_contents($templFile);

我还使用file_get_contents()来有效替换fopen()fread()fclose()。上述代码不会出于任何原因检查file_get_contents()部分的失败,这将是:

if (false === ($templFileData = file_get_contents($_FILES["template_file"]["tmp_name"]))) {
    die("Cannot read from uploaded file");
}
// rest of your code
echo $templFileData;