小编Chr*_*ian的帖子

我应该定位哪个版本的.NET框架?

我是桌面C#开发人员(不是ASP),我想知道小型个人项目的版本定位.当然,这些都是为了尽可能扩大受众范围,所以我一直瞄准.NET 3.0(这是没有任何服务包的Windows Vista系统上的最新版本)和2.0(这是最简单的与VS2008兼容的兼容版本).

不幸的是,这使我无法学习任何技术,例如3.0版后推出的LINQ,并且即将转向VS2010,我想知道我是否应该以牺牲用户为代价来定位新的4.0平台,而不是最新的和最好的,或者应该我只是坚持尝试尽可能广泛的用户群?

.net .net-3.0 .net-4.0 .net-3.5 .net-2.0

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

在PHP应用程序中存储系统配置的最佳方式(编码方式)是什么?

注意:配置保存在PHP文件中config.php.

我已经看到了不同的做法,这里是一个简短的示例列表(我在这些示例中存储数据库信息):

常数:全局,只读

define('DB_USER','user12');
define('DB_PASS','21user');
Run Code Online (Sandbox Code Playgroud)

使用GLOBALS数组:全局,可变,重复,与其他全局变量混合

$GLOBALS['DB_USER']='user12';
$GLOBALS['DB_PASS']='21user';
Run Code Online (Sandbox Code Playgroud)

使用非全局数组但提升了globaly:可能比第二个选项更差

$config=array(); ...

$config['DB_USER']='user12';
$config['DB_PASS']='21user';

... global $config;
    mysql_connect('localhost',$config['DB_USER'],$config['DB_PASS']);
Run Code Online (Sandbox Code Playgroud)

定义类属性:(全局,可枚举)

class Config {
    public $DB_USER='user12';
    public $DB_PASS='21user';
}
Run Code Online (Sandbox Code Playgroud)

标准/选项/特点:

  • 编码的简易性:您不希望检查设置是否存在或初始化
  • 易于修改:非程序员/外行可以轻松修改设置
  • 存放在干净的地方:不与其他变量混合(可以存储在子数组中)
  • 运行时修改:在某些情况下,其他开发人员可以轻松修改现有设置

在系统运行期间可能需要更改配置,因此选项1已不可行.第三种选择也不太干净.


在写这篇文章的时候,我对主观和封闭的讨论发出了重大警告.因此,继续关注主题,并给出有效的理由来解答您的问题.


这是一个非常明显的问题,考虑到我对不同的答案非常熟悉,你可能会问,为什么我要大惊小怪呢?问题是,我正在开发一个框架,并且与另一个框架(*ahem*joomla*ahem*)不同,我不想通过他们错误的投掷错误信息的解决方案,最终必须更改/在将来重新定位.


编辑:首先,配置文件的位置与我无关.如果他们愿意,我会确保人们可以轻松更改位置,但这不是必需的.首先,廉价的虚拟主机不允许这样做,其次,就安全性而言,这真的不是一个好的选择.为什么?因为,框架需要知道配置的位置.真的,通过默默无闻的安全措施不起作用.我宁愿修复所有RFI和XSS(例如),而不是偏执地将配置文件隐藏在多个层下.

php config system

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

Kotlin 公开的批量插入无法按文档工作

我正在尝试使用 Kotlin Exposed 将记录批量插入到 SQL 表中。我已经按照公开文档设置了代码,但是,正在执行的 SQL 语句是单独的插入语句而不是 1 个批量插入语句。

位于此处的文档: https: //github.com/JetBrains/Exposed/wiki/DSL 有关批量插入的内容如下:

批量插入

批量插入允许在一个 sql 语句中将实体列表映射到数据库原始数据中。它比一条一条插入效率更高,因为它只启动一条语句。这是一个例子:

    val cityNames = listOf("Paris", "Moscow", "Helsinki")
    val allCitiesID = cities.batchInsert(cityNames) { name ->
      this[cities.name] = name
    }
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

    val mappings: List<Triple<String, String, String>> = listOf(triple1, triple2, triple3)
    transaction {
        TableName.batchInsert(mappings) {
            this[TableName.value1] = it.first
            this[TableName.value2] = it.second
            this[TableName.value3] = it.third
        }
    }
