- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 PHP 来读取和写入文本文件。使用 html 页面上的按钮读取文件。该文件是使用 html 页面上的按钮编写的,该按钮从文本框中获取参数。当文本文件位于 webroot 目录中时,我成功写入了文本文件。我希望能够读取/写入位于 webroot 目录之外的文本文件。
我在 Beaglebone 上使用带有 PHP 的 lighttpd。 webroot 目录位于 /var/www
。我要编辑的文本文件位于 /var/textFiles
。我到处寻找解决方案,但似乎都没有用。
以下是我找到的最有希望的解决方案,但它似乎行不通。当我单击“读取”或“写入”按钮时,页面似乎陷入了无限循环。我想知道是否有人知道为什么这不起作用,或者他们是否可以提供更好的解决方案。
这是我目前所拥有的:
索引.php
<?php
echo '<script language="javascript" type="text/javascript" src="jquery-1.9.0.min.js"></script>';
echo "<form name='write' action='writeFunctionCaller.php' method='post'>Input text to
write to text file: <input type='text' name='input'>
<input type='submit' value='Write' ></form>
<form name = 'read' action='readFunctionCaller.php' method='get'>
<input type='submit' value='Read'></form><br><div id='fileContent'></div>";
class readWriteModel {
function readFile() {
$file_handle = fopen("secure.php?file=phpRead.txt", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line;
echo '<br>';
}
fclose($file_handle);
}
function writeFile($text) {
echo ("Write Success! ");
$filename = "secure.php?file=phpRead.txt";
file_put_contents($filename, $text, FILE_APPEND | LOCK_EX);
}
}
?>
安全.php
<?php
//validate that the user should have access to the file here
//Make sure it exists
$folder = realpath('/var/textFiles');
if(!$file = realpath($folder.'/'.$_GET['file']))
error(404);
if(!is_file($file))
error(404);
//Check for cheaters
if(substr($file,0,strlen($folder)) !== $folder)
error(401);
header(sprintf("Content-type: %s;",getMimeType($file)));
readfile($file);
exit;
function error ( $code = 401, $msg = null ) {
$msgs = array(
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
);
if(!$msg) $msg = $msgs[$code];
header(sprintf('HTTP/1.0 %s %s',$code,$msg));
printf('<html><head><title>%s %s</title></head><body><h1>%s</h1></body>
</html>',$code,$msg,$msg);
exit;
}
function getMimeType ( $filename ) {
//MIME MAP
$mime_extension_map = array(
'txt' => 'text/plain',
);
//Get Extension
$ext = strtolower(substr($filename,strrpos($filename,'.') + 1));
if(empty($ext))
return 'application/octet-stream';
elseif(isset($mime_extension_map[$ext]))
return $mime_extension_map[$ext];
return 'x-extension/' . $ext;
}
?>
writeFunctionCaller.php
<?php
include_once('index.php');
$text = $_POST['input'];
$model = new readWriteModel();
$model->writeFile($text);
?>
readFunctionCaller.php
<?php
include_once('index.php');
$model = new readWriteModel();
$model->readFile();
?>
最佳答案
我能够读取和写入根目录之外的文本文件。只是为了看看是否有效,我将webroot目录上面的目录/var
权限设置为777
,以及phpRead.txt
到 777
并使用 /var/textFiles/phpRead.txt
的绝对路径引用文件 这绝对不是最安全的方法,所以如果您正在阅读并写入 webroot 目录之外的文件,请参阅以下 stackoverflow 答案:https://stackoverflow.com/a/3012330/2047335有关 PHP 安全性的更多信息。
以下是我用来读取/写入 webroot 目录上方的文本文件的文件:
索引.php:
<?php
echo '<script language="javascript" type="text/javascript" src="jquery-1.9.0.min.js"></script>';
echo "<form name='write' action='writeFunctionCaller.php' method='post'>";
echo "Input text to write to text file: <input type='text' name='input'><input type='submit' value='Write' >";
echo "</form>";
echo "<form name = 'read' action='readFunctionCaller.php' method='get'>";
echo "<input type='submit' value='Read'>";
echo "</form>";
echo "<br>";
echo "<div id='fileContent'></div>";
class readWriteModel{
function readFile() {
$file_handle = fopen("/var/textFiles/phpRead.txt", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line;
echo '<br>';
}
fclose($file_handle);
}
function writeFile($text) {
echo ("Write Success! ");
$filename = "/var/textFiles/phpRead.txt";
file_put_contents($filename, $text, FILE_APPEND | LOCK_EX);
}
}
?>
readFunctionCaller.php:
<?php
include_once('index.php');
$model = new readWriteModel();
$model->readFile();
?>
writeFunctionCaller.php:
<?php
include_once('index.php');
$text = $_POST['input'];
$model = new readWriteModel();
$model->writeFile($text);
?>
用户界面图片:
谢谢大家的帮助!
关于php - 写入 webroot 目录之外的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14732881/
我的 webroot 外有一个 php 文件,我想在其中包含 webroot 内的文件。 folder outside webroot - > php file in which I want to
对于电子邮件附件,我想获取 webroot 文件夹的直接路径。像这样的东西:/var/www/vhosts/.../webroot Cake 中是否有为此定义的常量或函数? 谢谢 最佳答案 WWW_D
我正在尝试设置我的 nginx 和 django 以便能够更新证书。 但是我的 webroot-plugin 出了点问题 在 Nginx 中: location ~ /.well-known {
我一直在阅读有关在哪里安全保存具有我的 mysql 数据库连接密码的 PHP 文件的信息。我从论坛上了解到,它应该保存在 webroot 之上的文件夹中。我有一个托管公司的云服务器。我可以访问 roo
第一次使用 Ubuntu,设置 Web 服务器并且对最佳实践感到困惑。我应该将它设置在 var/www/site/public 还是在家里的某个地方? 授予权限的最佳方式是什么?这是我发现的: sud
您好,我使用 PHP 允许用户上传文件,出于安全原因,我将它们放在 webroot (/var/www) 文件夹之外的文件夹中。它位于文件夹/var/uploads 中。用户上传特定记录的文件。一旦上
我正在开发一个允许注册用户(可以是任何人)上传文件的系统。我已经阻止 mime 类型等以尝试将文件限制为 .doc、.docx 和 .pdf 类型,但为了额外的安全性,它们被上传到 webroot 之
我是 cakephp 的新手,在设置本地开发服务器时遇到了一些问题。我的蛋糕安装位于 http://localhost/dropbox/my_site/ .但是,当我尝试访问该网址时,它告诉我保管箱
好的,首先道歉,因为我意识到这是一个之前已经讨论过很多次的主题 - 相信我,我知道,我已经阅读了之前的所有问题和答案,但仍然无法解决这个问题。 我有一个包含可下载文件的文件夹。为了安全起见,我把这个文
在 php 中,我正在尝试读取位于网络根目录之上的文件(例如 /home/[username]/games/)。我正在尝试读取 .swf 和 .xml 文件。我使用以下代码在本地 LAMP 服务器上运
我知道这是一个愚蠢的问题,但我想知道为什么会这样。 我正在使用 wamp 服务器版本 2.1。在本地主机中查看目录时,文件旁边的图像未加载。引用下图。在检查图像时,我发现它无法加载 /icons/fo
我正在尝试使用 PHP 来读取和写入文本文件。使用 html 页面上的按钮读取文件。该文件是使用 html 页面上的按钮编写的,该按钮从文本框中获取参数。当文本文件位于 webroot 目录中时,我成
我在 DreamHost 上托管了一个 CakePHP 应用程序,并在我的 MacBook 上本地克隆了一个应用程序。 我正在尝试设置我的环境,以便我可以在 MacBook 上开发并根据需要推送到托管
我正在尝试在虚拟服务器(ubuntu)上设置 php yii 框架。 yiiframework放在/var/www/yii-1.1.7/framework/ . 网站根目录为 /var/www/vho
以前(和本地)我已将 fusebox5 目录放在 web 根目录中,然后树中任何位置的应用程序都可以访问它。我以前也使用过 Application.cfm 而不是 .cfc。 在这种环境中,我无法访问
我已经创建了两个项目: 使用 webpack 构建的 Web UI 一个 Vert.x用 java 编写的网络服务器使用 Gradle 构建 我想找到一种方法将第一个项目的生成目录内容作为 webro
我想在网络根目录中创建一个新目录(文件夹),以便我可以在该新文件夹中创建/编辑文件。 我的代码是: $path = 'files' . DS . 'pathtofolder';// $folder_n
我想在网络根目录中创建一个新目录(文件夹),以便我可以在该新文件夹中创建/编辑文件。 我的代码是: $path = 'files' . DS . 'pathtofolder';// $folder_n
我试图在 cakephp 的 webroot View 中显示图像。但是我没有得到任何图像。请帮我; 这段代码是否正确 $this->Html->image('WWW_ROOT . img/uploa
这是我想要的结构: -webroot/ -css/ -font/ -img/ -js/ -new_folder/ -file.css
我是一名优秀的程序员,十分优秀!