小编Amr*_*Amr的帖子

设置配置PHP类以保持项目设置是否正确?

我想创建一个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)

我想知道:这种设置项目配置的方式是对的吗?这种方式有任何缺点吗?如果它是错的,那么最好的方法是什么呢?

php configuration class config-files

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

Laravel:如何在相关模型中添加复合键(2列或更多列)作为$ primaryKey?

Laravel框架中任何模型中主键列的名称是 id

protected $primaryKey = 'id';
Run Code Online (Sandbox Code Playgroud)

而且我知道我可以像这样更改默认名称:

protected $primaryKey = 'new_name';
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果我在表中有一个复合键(2列或更多列),如何将它们添加为$primaryKey?我真的必须定义它们吗?

php composite-primary-key laravel

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

在Javascript中,如何确定对象属性是否存在且不为空?

假设我有下一个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也不为空?

javascript

10
推荐指数
1
解决办法
2万
查看次数

为每个API版本使用单独的目录

我打算用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.

我的问题:这是个坏主意吗?这种方法的缺点是什么?


编辑:

为什么我会想到这种方法?

因为我想到了以下几点:

  • 如果有一天我想要使用除Laravel之外的PHP框架创建新版本的API,该怎么办?
  • 如果有一天我想用PHP以外的编程语言创建新版本的API会怎样?
  • 如果有一天我想要升级到更新版本的Laravel并且该版本对最初创建API的版本进行了重大更改,该怎么办?

php api laravel api-versioning

10
推荐指数
4
解决办法
1700
查看次数

如何在 Windows 上使用 Git Bash 终端验证下载文件的 sha256 哈希值?

如何在 Windows 上使用 Git Bash 终端验证下载文件的 sha256 哈希值?例如PHP 版本

terminal hash sha256 git-bash

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

这是Codeigniter活动记录中的错误吗?

如果我使用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 …

php activerecord codeigniter

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

如何使用 AWS Route 53 作为域名的 DNS 服务,而不将该域从原始注册商转移到 Route 53 服务?

我在AWS Route 53以外的注册商处注册了域名。准确地说,是在 namecheap.com。

现在,我想使用一些 Amazon AWS 服务,并且我发现最好使用 AWS Route 53 作为我的域的 DNS 服务。但我不想将我的域名从原始注册商转移到 AWS Route 53。

当我在 Route 53 中创建托管区域时,我获得了 4 个名称服务器值,我可以在域名注册商网站上将这些值与我的域名一起使用。

我的问题:在我的域名注册商网站上使用这些名称服务器和我的域名是否会自动使 AWS Route 53 成为该域的 DNS 服务?

dns amazon-web-services amazon-route53

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

一个令牌与多个令牌以防止CSRF攻击

我正在使用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)

这非常有效.但正如您所见,我为包含表单的每个页面生成一个随机令牌,在某些情况下,如果我在浏览器中打开另一个选项卡以执行其他操作,则会导致问题.考虑这种情况:

  1. 我打开add.php页面添加一个新项目.
  2. 我填写了所有必需的数据,但我没有提交表格.
  3. 现在我决定edit.php在浏览器的另一个选项卡中打开页面来编辑现有项目.
  4. 然后我回到add.php填写的页面并尝试提交数据.

此时我将收到一个错误,因为当我打开add.php页面时已经存储在会话中的令牌的值已被更改,并在我打开edit.php页面时被另一个令牌替换.那么我该如何解决这个问题呢?我是否应该在成功登录时为每个用户生成一个令牌,然后在他可能处理的所有页面中使用此令牌?这种方法有任何风险或缺点吗?

php security codeigniter csrf

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

防止网站某些目录被直接访问的最佳方法是什么?

哪种方法可以防止直接访问某个网站的某些目录?

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-别的什么(它是什么?)

php security .htaccess

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

在 macOS 中,安装 `Oh-My-Zsh` 框架并用其配置替换后,如何取回 `.zshrc` 文件的内容?

在我的 macOS 上安装Oh My Zsh框架来管理我的 Zsh 配置后,我发现文件的原始内容.zshrc已完全被 Oh-My-Zsh 配置替换。我使用的旧文件中有许多别名和环境变量。

有没有办法让这些旧配置恢复与新 Oh-My-Zsh 配置一起使用?

macos zshrc oh-my-zsh

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