小编oll*_*lli的帖子

使变量可用于所有类,方法,函数和包含,就像$ _POST一样

这个问题看起来很简单,但我无法在任何地方找到答案......

在我的php脚本/文件的开头我想创建一个变量.

$variable = 'this is my variable';
Run Code Online (Sandbox Code Playgroud)

我希望这个变量在整个脚本中可用,这样所有类,方法,函数,包含的脚本等都可以简单地将这个变量称为$ variable.

Class MyClass
{
  public function showvariable()
  {
     echo $variable;
  }
}
Run Code Online (Sandbox Code Playgroud)

$ _SESSION,$ _POST,$ _GET变量都表现得像那样.我可以写一个方法并使用$ _POST,它会工作.但是如果我使用我在脚本开头定义的$ variable,它会说"注意:未定义的变量:变量在......"它甚至会说,当我编写一个函数时,而不是类方法. .

我试着写

global $variable = 'this is my variable';
Run Code Online (Sandbox Code Playgroud)

但随后脚本将无法加载..."HTTP错误500(内部服务器错误):服务器尝试完成请求时遇到意外情况."

如何使变量真正全局可访问,如$ _POST?

我为什么需要这个?我特意计划将它用作表单令牌.在页面顶部,我将表单标记生成为$ token,在页面底部我将其存储在会话中.在处理任何表单之前,我检查SESSION令牌是否与POST令牌匹配...并且由于我经常在页面上有多个表单(顶部导航中的登录表单,以及主体中的注册表单),我只是想让它变得方便在每个表单上调用$ token.有时我的formelements是由类或函数生成的,但它们不识别变量并说它没有定义.

php oop scope

17
推荐指数
2
解决办法
3万
查看次数

on("click",function())和onclick ="function();"之间有什么区别?

所以当我点击按钮时我想要发生什么事情我可以做:

<!-- EXAMPLE A-->
<input type="button" onclick="alert('hello world');">
Run Code Online (Sandbox Code Playgroud)

或者我能做到

<!-- EXAMPLE B-->
<input type="button" id="clickme">
<script>
   $('#clickme').on("click",function(){alert('hello world');});
</script>
Run Code Online (Sandbox Code Playgroud)

或者当然任何变化(on change,on hover)和快捷方式(.click() .change())都是可能的......

除了A更短的事实,有什么区别?哪个更好?为什么?

我注意到,当我使用.html()动态添加元素到网站时(如按钮)B不适用于这个新创建的按钮,我需要使用A ...

任何见解都会有所帮助!

html javascript jquery event-handling

9
推荐指数
1
解决办法
3万
查看次数

$ _SERVER ['REQUEST_URI']和标题('location:...')的任何安全问题;

我的网站有页眉,页脚和主要内容.如果用户未登录,则可以显示登录表单而不是实际内容.

在该登录表单上,我$_SERVER['REQUEST_URI']在会话变量中写入$_SESSION['redirect'].

我的登录表单posthandler将登录用户,将成功登录此链接后发送给用户 header('location: http://myserver.com'.$_SESSION['redirect']);

所以,如果我去myserver.com/somesite.php?somevar=10,它会显示正确的网站,如果你已经登录,否则会显示登录表单,但是在浏览器地址栏中的URL仍然说myserver.com/somesite.php?somevar=10 那你输入您的凭据,你会被重定向到myserver.com/somesite.php?somevar=10,这将然后 - 因为你现在已经登录 - 完全显示.

我不使用REQUEST_URI表单操作的值或链接href.

此外,任何$_GET我用我首先检查它们是否匹配正则表达式的变量(通常是变量将是一个sha1字符串或数字和字母而已,没有任何特殊字符的,否则随机生成的字符串),我总是使用准备好的语句,如果得到的变量用于db查询.

我的问题是,是否有任何安全问题?有任何方法可以利用它,在网址中输入恶意内容,然后将其发送给其他用户,例如......?我是否应该在某个过程中以某种方式逃避某些事情?

php security

5
推荐指数
1
解决办法
5529
查看次数

php / mysqli:我应该在返回之前 free_result 吗?

