2013-05-03 28 views
1

我正在使用fwrite在我的插件中的一個文件夾中創建一個html文件。下面的代碼現在允許我寫入文件夾,但它嘗試打開的鏈接是完整的系統路徑。WordPress fopen獲取目錄鏈接

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 

我不知道如何去這一點。然後,你可以再次檢查

回答

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調用&文件名的值,然後返回正確的鏈接到我文件已創建並完美加載!

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

+0

我不確定那對我有幫助。我已經嘗試過目錄上的chmod 777,並使用fwrite()以及file_put_contents(),甚至有$ DOCUMENT_ROOT = $ _SERVER ['DOCUMENT_ROOT'];設置爲插件路徑。但是,如果我使用$ DOCUMENT_ROOT = $ _SERVER ['DOCUMENT_ROOT'],它只會寫入文件夾;那當然然後調用文件的完整系統路徑,然後無法訪問。該文件確實被添加到文件夾。 – 2013-05-03 22:38:42

+0

您的HTTP服務器是否也從chroot運行? – kyeno 2013-05-04 01:16:19

+0

託管服務是godaddy.com,我不知道它是否從chroot運行。在我運行上面的腳本之前,我沒有看到任何顯示它的事情。 – 2013-05-04 02:28:16