小编Vla*_*mir的帖子

如何自动加载smarty插件

我们有一个带有Smarty模板引擎的PHP脚本插件,

它可以在{plugin_name}的模板文件中使用,但需要确保它在每个模板文件上,问题是:

有没有办法在脚本加载时自动加载此插件?

脚本不是开源的,但Smarty及其文件(如Smarty.class.php等)未加密.

编辑

我需要做的就是在模板文件加载之前自动加载Smarty插件(与数据库的交互很少),这是否可以/只用Smarty文件实现?(脚本本身是加密的,但Smarty_Compiler.class.php,Smarty.class.php,Config_File.class.php和其他聪明的核心功能都是开源的)

php smarty

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

我可以为用户提供加密字符串,并确保它在1-2小时内是安全的

我们正在做一个简单的游戏,其中:

  • 用户收到next number of play作为encrypted string 之前他们玩
  • 之后他们玩,加密password提供给他们检查游戏数量是正确的.
  • 每个加密的字符串only valid for 1-2 hours和播放次数,验证字符串和加密字符串在此之后再次重新生成
  • 加密的字符串包含验证(5个字符)代码,因此两个用户和我们都可以确保解密过程成功

要加密的示例字符(QQ9LU在播放前提供给用户的随机验证码):

下一个游戏编号:8 - 验证字符串:QQ9LU

示例加密字符串(在播放前提供给用户):

NXRykKOv3B6kuu4Ke3svp7HH3enNiqIZrJSXJiF54QkHHjtXgqpUXxyuP7YUNICeFLg ==

示例密码(播放后提供):

请注意,这是为每次加密随机生成的

FA00RDjA77hlOzcOzH6kuGcc29CyM7Hw

我们使用CodeIgniter 2.2.2加密类来加密/解密字符串

加密方法信息:

  • 使用的功能:$this->encrypt->encode($msg, $pass);每次随机传递
  • 密码是CodeIgniter 2的默认值 MCRYPT_RIJNDAEL_256
  • Mcrypt模式是 MCRYPT_MODE_CBC

我的问题是:

  1. 我能相信用户在1-2小时内无法破解加密的字符串(并在获取密码之前知道播放的次数)(除了运气好)

  2. 将随机验证码Verify String: T3YH4放在哪里好或坏?是影响安全吗?(这是为了验证解密结果是否成功,我们也添加了它,因为每个字符串中唯一的变量是一个数字,例如只有数字8变为7,所以我们想要在字符串中添加更多变量字符以便可能有一个安全性更好)

任何其他建议表示赞赏

php encryption codeigniter

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

数据库中历史表的SUM,以显示用户的总信用(信誉)

说明:

  • 我有一个脚本,显示每个用户的总信用(信誉),并且它在数据库中有一个历史表,用于获取所有用户的信用额度

以下是我的历史数据库表的示例:

 +----------------------------------------------+
 | DATE     ID     USERNAME       CREDITS       |
 +----------------------------------------------+
 | ...      1         X              12         |
 | ...      2         E               2         |
 | ...      3         X               1         |
 | ...      4         X              -7         |
 | ...      5         O               4         |
 +----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
  • 我的脚本使用SELECT SUM FROM表WHERE username ='X'并回显它,所以在这种情况下对于用户X(12 + 1 - 7)它回应6

问题:

  1. 我想知道是不是这个(选择所有的历史SUM显示一个用户信用INSTEAD具有总用户credids不同的表),将会使问题如果历史表是如此巨大?(几年后我们说+100,000,000条记录)

  2. 这是大多数专业程序员的工作吗?(如果不是,那是什么)

  3. 那么历史部分呢,如果用户想要查看信用记录,我们应该使用LIMIT 100记录来限制它*SELECT*ing或no(性能)

  4. 这应该在每次页面刷新或每个页面更改时运行吗?(如果1000个用户在线并且每次刷新都应用此SELECT查询,则不会降低服务器速度)

编辑答案后:

但是,如果我们必须将总数保存在不同的表中并自动更新它们,则存在两个问题:

  1. 如果我们确切地在用户收到一些积分时这样做,那么用户可能在同一时间(可能)收到两个不同的积分,并且因为我们不能将自动递增放在总计表中(因为每个用户只有有1个记录)我们可能会错过1个积分,或者如果有这个问题的解决方案,我不知道这一点

  2. 如果我们将Cron-Job设置为频繁执行,那么在cron作业刷新总计表之前,用户信用不是最新的

