小编Zub*_*ir1的帖子

PHP,MySQL和时区

我正在尝试在我的应用程序中集成一个时区系统,我真的很努力避免现在使用时区感知应用程序 - 但它现在是强制性要求所以别无选择.时区只是我的头脑.我在PHP.net以及其他网站上阅读了几个主题,包括但不限于SO.但我永远无法掌握它.

所以我想知道是否有人可以帮助我在这里:(我想要做的是我的应用程序中的偏好选项,允许用户从选择菜单中选择自己的时区,但应用程序也应该能够设置/为每个用户选择相应的DST.

请相信这会帮助那些仍在努力掌握时区的人,所以请提供尽可能详细的解释,即使你不得不考虑我一个完整的dumbo/noob.


编辑赏金:

我正在为这个问题添加一个赏金,因为我真的需要一个关于编写PHP/MySQL应用程序的时区的好规范问题(因此我也添加了MySQL标记).我从很多地方找到了东西,但把它们放在一起会很好.查尔斯的答案很棒,但我仍然觉得它有些缺乏.以下是我想到的一些事情:

  • 如何从PHP DateTime对象存储数据库中的时间
  • 它们应该存放在DATETIMETIMESTAMP?每个有什么好处或警告?
  • 我们是否需要担心MySQL的时区DATE
  • 如何使用插入值NOW().这些是否需要在插入之前或之后以某种方式进行转换?
  • 是否有必要设置MySQL使用的时区?如果是这样,怎么样?应该是持久地还是每次HTTP请求?它必须设置为UTC还是其他任何东西?或者服务器的时间是否充足?
  • 如何从MySQL检索值并将它们转换为DateTime对象.将它直接放入DateTime::__construct()还是我们需要使用DateTime::createFromFormat()
  • 什么时候转换为当地时间.是否曾经有一段时间我们想要它回显给用户之前将其转换(例如,与另一个DateTime对象或静态值进行比较)?
  • 有没有时间我们需要担心夏令时(DST)?为什么或者为什么不?
  • 如果他们之前插入数据(例如使用NOW())而不担心时区以确保一切保持一致,那么应该怎么做?
  • 你认为有人应该注意的任何其他事情

如果可能,尝试将其分成逻辑部分,以便将来的用户更容易找到信息.请务必在必要时提供代码示例.

php mysql timezone datetime

22
推荐指数
2
解决办法
5308
查看次数

CSRF令牌与Nonce混淆 - 它们是一样的吗?

在试图让我开发更安全的当前应用中,我一直在阅读有关CSRF令牌,并杜撰 - 我想我已经掌握了CSRF令牌背后的想法,但我无法找到"好和简体"资源和Nonces的例子.

我的问题很简单,CSRF令牌和Nonce是一样的吗?从目前为止我可以收集到的是,这两种方法都有不同的技术来实现相同的目标,还是我误解了什么?

如果它们不同,你是否足够好提供一些示例代码或指向我的一些链接,我可以在其中了解更多关于如何在PHP应用程序中实现nonce.

谢谢!

php csrf nonce

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

解密和阅读Suhosin会话数据

我刚注意到我的主持人开始使用Suhosin Hardening,我对此并不熟悉,并且我的应用程序存在重大问题,主要是在会话中.

会话正在以以下格式存储:

_EzyqHpPJqmQbSpRmXAJTxuFq980aNQlc3XAiRkWxlZQ9B0fnV...
Run Code Online (Sandbox Code Playgroud)

我不介意,但它也打破了我的应用程序,我需要一种解码加密的方法,因为它不会让我登录到我的应用程序因此.

我有一个函数来反序列化会话数据,不知道我在哪里,但它是:

public function unserialize_session_data($data)
{
    $variables = array();

    $a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );

    for( $i = 0; $i < count( $a ); $i = $i+2 )
    {
        $variables[$a[$i]] = unserialize( $a[$i+1] );
    }

    return($variables);
}
Run Code Online (Sandbox Code Playgroud)

它给出了该函数的偏移错误,因为会话数据不是它期望的格式,这就是为什么我想知道是否有人知道解密/解码上述难看的suhosin数据的方法以原始格式呈现它?

- 编辑 -

