我目前检查每个GET和POST变量,isset()并在isset()返回false 时抛出异常.
例1:
if(!isset($_GET['some_var']))
throw new Exception('GET variable [some_var] is not set.');
$someVar = $_GET['some_var'];
Run Code Online (Sandbox Code Playgroud)
例2:
if(!isset($_GET['some_num']))
throw new Exception('GET variable [some_num] is not set.');
if(!ctype_digit($_GET['some_num']))
throw new Exception('GET variable [some_num] is not a number.');
$someNum = $_GET['some_num'];
Run Code Online (Sandbox Code Playgroud)
在我的生产应用程序中,我有一个全局异常处理程序,它将异常和错误发布到日志文件,然后重定向到一个通用的道歉页面.
这是一个好的做法吗?是描述性异常和错误消息,例如上面的安全风险(黑客是否有可能读取异常通知,然后使用该信息来操作我的脚本)?
谢谢!
当我在MySQL控制台中执行以下操作时,它可以正常工作:
INSERT INTO videos (embed_code) VALUES ('test code here');
SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)
但是,当我通过PHP执行上述查询时,结果为空.
在数据抽象下,我使用的是名为的数据库访问类DB.这就是我通过PHP尝试上述查询的方法:
$embedCode = htmlentities($_POST['embed_code']);
//Insert video in database **WORKS**
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');");
//Retrieve id **DOES NOT WORK**
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();");
$videoId = $row[0];
Run Code Online (Sandbox Code Playgroud)
我不能通过embed_code选择新的id,因为embed_code可以重复.
谢谢!
我有以下课程:
<?php
/*
* Abstract class that, when subclassed, allows an instance to be used as an array.
* Interfaces `Countable` and `Iterator` are necessary for functionality such as `foreach`
*/
abstract class AArray implements ArrayAccess, Iterator, Countable
{
private $container = array();
public function offsetSet($offset, $value)
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
public function offsetExists($offset)
{
return isset($this->container[$offset]);
}
public function offsetUnset($offset)
{
unset($this->container[$offset]);
}
public function offsetGet($offset)
{
return …Run Code Online (Sandbox Code Playgroud) 我刚刚设置了一个 LAMP 开发服务器,并且仍在解决一些问题。服务器安装在一台计算机上,我使用 Windows 笔记本电脑编写代码并通过 Web 浏览器测试站点。
我的文件上传脚本的工作原理是 JPEG 图像文件已成功上传到服务器,但是当我尝试在 Web 浏览器中查看图像时,权限被拒绝。
我通过服务器检查文件的权限,它们是600. 我可以通过 解决问题chmod 777 theimage.jpg,但这似乎根本不是一个好的解决方案。
解决方案是否与Apache配置有关?或者还有什么我应该做的。
谢谢你,迈克
更新
澄清一下,我可以将 JPEG 文件上传到/var/www/test/images,但上传后无法在 Web 浏览器中查看图像。我的脚本在生产服务器上工作(我使用的是 Dreamhost)。这让我相信问题出在我刚刚设置的开发服务器上。非常感谢任何反馈,即使它只是我应该阅读以更好地理解服务器设置的资源。
可能重复:
版本控制.入门…
我有兴趣首次实现版本控制.我开始积累自定义库,并想知道在Windows Vista操作系统上实现版本控制的方法.我也有一个Ubuntu服务器设置.我不确定操作系统是否相关.
另外,如果它是相关的,我主要使用PHP和AS3.
谢谢!
有没有办法测试字符串,如下面的字符串,看看它是否是一个实际的数字值?
var theStr:String = '05';
Run Code Online (Sandbox Code Playgroud)
我想区分上面的字符串值和这样的字符串:
var theStr2:String = 'asdfl';
Run Code Online (Sandbox Code Playgroud)
谢谢!
我今年夏天已经设置了两个不同的PHP系统.每个使用两种不同的方法:
方法#1:每个任务一个PHP文件
此方法要求PHP为每个主要任务创建一个文件.例如,我的上传脚本将通过访问http://www.domain.com/upload.php.在upload.php,实例化和使用"控制器"和"视图"类.例如,upload.php可能看起来像这样:
<?php
require_once PATH_LIBRARY . 'control/Uploader.class.php';
require_once PATH_LIBRARY . 'view/UploaderPage.class.php';
$uploader = new Uploader();
$uploader->setView(new UploaderPage());
$uploader->init();
?>
Run Code Online (Sandbox Code Playgroud)
在上面的脚本中,如果我想调用另一个脚本,我只需重定向并附加必要的URL编码变量(header('Location: edit_details.php?image_id=456');).
方法#2:index.php处理所有请求的主文件
此方法不要求PHP为每个主要任务创建文件.相反,将在系统中使用的每个"控制器"类都使用index.php我调用的唯一类进行注册Router.路由器决定指定的Controller是合法的还是非法的并且相应地起作用(将浏览器路由到正确的控制器).例如,index.php脚本的简化版本:
<?php
require_once 'bootstrap.inc';
require_once PATH_LIBRARY . 'router/Router.class.php';
$router = new Router();
$router->register('Uploader', PATH_LIBRARY . 'control/Uploader.class.php');
$router->register('DetailsEditor', PATH_LIBRARY . 'control/DetailsEditor.class.php');
$router->route();
?>
Run Code Online (Sandbox Code Playgroud)
因此,每一个行动都发生在index.php.不需要很多文件,这些文件没有做太多其他实例化特定视图和控制器类的文件.但是,如果你想从脚本/类B调用脚本/类A,那么你需要在URL上传递控制器类的名称:header('Location: index.php?controller=DetailsEditor&image_id=456').
到目前为止,我真的不喜欢我需要在URL中包含Controller名称的事实.我觉得它将我的底层系统暴露给最终用户.但是,我确实喜欢我可以在一个页面上注册所有控制器类的事实.大多数情况下,我不知道暴露控制器名称是否安全.另一个烦恼是,如果我想通过POST请求调用脚本,我必须包含一个指定所需控制器类的隐藏输入(例如<input type="hidden" name="controller" value="DetailsEditor" />).
我希望这足以继续下去.我很紧张第二种方法在未来几个月里并没有真正为我服务.我很快就会选择一个或另一个.
谢谢.
我有一个查询,用户在文本区域字段中键入文本块。他们能够将此信息保存在数据库中。问题是,如果他们没有更改信息或者信息与数据库中已有的数据匹配,我会收到受影响行的“0”。通常,当没有受影响的行时,我会显示一条错误,指出查询失败。我如何“知道”0 个受影响的行是因为数据已经存在,以便我可以显示更具体的错误?
在"返回错误"声明的位置方面,下列函数之一是否优于其他函数?
功能#1:
function equalToTwo($a, $b)
{
$c = $a + $b;
if($c == 2)
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
功能#2:
function equalToTwo($a, $b)
{
$c = $a + $b;
if($c == 2)
{
return true;
}
else
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在研究PHP上传脚本,在测试我的错误检查时,我试图上传一个17MB的TIFF文件.当我这样做时,$ _FILES数组为空.该脚本适用于我需要它做的事情,即上传JPEG文件.我的解决方案是在继续上传脚本之前测试$ _FILES是否为空.
任何人都可以解释为什么尝试上传TIFF时$ _FILES为空?是我的解决方案,检查$ _FILES是否为空,还可以吗?
这与设置有关php.ini吗?
只是为了澄清
我$_FILES使用以下内容检查是否为空:
if(empty($_FILES))
{
die('$_FILES is empty.');
}
Run Code Online (Sandbox Code Playgroud) php ×7
mysql ×2
security ×2
apache ×1
array-filter ×1
lastinsertid ×1
permissions ×1
sql-update ×1
theory ×1
types ×1
upload ×1