如果从函数内部调用,则 return 语句立即结束当前函数的执行,并将其参数作为函数调用的值返回。

引用自 php 手册:http : //php.net/manual/en/function.return.php

所以如果我要写这个函数:

public function check_db_for_desired_value()
{
  //...connect to db, prepare stmt, etc.
  while (mysqli_stmt_fetch($stmt))
  {
    if($column == 'desired_value')
    {
      return TRUE;  
    }
    else
    {
      return FALSE;
    }
  }
  // these commands would never get executed
  mysqli_stmt_free_result($stmt); 
  mysqli_stmt_close($stmt);
  mysqli_close($link);
}
Run Code Online (Sandbox Code Playgroud)

所以(如果 php 手册中的说法是正确的)我的结果永远不会被释放,我的 stmt 永远不会被关闭并且我的数据库连接保持打开状态,因为我返回了一些东西并结束了函数的执行......

那么我应该不是返回设置变量的值,然后在关闭所有内容后返回该值?

我问,因为我的代码正在运行并且我没有收到任何错误,即使我以前写过这样的函数......

php mysqli

5
推荐指数
1
解决办法
703
查看次数

什么更有效,为什么:每页一个数据库连接或每个功能一个数据库连接?

我正在一个非常MySQL数据库驱动的网站上工作.所以我有很多疑问.

本主题中,每个人都建议连接到页面顶部的数据库,并在页面底部断开连接.

我想知道什么更有效,或者一般来说最佳实践:每页建立一个单独的数据库连接,或者只根据需要连接?(或者没有一般答案,这取决于?)

另外,我想找出为什么这是最佳实践,从哪个角度看你的情景(例如安全性,速度,......我不知道DB连接可能会影响什么?!)

我相信这个问题在之前已被提出- 但不是针对具体的PHP,因此我没有发现它有用.

我目前的做法是为每个mysqli连接到我写的每个函数,并在函数结束时断开连接,因为它对我来说似乎更清晰.这样,如果页面没有调用需要DB访问的功能,则永远不会打开连接.但是,可能会发生每页加载最多大约10个连接,具体取决于用户在网站上执行的操作.现在我认为这可能是公平的资源分配.如果我理解正确,则只能打开1个DB连接.因此,我假设所有连接请求都将排队.因此,如果用户具有多个,长且复杂的查询,则该用户将不会占用所有流量,因为在每个查询之间,可以处理其他短查询.但那只是我制造的东西,我不知道它是否会真的那样......:D

另外我知道这里的很多开发人员都喜欢使用PDO.我开始开发时选择使用mysqli,我没有切换的计划.我希望我的问题适用于两个图书馆.

谢谢 :-)

php mysql performance mysqli

5
推荐指数
2
解决办法
9739
查看次数

如何更改 PHP 在错误日志文件中写入错误的方式?

我已经在我的网站上工作了一年多了,我非常渴望最终将它放在那里供人们使用。然而它已经变得相当大了——我几乎想说超出了我的控制——最重要的是,我实际上只是一个自学的业余程序员。

所以我想确保 php 产生的任何错误都记录在一个文件中,这样我就可以访问该文件并跟踪错误。

目前我的设置如下:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', 1);
ini_set('error_log', 'errors.log');
?>
Run Code Online (Sandbox Code Playgroud)

到目前为止效果很好,我的 error.log 文件将包含如下内容:

[14-May-2013 00:16:26] PHP 注意:未定义的变量:/home/www/dir/index.php 第 14 行中不存在变量[14-May-2013 00:16:28] PHP 注意:未定义的变量:第 14 行 /home/www/dir/index.php 中不存在变量

太好了,错误已记录。

但现在我有一个问题:

  1. 他们都排成一排,没有间断。使其难以阅读。如何在新行中获取每个错误?

  2. 我看到有一个时间戳。惊人的!我如何添加用户的 IP 地址等内容或任何其他自定义内容?

再次,我的问题:

如何更改 PHP 在错误日志文件中写入错误的方式? 特别是,如何在记录每个错误后创建一个新行,以便 error.log 文件更易于阅读。如何添加自定义数据和值(例如 IP 地址)?

