2017-10-05 40 views
0

问题很简单,但我会提供一些背景信息,希望能够更轻松地回答它。我的'保存文件'php代码有什么问题?

因此,我正在使用ELGG框架并从表单和文本框中获取信息,希望将该数据打印到简单的文本文件中。

不幸的是,由于某种原因,这给了我很多麻烦,我似乎无法弄清楚为什么无论我在哪里看。

代码是遵循

<?php 

error_reporting(E_ALL); 
//Get the page 
$title = get_input('title'); 
$body = get_input('body'); 
$date = date("l jS F Y h:i A"); 

//remove any possible bad text characters 


$FileName = $title . ' ' . $date; 
//print to file 
//get filename and location to save 
$folderName = '/Reports/' . $FileName . '.txt'; 
$ReportContent = "| " . $body . " |"; 

//write to the file 
file_put_contents($folderName, $ReportContent, 0); 

//error check to see if the file now exists 
if (file_put_contents($folderName, $ReportContent)) { 
    system_message("Report Created (" . basename($folderName) . ")"); 
    forward(REFERER); 
} else { 
    register_error("Report (" . basename($folderName) . ") was not saved!"); 
    forward(REFERER); 
} 

那么上面应该做的是抓住从标题和正文中的文本(我可以确认它从标题确实至少),然后将其保存在/报告/文件夹(插件的完整路径是Automated_script_view/reports /如果需要)。然而,我总是会得到注册错误,我似乎无法找到原因。

我认为它与文件夹(/ reports /)的声明有关,就好像我将该部分拿走一样,它会通过并提交,尽管它似乎实际上并不存储在任何地方。

任何和所有的建议将非常感激!

+0

file_put_contents越来越绝对链接。所以它会尝试保存到/报告中,它可能没有权限这么做(或者文件夹甚至不存在)。在开始处添加一个点以使其相对于执行脚本的路径 – LordNeo

+0

另外,你调用file_put_contents两次,一次写入,另一次写入,下一次测试是否写入,但两次写入都有点浪费,你应该使用第一次调用的返回值来测试结果 – waterloomatt

回答

0

函数file_put_contents(文件,数据,模式,上下文)返回成功时写入文件的字符数,失败时返回FALSE。请注意以下更正和您的脚本将工作得很好:

1您的文件名有一个'非法'字符“:”来自您连接形成文件名的字符串的$日期部分。

2将file_put_contents($folderName, $ReportContent, 0);由于函数返回一个整数,简单使用:

if(file_put_contents($folderName, $ReportContent) > 0){ 
//true 
}else{ 
//false 
} 
+0

或更好用'!== false'来检查 – Sysix

+0

因为if(int x)将返回true,所以没什么问题。 – Nditah

+0

没有它没有错:)但是从逻辑上认为它更好:) – Sysix