Run Code Online (Sandbox Code Playgroud)

我期望看到打印的是 1 个批量插入语句,其语法如下

INSERT INTO TableName (value1, value2, value3) values
(triple1value1, triple1value2, triple1value3),
(triple2value1, triple2value2, triple2value3),
(triple3value1, triple3value2, triple3value3), ... …
Run Code Online (Sandbox Code Playgroud)

kotlin-exposed

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

使用git(对于私人回购网站代码)?

这可能是关于惯例,最佳做法和/或个人偏好的问题:

所以我是一个git noob,我的网站代码不值得分享,所以我不使用github等.

知道git不需要中央存储库我想:很棒,我的工作站和服务器是两个节点,我只是将更改从我的工作站推送到服务器.

当我开始时,代码只在服务器上,所以我:

  1. 在服务器上: git init
  2. 在工作站上: git clone me@myserver:path/to/repo
  3. 在当地做出改变和承诺
  4. 在工作站上: git push me@myserver:path/to/repo

我得到了奇怪的结果.我在本地添加的文件出现在服务器上,但未反映对现有文件的更改.

然后我读了一个警告,不要推送到已检出的远程分支.所以新的设置是:

  1. 跑来git clone --bare制作一个裸库
  2. 将裸存储库放在我的服务器上(~/repos/mysite.git- 不是公用文件夹)
  3. 代码本地和: git push me@myserver:repos/mysite.git
  4. 在服务器上:git pull ~/repos/mysite.git获取最新信息

这是正确的?这合乎逻辑吗?这是你会做的吗?

git git-push

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

Paypal沙盒IPN返回INVALID

我正在尝试使用servlet进行IPN回调.我正在使用的代码由paypal提供,用于验证ipn数据.但每次我收到INVALID回复.

这是代码:

Enumeration en = req.getParameterNames();
String str = "cmd=_notify-validate";

    while (en.hasMoreElements()) {        
        String paramName = (String) en.nextElement();
        String paramValue = req.getParameter(paramName);

//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"UTF-8"); // for UTF-8 i set the encode format in my account as UTF-8
//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"ISO-8859-1");// for ISO-8859-1 i set the encode format in my account as ISO-8859-1
str = str + "&" + paramName + "=" …
Run Code Online (Sandbox Code Playgroud)

paypal sandbox paypal-sandbox

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

Internet Explorer中的只读输入框错误

我有一个奇怪的错误,好吧,MSIE.

似乎它在所有主要的MSIE版本上都失败了:6,7,8和9(!)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" ><head><title>test</title>

  <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
  <script type="text/javascript">
   jQuery(document).ready(function(){
    var test=jQuery('#in');
    test.focus(function(){
     if(test.val()=='empty')test.val('');
     test.attr('readonly',false);
    });
    test.blur(function(){
     if(test.val()=='')test.val('empty');
     test.attr('readonly',true);
    });
   });
  </script>

</head><body>

  <input type="text" value="empty" readonly="readonly" id="in"/>

</body></html>
Run Code Online (Sandbox Code Playgroud)

让我解释一下这个系统是如何工作的以及出了什么问题.

当用户单击(聚焦)输入框时,应使输入框可编辑(即丢失只读标志).然后,当他/她离开输入框(即模糊事件)时,完成一些处理(未在代码中示出)并且输入框是只读的.

这在大多数浏览器(firefox,opera,基于webkit)中都很有魅力,但不是任何版本的IE(包括9 beta).问题是在IE中,用户必须单击输入框两次.

此时,您可能会问第一次输入框是否只读?不,我测试了它,javascript报告它是可编辑的.

轻松修复,只需在输入框上触发点击事件(模拟用户的双击行为),不是吗?没有,.click()并且.focus()都失败了.不知道为什么.

编辑:知道光标确实显示在文本框中,至少是明显的.

重要提示:人们,请在回答前至少尝试一下代码!

javascript jquery internet-explorer

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

内容类型不随CURLOPT_HTTPHEADERS而改变

我正在尝试使用以下代码将一些JSON发布到使用cURL的Web服务:

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_URL, 'http://index.yolink.com/index/define?o=json&ak=APIKEY');
curl_setopt($ch, CURLOPT_HTTPHEADERS,array('Content-Type: application/json'));