答案: 我最终做了以下事情 - 这似乎在某种程度上重现了 php 按标准所做的事情,并且可以从那里进行修改。

<?php
function my_error_handler($type, $message, $file, $line, $vars)
{
    switch($type) 
    { 
        case 1: // 1 // 
            $type_str = 'ERROR'; 
            break;
        case 2: // 2 // 
            $type_str = 'WARNING';
            break; …
Run Code Online (Sandbox Code Playgroud)

php error-logging error-reporting ini-set error-log

5
推荐指数
1
解决办法
2080
查看次数

更改错误日志输出格式:ini_set('error_append_string', 'string') 和 ini_set('error_prepend_string', 'string') 什么都不做

这就是我告诉 php 要做的:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', 1);
ini_set('error_log', 'errors.log');
ini_set('error_append_string', 'APP');
ini_set('error_prepend_string', 'PRE');
?>
Run Code Online (Sandbox Code Playgroud)

希望我能在一个文件中报告所有错误,在消息之前使用“PRE”,在消息之后使用“APP”。(我的目标是将 PRE 和 APP 变成 /n /r 之类的……)

但我的错误报告日志如下所示:

[14-May-2013 00:16:26] PHP 通知:未定义变量:第 14 行 /home/www/dir/index.php 中的 nonexistentvariable [14-May-2013 00:16:28] PHP 通知:未定义变量:第 14 行 /home/www/dir/index.php 中不存在变量

没有PRE,没有APP...

我如何将它放入那里,以便我的错误报告文件将每个错误都放在换行符上,而不是一串对我没有帮助的错误?

编辑: 所以我注意到 ini_set('display_errors', '1'); “APP”和“PRE”字符串是显示在页面上的错误消息中。

这意味着我真的需要找出我可以在哪里更改 php 如何记录错误的格式。例如整个时间戳的事情 - 在哪里指定?

编辑: 无法更改 php 记录错误的方式,您必须制作自己的错误处理程序。

回答: 为了真正实现我的目标,我提出了一个不同的问题(更准确地说)。 如何更改 PHP 在错误日志文件中写入错误的方式?

php error-reporting

4
推荐指数
1
解决办法
3914
查看次数

电子邮件验证/确认的安全性

当有人在网站上注册他们的电子邮件地址时,通常会要求他们通过点击发送给他们的电子邮件地址中的链接来验证或确认他们的电子邮件.订阅或取消订阅邮件列表也是如此.

可用性明智,这很好.这是非常快速和容易做到的,我想不出任何能打败它的东西.

我不确定我是不是在想事情,但我只是想看看我是否遗漏了什么或误判了什么.

据我所知,电子邮件验证/确认的目的

  • 确保电子邮件地址正确无误
  • 确保可以读取和接收发送到此地址的电子邮件
  • 确保电子邮件地址确实属于尝试注册的人

通过他们点击的当前流行实现只有一个链接并立即验证电子邮件,有人可以强制执行验证链接并绕过整个步骤.

只需访问verify.php?code=YOURBESTGUESSHERE并尝试各种不同的代码.

攻击者现在就可以做如下的剥削:

  • 通过从我的邮件列表中取消订阅一群人来伤害我的业务
  • 在未经他们同意的情况下将一堆人添加到我的邮件列表中,因为他们可能对我的内容不感兴趣,他们可能会认为我是垃圾邮件而且是一个糟糕的业务
  • 有人可以通过检查验证页面上的响应来设置地址(例如,如果响应是"mail@server.com已经过验证"等)
  • 有人可以创建虚假帐户,而无需拥有实际工作的电子邮件地址

我不确定后者的好处是什么,似乎为此目的创建一个丢弃地址要容易得多,但我只是想把它放在那里完成.

我的问题:

  • 我是否错过了电子邮件验证/确认的任何其他目的或利用
  • 我是否应该在电子邮件验证中添加安全层,例如验证码或时间延迟以防止暴力破解?
  • 我应该要求除重置代码以外的其他信息吗?像用户名或电子邮件地址一样?或者是安全问题类型的东西,还是他们在注册时输入的另一条信息?

这整件事的最佳实践是什么,真正需要付出多少顾虑和努力呢?风险与利益/安全与可用性......?

security email usability

4
推荐指数
1
解决办法
3835
查看次数

php类中的长属性列表 - 我可以缩短它吗?

我有两节课.两个类都使用属性列表,这些属性是相同的.此属性列表长度为75行.我想将它放在一个单独的文件中,然后两个类都可以访问.但我无法使用include.

如何更改我的文件更短,属性列表更灵活?

我不确定我是否提出了我的意见,所以我举一个例子:

我有课堂课堂吧.

水果列表属性私人$苹果,私人$香蕉私人$ grape在两个类别中使用.此外,这两个类还有一些其他属性,这些属性特定于每个类.

我想做这样的事情:

class foo 
{
 private $variable_one
 private $variable_two

 //DEFINE THE LIST OF FRUIT PROPERTIES HERE

 public function blahbla...
}
Run Code Online (Sandbox Code Playgroud)

和另一个文件

class foo 
{
 private $variable_three
 private $variable_four

 //DEFINE THE LIST OF FRUIT PROPERTIES HERE

 public function gibberish...
}
Run Code Online (Sandbox Code Playgroud)

现在因为将来我可能会扩展我的水果列表并添加菠萝和芒果但是除去香蕉,将该列表作为文件放在一个单独的地方,我可以修改它,以及所做的任何更改都会很方便将被任何使用水果属性列表的类采用.

另外它只是帮助我减少文件的长度...就像我说的,我的水果列表目前是75行,在两个类的前面都有这么长的模糊是相当烦人的.

我感谢有关如何实现这两个目标的任何意见或建议(灵活性和短文件).

非常感谢!

php oop properties class

3
推荐指数
1
解决办法
180
查看次数

请求 apple-touch-icon.png 时意味着什么

我知道苹果触摸图标是什么,而且我以前见过苹果桌面,所以我可以想象它会是什么样子。我还知道如何向我的网站添加苹果触摸图标。

但这是一个紧迫的问题:我不断收到(失败的)对此触摸图标的请求......那么这意味着什么?

苹果用户只是访问该网站吗?他们给它添加了书签吗?

苹果机器触发触摸图标请求的动作是什么?

apple-touch-icon

3
推荐指数
1
解决办法
4151
查看次数

javascript中的函数 - 定义和调用它们,有或没有函数名称

我的问题最容易解释为代码块和它下面的问题.

但这是试图用英语解释我的问题:

我正在学习JavaScript(而且我很懒,所以我使用了很多jQuery ...;))我遇到了一些我不太了解的东西,我不知道它叫什么,所以我不喜欢我知道应该研究什么术语.

基本上我想知道何时需要使用function(){ ... }(没有名称)以及何时使用function function_name(){ ... }(带有名称),以及如何使用.click() .post()或等执行函数setTimeout().

我知道一些jQuery函数,比如.click()需要你输入一个函数来调用.但问题是,你不能只说.click( function_name() )(如果我正确地解释了我的测试结果,这将在执行脚本时立即调用该函数)而不是你必须做.click( function(){ ... })或你可以做.click( function function_name(){ ... }).我还发现.click( function_name )只要事先定义就可以说,var function_name = function function_name(){ ... }而函数名是可选的,无论是否添加它都可以.

我举了一个例子,说明了我能想到的所有可能情况.我确实找到了什么工作,什么不工作,现在我想找出为什么每个人都在工作而其他人没有工作.

我希望理解这将有助于我更好地理解异步函数,如.post()setTimeout().

<button id="one">Button 1</button>
<button id="two">Button 2</button>
<button id="three">Button 3</button>
<button id="four">Button 4</button>
<button id="five">Button 5</button>
<button id="six">Button 6</button>
<button id="seven">Button 7</button>
<button id="eight">Button 8</button>
<button …
Run Code Online (Sandbox Code Playgroud)

javascript function function-calls

3
推荐指数
1
解决办法
4439
查看次数