我正在使用fwrite在我的插件中的文件夹中创建一个html文件。以下代码现在允许我写入文件夹,但它尝试打开的链接是完整的系统路径。
function buildFrameFile($html, $filename){
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$filename= $DOCUMENT_ROOT. '/wp-content/plugins/my-plugin/html/' . $filename . ".html";
$fh = fopen($filename, 'a');//open file and create if does not exist
fwrite($fh, $html);//write data
fclose($fh);//close file
return $filename;
}
现在打开的路径是:
/var/chroot/home/content/##/########/html/wp-content/plugins/my-plugin/html/79dda339bad8e65c425e580d62f41fa1.html
我需要它从这里打开:
/wp-content/plugins/my-plugin/html/79dda339bad8e65c425e580d62f41fa1.html
我不知道该怎么做。
答案 0 :(得分:1)
我解决了我的问题。我最终改变了代码:
function buildFrameFile($html, $filename){
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$filename= $DOCUMENT_ROOT. '/wp-content/plugins/my-plugin/html/' . $filename . ".html";
$fh = fopen($filename, 'a');//open file and create if does not exist
fwrite($fh, $html);//write data
fclose($fh);//close file
return $filename;
}
要:
function buildFrameFile($html, $filename){
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$filename2= $DOCUMENT_ROOT. '/wp-content/plugins/my-plugin/html/' . $filename . ".html";
$fh = fopen($filename2, 'a');//open file and create if does not exist
fwrite($fh, $html);//write data
fclose($fh);//close file
return $filename;
}
这样文件就会保存到文件夹中,只返回文件的实际名称而不是文件的整个链接。
然后在我的标题中,我更改了代码:
header("Location: /confirm" . $nvp_str . "&filename=" . $filename);
要:
header("Location: /confirm?" . $nvp_str . "&filename=" . '/wp-content/plugins/my-plugin/html/' . $filename . ".html");
我的页面中的iframe调用了& filename的值,然后返回到我创建的文件的正确链接,它加载完美!
答案 1 :(得分:0)
首先,你可以依靠Wordpress的定义(或函数)来确定路径,而不会有任何肮脏的黑客攻击:
然后你可以再次使用PHP函数检查事物,如file_exists()
,is_dir()
,is_writable()
:
为了避免复杂的fopen,fwrite,fclose处理程序,你也可以在那里使用file_put_contents()
函数。在追加或覆盖模式下:
不确定相关性如何,但请记住,如果这是由Web服务器编写的,则需要确保该目录具有写入权限。最简单的方法是来自shell的chmod 777 directory
,或来自FTP的SITE CHMOD 777 directory
。
答案 2 :(得分:0)
你的问题很可能与奇怪的godaddy的设置有关。 您可以在此处找到更多信息:http://www.quest4.org/etc/godaddy_path.htm
这里也有一个类似的问题: WordPress's plugins_url() function not working on shared hosting