$data = array(
  'ignore-robots' => 'false',
      'language' => 'english',
  'crawl-delay' => '0',
  'depth' => '3',
  'root' => array('url' => 'http://bartleby.com/')
);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result=curl_exec($ch);
var_dump($result);
Run Code Online (Sandbox Code Playgroud)

我得到以下回报:

string(282)"HTTP/1.1 200 OK服务器:Apache-Coyote/1.1访问控制允许 - 来源:*内容类型:text/plain内容 - 长度:120日期:星期五,2011年3月18日19:03:23 GMT {"code":"error.indexdefinition.invalid","message":"为/ define提供的内容无效.错误:文件过早结束.."}"

我发现这篇博文似乎是相关的 - text/plain即使我已经指定了ContentTypein CURLOPT_HTTPHEADERS,它似乎确实在发送application/json.但添加http_build_query没有帮助.

在此先感谢您的帮助!

php post json curl

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

Wordpress 如果 usermeta meta_key 存在,请执行此操作

我相信这对你们所有人来说都很容易,但这对我来说是全新的。

基本上,我想检查登录用户的个人资料是否附加了某些元数据,网站上是否会显示某些内容。

用户的元数据存储在 wp_usermeta 表中,该表包含 umeta_id、user_id、meta_key 和 meta_value。本质上,我需要查看 user_id 是否有一个名为“test”的 meta_key。

我知道 get_user_meta() 函数,但我无法让它按照我想要的方式工作......

global $current_user;

get_currentuserinfo(); // wordpress global variable to fetch logged in user info

$userID = $current_user->ID; // logged in user's ID
$havemeta = get_user_meta($userID, 'test', true); // stores the value of logged in user's meta data for 'test'.

if (isset($havemeta)){
    echo $havemeta;
} else {
    echo "No";
}
Run Code Online (Sandbox Code Playgroud)

这段代码的理论是,我检查 meta_key 'test' 是否包含一个 meta_value,如果为真,则执行 X 否则执行 Y。令人烦恼的是,并非所有用户都有一个 'test' 的 meta_key。因此,如果登录用户没有此元密钥,则代码不起作用。此外,我不想检查元键的实际值(我所关心的可以是 NULL),我只想知道登录用户是否存在这样的键。

有任何想法吗?

mysql wordpress metadata key

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

CSS概述最佳实践

关于执行以下操作的做法存在一些争议:

a, input, textarea, button {
    outline: none;
}
Run Code Online (Sandbox Code Playgroud)

可访问性问题是一个常见问题.

我不打算完全删除此功能(如上面的代码所示); 但是,这个功能通过在不受欢迎的区域添加非预期的边框(嗯,轮廓?)而极大地混淆了我的原始设计.

主要问题是这些轮廓实际上遵循元素周围的矩形区域,而不是其轮廓(即它忽略边界半径等).

例:

div {
    margin: 64px;
}

input {
    font-size: 20px;
    border-radius: 16px;
    border: 2px solid #CCC;
    padding: 2px 12px;
}

button {
    font-size: 20px;
    border-radius: 32px;
    text-transform: uppercase;
    color: #FFF;
    border: 2px solid #CCC;
    background: #CCC;
    padding: 6px 3px;
    cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)
<div>
    <input type="text" placemark="Search query..."/>
    <button>Go</button>
</div>
Run Code Online (Sandbox Code Playgroud)

我所知道的唯一解决方案是运行上面的代码并使用我自己的系统.

采用这种方法时最佳做法是什么?

css usability accessibility outline

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

PHP连接优先级

这种行为在PHP中是否正确?

<?php echo '-' . 1 + 1 . ' crazy cats'; ?>
// Outputs:
0 crazy cats
Run Code Online (Sandbox Code Playgroud)

据我所知,减号被连接到第一个'1'和'-1'连接到整数,而不是'2'连接到字符串.

请解释原因.

解决它的最佳方法是什么?这个?

<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?>
Run Code Online (Sandbox Code Playgroud)

php casting operator-precedence

6
推荐指数
2
解决办法
923
查看次数