发布使用上述反序列化函数的函数

 /***********************************************************************
 #  Get Session Data of a certain session id
 #  --------------------------------------
 #  This function will retrieve all session information related to a certain session id from
 #  the database, …
Run Code Online (Sandbox Code Playgroud)

php security suhosin

8
推荐指数
1
解决办法
3589
查看次数

Paypal的令牌ID独特吗?

Token ID它返回的paypal (即:) EC-XXXXXXXXXXXXXXXXX,总是独一无二的吗?我怀疑它会是什么?但我正在做的是我将它插入到我的事务表中以验证此事务是否已被处理.

我知道交易ID也可以工作,但问题是在使用PayPal API方法(如GetExpressCheckoutDetails或)之前首先返回令牌ID DoExpressCheckout.

根据您自己的经验,请让我知道您认为最好的.

谢谢

php paypal

8
推荐指数
1
解决办法
2110
查看次数

在MySQL中存储路线数据的最佳方式

我正在开发一个应用程序,它要求我存储一些位置的方向,下面是我试图存储的数据的示例:

方向1
从西部:沿528 East(Beechline)行驶,经过机场出口,然后从13号出口驶入Narcoossee Rd并左转,PARK TO FLY位于左侧1/4英里处.

方向2
从东部:乘坐528 West(Beechline),在机场出口前,从13号出口驶入Narcoossee Rd然后右转,PARK TO FLY位于左侧1/4英里处.

方向3
从佛罗里达州收费公路出发:从254号出口驶入528 East(Beechline),经过机场出口,然后从13号出口驶入Narcoossee Rd并转向左侧,PARK TO FLY位于左侧1/4英里处.

方向4
从417(绿道):从26号出口驶向528 West(Beechline),然后从13号出口驶入Narcoossee Rd,然后右转,PARK TO FLY位于左侧1/4英里处.

方向5
从408(东/西高速公路):从16号出口驶向South SR 551(Goldenrod Rd).驾驶aprox.4英里,在霍夫纳路左转.霍夫纳改名为Narcoossee Rd.PARK TO FLY位于您右侧2英里处.


我想知道是否有人能告诉我在MySQL中存储这些数据的最佳方法.

我想首先序列化保存这些数据的数组,然后将其存储到一个列中,我不认为我需要担心在数据库中搜索这个,所以它应该是好的吗?我明白它不会正常化.

但是你认为将它存储在一个单独的表中对长远来说是最好的吗?

更新

我有一个名为类似的mysql表Locations,它有关于特定位置的信息,现在我想将一些Directions与用户也输入的位置相关联.

  • 用户输入位置
  • 然后用户也可以输入关于方向的信息.

更新2
我问的是将数据存储在数据库中的最佳方法,目前我没有任何关系,因为我还没有为它创建表格,这就是我在这里要问的问题.我应该去哪里并创建一个如上所述的关系表,或者我应该在Locations表中为方向创建另一列,并序列化保存方向数据的数组以插入单个mysql列.

提前致谢!

php mysql

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

在PHP中使用cron manager

我想在我的php应用程序中添加一个部分来添加/删除计划任务.

类似于他们在vBulletin论坛中使用的东西.

有没有人有任何想法他们使用?他们是否正在使用cron作业,或者他们是否有定制的东西.

任何人都可以指导我如何完成类似的东西,基本上我只是希望我的脚本添加或删除cron作业/计划任务.

我不想使用,例如cPanel Cron接口,我想在我的脚本中实现这一点.

任何帮助是极大的赞赏.

php cron

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

IP地址验证帮助

我正在使用我在浏览时遇到的IP验证功能,它一直运行良好,直到今天我遇到了问题.

由于某种原因,该功能不会将此IP验证为有效:203.81.192.26

我对正则表达式并不太满意,所以会对可能出错的任何帮助表示感谢.

如果你有其他功能,如果你能为我发布,我将不胜感激.

该功能的代码如下:

public static function validateIpAddress($ip_addr)
{
    global $errors;

    $preg = '#^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}' .
            '(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$#';

    if(preg_match($preg, $ip_addr))
    {
        //now all the intger values are separated
        $parts = explode(".", $ip_addr);

        //now we need to check each part can range from 0-255
        foreach($parts as $ip_parts)
        {
            if(intval($ip_parts) > 255 || intval($ip_parts) < 0)
            {
                $errors[] = "ip address is not valid.";
                return false;
            }

            return true;
        }

        return true;
    } else {
        $errors[] = "please double check the ip address."; …
Run Code Online (Sandbox Code Playgroud)

php validation ip-address

4
推荐指数
2
解决办法
2596
查看次数

在MySQL解决方案中存储日期范围

我正在编写脚本,要求管理员能够在他想要停车场时插入日期,管理员在一个范围内插入日期.

我很难找到在MySQL中存储日期的最佳方法的解决方案.

我应该使用存储两列的日期AVAILABLE_FROM_DATEAVAILABLE_UNTIL_DATE

PLID    AVAILABLE_FROM DATE         AVAILABLE_UNTIL_DATE
1       2012-04-01                  2012-04-03
1       2012-04-05                  2012-04-15
2       2012-04-21                  2012-04-30
Run Code Online (Sandbox Code Playgroud)

或者我应该只使用一个列AVAILABLE_DATE并将管理员选择的范围存储在范围之间的每个日期的新行中?

[编辑开始]
我在上面使用单个列的意思是不将日期连接或拆分成单个列,我实际上是指将日期存储在单行中,如下所示:

PLID    AVAILABLE_DATE
1       2012-04-01
1       2012-04-02
1       2012-04-03
Run Code Online (Sandbox Code Playgroud)

对于我想要存储的所有可用日期等等.
[编辑结束]

基本上,管理员希望插入停车场可用的日期范围,并允许成员在用户正在寻找该范围内的插槽时选择该插槽.

或者有更好更简单的方法吗?

我目前正在尝试使用第一种方法,使用单独的列作为范围,但在查找范围内的停车场时无法获得所需的结果.

[编辑开始]

SELECT * FROM `parking_lot_dates`
WHERE (available_from_date BETWEEN '2012-04-22' AND '2012-04-30'
AND (available_until_date BETWEEN '2012-04-22' AND '2012-04-30'))
Run Code Online (Sandbox Code Playgroud)

我对上面的行使用以下查询,它返回空.我希望它返回具有PLID 2的最后一行.
[编辑结束]

先感谢您.

php mysql database

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

使用Laravel 5.4和Passport进行Multi Auth

我正在尝试使用Laravel Passport设置多个身份验证,但它似乎不支持它.我使用密码授予发出令牌,要求我传递想要访问令牌的用户的用户名/密码.

我有3个auth警卫/提供者设置,总共4个.用户,供应商,管理员和API

其中2个Auths需要访问护照,因此每个用户都需要能够发放令牌.但是,Passport会自动获取API身份验证提供程序,但我希望根据登录的用户进行更改.如果用户确实是用户提供商,那么它是供应商,然后是供应商提供商.

但Passport目前只支持1种用户类型,因此默认为API提供者.

这有什么更好的吗?或者我应该使用基于角色的身份验证.

php oauth-2.0 laravel laravel-passport

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

php删除多个空格

我一直遇到麻烦,我想知道是否有人知道preg_replace正则表达式可以删除除了从字符串遇到的第一个空格以外的所有空格.

|实例|

我有以下字符串:"我的第一个姓氏"


我想要实现的是:"我的FirstLastName"

对不起,但我对正则表达式很糟糕:(所以任何帮助表示赞赏.

php regex preg-replace

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

在PHP中使用IF语句的奇怪行为

我注意到我的脚本中有一些奇怪的行为,不知道为什么它会发生.

if ($date != 'NOW()' ||  $date != 'NULL')
{
   // throw error      
} else {
   // run functions
}
Run Code Online (Sandbox Code Playgroud)

我在我的一个函数中有一个类似于上面的IF语句,我传递了'NULL'我的函数中的值,它正在接收.但是在与IF语句进行比较时,它不起作用.它总是跳过其他声明.

更新:
下面是我的功能的完整代码,我希望它有所帮助.

public function setLastLoginDate( $date )
{
    if (isset($date) && !empty($date))
    {
        if ($date != 'NOW()' ||  $date != 'NULL' || is_datetime(convertDateTimeToSql($date)) == false)
        {
            $this->errors['user_last_login'] = 'invalid date specified.';
        } else {
            this->properties['user_last_login'] = $date;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后更新
使用&&确实可以工作而不是||,但我从不打算使用&&.如果这就是它的假设那么我想我必须重新阅读.

是不是&&检查两个变量是否返回true?喜欢if (is_string($foo) && strlen($foo) > 1)?但我想检查变量是否包含任何值

但这也对我有用:

if ( $date == 'NOW()' || …
Run Code Online (Sandbox Code Playgroud)

php

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

jQuery - 为多个事件和绑定添加相同的操作

我一直试图找到一种方法为多个事件添加相同的操作.

我将以下操作分配给#comid(这是一个选择菜单).

$("#comid").change(function()
{
    comid = $("#comid").val();
    //alert(comid);

    $('#com_photo').addClass('loading');

    $('#com_photo').load('ajax.php?requestType=ajax&action=get_com_photo&comid=' + comid, function() {
        $('#com_photo').removeClass('loading');
        $('#com_photo img').hide();
        $('#com_photo img').fadeIn(1000);
        alert('Image Loaded.');
    });
});
Run Code Online (Sandbox Code Playgroud)

现在,上面的代码运行良好.当用户从选择菜单中选择一个项目时,触发更改事件并发出ajax请求,并显示图像以及一个提示"Image Loaded"的警告窗口.

但是,如果用户不使用鼠标而是使用键盘keyup/keydown从菜单中进行选择,我希望触发相同的操作.它默认情况下没有这样做,我希望它做但但似乎并非如此,所以我想为keyup或keydown事件分配相同的动作,但我不想写(或复制/粘贴)相同的代码再次.

经过一段时间的搜索我发现了关于bind(),我尝试这样做:

$("#comid").bind('keyup',function(event){
    $("#comid").trigger('change');
}
Run Code Online (Sandbox Code Playgroud)

它工作,但当我使用密钥时,我看到警报窗口两次说"图像已加载",所以我发现该行为不需要,因为它似乎是两次请求.

有什么我做错了吗?还是有更好的替代方案,我想要完成的事情?

提前致谢 :)

jquery binding

0
推荐指数
1
解决办法
1485
查看次数