php mysql

12
推荐指数
2
解决办法
1322
查看次数

CodeIgniter 2.x set_cipher和set_flashdata不能一起使用

当我尝试使用set_cipher,并set_flashdata在笨在一起,flashdata未设置并记录一个PHP错误.

要在新的 CI 上重现这一点:

更改以下config.php行(从默认CI配置更改):

$config['sess_encrypt_cookie'] = TRUE;
$config['log_threshold'] = 1; // To log the error 
// Encryption key should be set, just set anything, for example:
$config['encryption_key'] = 'HjyePR4FPF70vHKaHTl8jZ0hSMgOu5bW';
Run Code Online (Sandbox Code Playgroud)

控制器(尽可能简化):

<?php

class Welcome extends CI_Controller {

 function __construct(){parent::__construct();}

 function index()
 {
 $this->load->library('session');
 $this->load->library('encrypt');

 $this->encrypt->set_cipher(MCRYPT_BLOWFISH);
 $this->encrypt->encode('message');

 $this->session->set_flashdata('item', 'value');
 }

}
Run Code Online (Sandbox Code Playgroud)

然后只需在浏览器和刷新页面中打开控制器,您将看到flashdata未设置,如果CI应用程序日志文件夹具有正确的权限,则会记录以下错误:

严重性:通知 - > unserialize():偏移0处的错误为286字节/Applications/MAMP/htdocs/final/system/libraries/Session.php 741

1.这是CodeIgniter错误还是我做错了什么?

2.我该怎么做才能工作?

P.S. had to change cipher because default encryption result was too …

php codeigniter

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

PHP:如何防止代码的多次执行(如果它已经在进行中)

说明

通常需要10-20秒响应的API调用(到另一个服务)存储在数据库中,

存储后,系统会立即尝试使用API​​向用户显示结果,但它可能会失败(并显示失败但我们会自动重试),因此还有一个Cron Job设置每隔30秒运行一次再次尝试(失败)查询.

如果API返回成功(无论是即时使用还是使用Cron Job),则标志在数据库中更改为成功,并且不会再次运行.

问题

我的问题是当Instant CallAPI正在进行中时,Cron Job可能还会尝试另一个调用,因为它尚未标记为成功,

同样在极少数情况下,当前一个Cron Job正在进行时,下一个Cron Job可能会再次运行代码.

我已经试图阻止这个问题

我尝试将In ProcessAPI调用存储在数据库表中,Status=1并在API调用成功时将其删除,或者如果失败则将状态设置为0,

 if ($status === 0)
 {

     // Set Status to 1 in Database First (or die() if database update failed)

     // Then Call The API

     // If Failed Set Status to 0 so Cron Job can try again

     // If Successful Change Flag to success and remove from queue

 }
Run Code Online (Sandbox Code Playgroud)

但如果在同一时间发生Instant CallCron …

php mysql cron

12
推荐指数
3
解决办法
3778
查看次数

如何在html源代码中处理空格和制表符(以及换行符)

在html中编写干净且易读的代码时,如何处理换行符和空格

例如,如果我在下一行使用break,则两者之间会有一个额外的空间

