我做了很多搜索,还阅读了PHP $ _SERVER文档.对于在我的网站中使用的简单链接定义,我的PHP脚本使用哪个权限?
$_SERVER['SERVER_NAME'] 是基于您的Web服务器的配置文件(在我的情况下是Apache2),并根据一些指令而变化:(1)VirtualHost,(2)ServerName,(3)UseCanonicalName等.
$_SERVER['HTTP_HOST'] 基于客户的要求.
因此,在我看来,为了使我的脚本尽可能兼容而使用的正确方法是$_SERVER['HTTP_HOST'].这个假设是否正确?
后续评论:
我想在读完这篇文章之后我有点偏执,并注意到有些人说"他们不会相信任何一个$_SERVER变种":
http://markjaquith.wordpress.com/2009/09/21/php-server-vars-not-safe-in-forms-or-links/
http://php.net/manual/en/reserved.variables.server.php#89567(评论:Vladimir Kornea 14-Mar-2009 01:06)
显然,讨论主要是关于$_SERVER['PHP_SELF']为什么你不应该在表单action属性中使用它而没有适当的转义以防止XSS攻击.
我对上述原始问题的结论是$_SERVER['HTTP_HOST'],即使在表单中使用,也可以"安全"地使用网站上的所有链接,而不必担心XSS攻击.
如果我错了,请纠正我.
有没有办法检查数组索引是否存在或为空?
isset()不会告诉您索引是否存在或存在但是为空.如果我这样做:isset($array[$index]) || is_null($array[$index])它将无法工作,因为如果索引不存在,is_null将崩溃.
我该怎么办?还有一种方法可以检查是否存在某些东西,无论它是否设置为null?
在哪里isset或array_key_exist适合使用?
在我的情况下,两个都在工作.
if( isset( $array['index'] ) {
//Do something
}
if( array_key_exists( 'index', $array ) {
//Do something
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
确定PHP中是否存在数组键有哪些更快更好?
假设我想存储我在memcache上的朋友列表.有时我需要搜索用户是否在我的列表中,有时我需要获取所有朋友列表.
你会宁愿
$friends[] = $friend
Run Code Online (Sandbox Code Playgroud)
要么
$friends[$friend] = 1;
Run Code Online (Sandbox Code Playgroud)
理由是在没有惩罚速度的情况下尽可能地保存公羊.我没有找到任何关于php 5.3.8的案例研究可以帮助我解决我的小困境:在负载下,执行速度更快?
array_key_exists还是in_array?(即:foo是酒吧的朋友?)
此外,有时我需要获取整个朋友列表,所以我需要迭代整个列表,以建立一个朋友阵列.根本不确定第二种方法,因为我还不知道是否会有更多的array_search | array_key_exists | in_array或fetch of full friends list.
任何的想法?
我怀疑在数组中进行快速搜索的更好方法是什么(我在谈论具体情况).
假设我有一个数组L = [A,B,C](当我开始时).当程序运行时,可能L会增长(但到最后),我将进行搜索的一种可能情况是L = [A,B,C,D,E].
事实是,当我搜索时,我想要找到的值可能只有D和E.现在我正在使用find_array(elem,array),但是这个函数不能被"调整"到搜索开始结束并减少索引,我"害怕"对于所有搜索,函数in_array将检查所有具有较低索引的元素,然后才能找到我正在搜索的值.
¿有另一种搜索功能更适合我的问题吗?¿如何在in_array函数内部工作?
提前致谢
如果两个数组的键相等,最快的比较方法是什么?
例如.
array1: array2:
'abc' => 46, 'abc' => 46,
'def' => 134, 'def' => 134,
'xyz' => 34, 'xyz' => 34,
Run Code Online (Sandbox Code Playgroud)
在这种情况下,结果应为TRUE(相同的键)
和:
array1: array2:
'abc' => 46, 'abc' => 46,
'def' => 134, 'def' => 134,
'qwe' => 34, 'xyz' => 34,
'xyz' => 34,
Run Code Online (Sandbox Code Playgroud)
结果应为FALSE(某些键不同)
array_diff_key()返回一个空数组......
我在XAMPP上注意到严格的错误报告已经开启,我现在得到了未定义的索引错误.我只有两个小问题(我还在这里学习):
我知道你不具备在PHP声明变量,但它有什么优势无论如何声明呢?如果没有,当我没有定义严格错误报告时,为什么会出现错误?
例如,当我使用get变量时,我会在运行类似函数之前检查它们的值
if($_GET['todo'] == 'adduser')
runFunctionAddUser();
Run Code Online (Sandbox Code Playgroud)
这会产生错误,因为我从不检查get变量是否首先存在.我应该这样做
if(isset($_GET['todo']))
if($_GET['todo'] == 'adduser')
runFunctionAddUser();
Run Code Online (Sandbox Code Playgroud)
代替?这会有优势还是不必要而且缓慢?
因此,您可以选择构建数组,因为您知道在代码中需要检查数组中是否存在值.我看到它的方式至少有两个选择:
$values_array = array(
'my_val',
'my_val2',
'and_so_on',
);
if(in_array('my_val', $values_array)) {
var_dump('Its there!');
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用关联数组并使用键来包含您的值:
$values_array = array(
'my_val' => '',
'my_val2' => '',
'and_so_on' => '',
);
if(isset($values_array['my_val'])) {
var_dump('Its there!');
}
Run Code Online (Sandbox Code Playgroud)
你会选择哪种方法?为什么?您是否只是为了减少处理时间或减少使用的内存量?
也许你不会使用我的两个微不足道的方法,并有另一种很棒的方法来解决这个简单的问题.
这是一个没有考虑真实世界应用的理论问题,但阵列中可能有数千个选项.这是一个推测性的问题,真正看到每个人都认为哪种方法更好.是否因为可读性,速度或内存使用原因而被认为是这样.
php ×9
arrays ×4
isset ×2
performance ×2
apache ×1
comparison ×1
indexing ×1
null ×1
optimization ×1
owasp ×1
search ×1
security ×1
structure ×1
undefined ×1