我想创建一个config.php文件来保存通常从一个项目更改为项目的各种配置值,我想定义一个类来保存此文件中的配置值,如下所示:
class Config {
const DB_SERVER = 'localhost',
DB_NAME = 'abc',
DB_USERNAME = 'admin',
DB_PASSWORD = '12345',
WEBSITE_NAME = 'My New Website',
IMAGE_DIR = 'img';
}
Run Code Online (Sandbox Code Playgroud)
等等,我想在类中定义所有值作为常量,我会像下面这样调用它们:
$connection = mysql_connect(Config::DB_SERVER, Config::DB_USERNAME, Config::DB_PASSWORD) or die("Database connection failed..");
Run Code Online (Sandbox Code Playgroud)
我想知道:这种设置项目配置的方式是对的吗?这种方式有任何缺点吗?如果它是错的,那么最好的方法是什么呢?
Laravel框架中任何模型中主键列的名称是 id
protected $primaryKey = 'id';
Run Code Online (Sandbox Code Playgroud)
而且我知道我可以像这样更改默认名称:
protected $primaryKey = 'new_name';
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果我在表中有一个复合键(2列或更多列),如何将它们添加为$primaryKey
?我真的必须定义它们吗?
假设我有下一个javascript对象:
var errors = {
error_1: "Error 1 description",
error_2: "Error 2 description",
error_3: "",
error_4: "Error 4 description"
};
Run Code Online (Sandbox Code Playgroud)
如何确定对象中是否error_1
存在属性,并且该属性errors
也不为空?
我打算用Laravel框架创建一个API.并有可能成为API的多个版本,如果我继续发展它,如:v1
,v2
,v3
,等等.
而不是只有一个Laravel框架副本,并通过为每个版本创建不同的目录对其中的API进行版本控制,我正在考虑为每个版本的API创建一个完全独立的Laravel框架副本.
例如,假设这是API的URL:website.com/api
我正在考虑创建一个v1
在该api
目录中调用的目录,并在其中放入一个完整的Laravel副本.后来当我需要创建一个新版本的API时,我将创建另一个名为v2
旁边的新目录,v1
并在其中放入一个新的完整且独立的Laravel副本,依此类推.
这样,当我想访问API的版本1时,我将访问此URL:website.com/api/v1
当我想访问版本2时,我将访问website.com/api/v2
.
我的问题:这是个坏主意吗?这种方法的缺点是什么?
编辑:
为什么我会想到这种方法?
因为我想到了以下几点:
如何在 Windows 上使用 Git Bash 终端验证下载文件的 sha256 哈希值?例如PHP 版本。
如果我使用codeigniter活动记录从db表中获取数据,如下所示:
$where = array("first_name" => "John", "age <" => 30, "status" => "active");
$this->db->where($where);
$query = $this->db->get("my_table");
die(var_dump($this->db->last_query())); // displays the query string
Run Code Online (Sandbox Code Playgroud)
此代码将生成以下查询字符串:
SELECT * FROM (`my_table`) WHERE `first_name` = 'John' AND `age` < 30 AND `status` = 'active'
Run Code Online (Sandbox Code Playgroud)
现在如果我分配了一个字符串$where
而不是数组,就像这样:
$where = "first_name = 'John' AND age < 30 AND status = 'active'";
Run Code Online (Sandbox Code Playgroud)
然后它将生成以下查询字符串:
SELECT * FROM (`my_table`) WHERE `first_name` = 'John' AND age < 30 AND status = 'active'
Run Code Online (Sandbox Code Playgroud)
请注意,在分配字符串时$where
,codeigniter backticks (``)
仅在第一个字段的名称周围添加,这first_name …
我在AWS Route 53以外的注册商处注册了域名。准确地说,是在 namecheap.com。
现在,我想使用一些 Amazon AWS 服务,并且我发现最好使用 AWS Route 53 作为我的域的 DNS 服务。但我不想将我的域名从原始注册商转移到 AWS Route 53。
当我在 Route 53 中创建托管区域时,我获得了 4 个名称服务器值,我可以在域名注册商网站上将这些值与我的域名一起使用。
我的问题:在我的域名注册商网站上使用这些名称服务器和我的域名是否会自动使 AWS Route 53 成为该域的 DNS 服务?
我正在使用Codeigniter,我想防止可能发生的CSRF攻击尝试.为了实现这一点,我为每个我想要保护的表单添加了一个带有随机令牌的隐藏输入标记,同时我将这个令牌保存在会话中,以便在开始处理此表单数据时进行比较.
// set a token to prevent CSRF attacks
$csrf_token = md5(uniqid(rand(), true));
$this->session->set_userdata("csrf_token", $csrf_token);
Run Code Online (Sandbox Code Playgroud)
表单将如下所示:
<form action="path/to/handler/page" method="post">
<input type="text" name="title">
<input type="text" name="date">
<textarea name="content"></textarea>
<input type="hidden" name="csrf_token" value="<?php echo $this->session->userdata("csrf_token") ?>">
<input type="submit" name="submit" value="Save">
</form>
Run Code Online (Sandbox Code Playgroud)
在我处理提交数据的页面中,我检查CSRF攻击是这样的:
// make sure there is no CSRF attack attempt
$csrf_token = $this->session->userdata("csrf_token");
if (empty($csrf_token) || $csrf_token !== $this->input->post("csrf_token")) {
die("Some message here!!");
}
Run Code Online (Sandbox Code Playgroud)
这非常有效.但正如您所见,我为包含表单的每个页面生成一个随机令牌,在某些情况下,如果我在浏览器中打开另一个选项卡以执行其他操作,则会导致问题.考虑这种情况:
add.php
页面添加一个新项目.edit.php
在浏览器的另一个选项卡中打开页面来编辑现有项目.add.php
填写的页面并尝试提交数据.此时我将收到一个错误,因为当我打开add.php
页面时已经存储在会话中的令牌的值已被更改,并在我打开edit.php
页面时被另一个令牌替换.那么我该如何解决这个问题呢?我是否应该在成功登录时为每个用户生成一个令牌,然后在他可能处理的所有页面中使用此令牌?这种方法有任何风险或缺点吗?
哪种方法可以防止直接访问某个网站的某些目录?
1- .htaccess
在我们要保护的每个目录中创建并放置一个文件,并在其中放置下一行:
Deny from all
Run Code Online (Sandbox Code Playgroud)
2- index.php
在我们想保护的每个目录中创建并放置一个文件,并只在其中放置下一行代码(将重定向到网站的主页):
<?php header("Location: http://" . $_SERVER['HTTP_HOST']); ?>
Run Code Online (Sandbox Code Playgroud)
3-别的什么(它是什么?)
在我的 macOS 上安装Oh My Zsh框架来管理我的 Zsh 配置后,我发现文件的原始内容.zshrc
已完全被 Oh-My-Zsh 配置替换。我使用的旧文件中有许多别名和环境变量。
有没有办法让这些旧配置恢复与新 Oh-My-Zsh 配置一起使用?
php ×6
codeigniter ×2
laravel ×2
security ×2
.htaccess ×1
activerecord ×1
api ×1
class ×1
config-files ×1
csrf ×1
dns ×1
git-bash ×1
hash ×1
javascript ×1
macos ×1
oh-my-zsh ×1
sha256 ×1
terminal ×1
zshrc ×1