<style type="text/css">
    a {margin:0px; border:1px solid #666; padding:10px; text-decoration:none;}
</style>
<div>
    <a href="#">Test 1</a><a href="#">Test 2</a> <!-- SAME LINE -->
    <a href="#">Test 3</a> <!-- NEW LINE -->
    <a href="#">Test 4</a>
</div>
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

所以我该怎么做,

是否有一种标准的方法来处理这个或我只是应该写一行中的所有HTML代码,如果我不想要空格和标签之间的中断,就像这样

编辑:

谢谢大家,但我已经知道额外的空间缩小成一个和如何(输入)行为,问题是我不想进入这样做(在我的标签之间放一个空格因为那时我必须以我的风格处理那个空间),所以我不必在同一行写我的代码(我想写它干净,可读)

编辑2:

我想我必须再多清楚一下这个问题

我需要这个代码:

<div>
    <a href="#">Test 1</a>
    <a href="#">Test 2</a>
    <a href="#">Test 3</a>
</div>
Run Code Online (Sandbox Code Playgroud)

显示(由用户看到)并且像这样的代码:(由于换行符或空格,中间没有额外的空格)

<div>
    <a href="#">Test 1</a><a href="#">Test 2</a><a href="#">Test 3</a>
</div>
Run Code Online (Sandbox Code Playgroud)

这个额外的空间让我很麻烦,

这有解决方案吗?也许造型身体不计算空间并输入" 标签之间(当然不在标签内的文本之间)"作为结果中的空格?

解决方案

通过阅读ChiefGui关于最后一部分的答案,他提到了浮动,所以只需添加float:left; 到我的代码上面我的问题解决了

在线:jsFiddle

码:

<style type="text/css">
    a {float:left; margin:0px; border:1px solid #666; …
Run Code Online (Sandbox Code Playgroud)

html css

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

包含带有变量的 tpl 文件(Smarty)

我有一个“links.tpl”文件,其中包含具有许多变量的行,如下所示

{assign var=link_main value="index.php"}    
{assign var=link_login value="?a=login"}  
Run Code Online (Sandbox Code Playgroud)

但是当我在 home.tpl 中包含这个文件时,使用{include file="file.tpl"} 的变量 {$link_main}, {$link_login} 不包括在内

我把它 {assign var=link_main value="index.php"} 放在 home.tpl 中,它可以工作,但不能从包含的文件中

我曾尝试添加scope=global到变量和父级以包含但什么也没发生

我在过去几个小时内尝试找到解决方案,感谢您的帮助

smarty

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

防止以.php文件扩展名加载页面(仅在没有它的情况下加载)

我的.htaccess文件中有一个重写条件,它不需要.php文件扩展名

RewriteEngine On
RewriteRule ^([^.]+)$ $1.php
Run Code Online (Sandbox Code Playgroud)

所以http://site.com/blog打开http://site.com/blog.php

但如果旧用户键入/blog.php,它也会加载页面

有没有办法防止或重定向页面与.php或任何其他文件扩展名没有它?

我的意思是如果用户输入/blog.php或/blog.asp它应该无法加载或重定向到/ blog(没有扩展)

php .htaccess

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

Firefox中的CSS对角线边框别名

我通过使用CSS中的border属性绘制了一个形状.它在Chrome中看起来不错,但在Firefox中,边框非常难看:

.shape
{
	width: 100px;
	height: 50px;
	margin: 0 auto;
	background-color: #3F7296;
	position: relative;
	color: #FFF;
	line-height: 50px;
	font-size: 40px;
}
.b1, .b2
{
	position: absolute;
	left: 100px;
	bottom: 0px;
	width: 0px;
	height: 0px;
	border-style: solid;
	border-width: 0px 0px 50px 16px;
	border-color: transparent transparent transparent #3F7296;
}

.b2
{
	left: -16px;
	border-width: 50px 16px 0px 0px;
	border-color: transparent #3F7296 transparent transparent;
}
Run Code Online (Sandbox Code Playgroud)
<div class="shape">
	<i class="b1"></i>
	<i class="b2"></i>
</div>
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/Ly1dz111/

Chrome的屏幕截图:

尼斯

Firefox(Mac OS X)的屏幕截图

丑陋

如何在Firefox中修复此问题?

html css firefox border antialiasing

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

从用户输入获取字母数字字符串的安全方法?(没有preg_replace)

我已经阅读了许多关于如何将字符串过滤为"字母数字"的其他问题,但所有这些问题都提示了该preg_replace()方法.

根据OWASP:

函数preg_replace()不应与未经过消毒的用户输入一起使用,因为有效负载将为eval()'ed13.

preg_replace("/.*/ e","system('echo/etc/passwd')");

反思也可能有代码注入缺陷.请参阅相应的反射文档,因为它是一个高级主题.

那么现在如何在没有preg_replace的情况下实现这一目标?

$result = preg_replace("/[^a-zA-Z0-9]+/", "", $_POST['data']);
// Notice the $_POST['data']
Run Code Online (Sandbox Code Playgroud)

php security

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