我的CSS文件实际上是一个PHP文件,它与内容类型一起提供,text/css以便我可以在该文件中使用PHP变量.style.php看起来像这样:
<?php
header('Content-Type: text/css');
$bgColor = '#000';
?>
body { background:<?php print $bgColor; ?>; }
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但如果浏览器缓存动态创建的css文件,我有点担心.
在查看firebug中的请求时,我觉得style.php每次重新加载页面时浏览器都会重新加载.
我已经尝试添加这些缓存标头:
header('Cache-control: must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 60 * 60 * 24) . ' GMT');
Run Code Online (Sandbox Code Playgroud)
但没有运气.每次加载页面时仍会加载该文件.为了强制浏览器在一定时间内缓存文件,有哪些适当的标题?
PHP有一个很好的独立模拟框架吗?目前我正在使用Simpletest框架进行单元测试.我喜欢这个框架,但我不喜欢你如何在其中创建和设置模拟.然后我尝试了PHPMock,我喜欢它可以如何使用,但是我遇到了一些随着时间推移而烦人的错误...或者最好切换到PHPUnit进行单元测试和模拟?
我真正喜欢的是简单但功能强大的东西,比如PHP中的C#Moq框架(当然没有泛型,lambdas等)).
我正在玩C#中的垃圾收集器(或者更确切地说是CLR?)试图更好地理解C#中的内存管理.
我制作了一个小样本程序,将三个较大的文件读入byte[]缓冲区.我想看看,如果
byte[]在当前迭代结束后将其设置为null 时,它会产生任何影响GC.Collect()免责声明:我使用Windows任务管理器测量内存消耗并将其四舍五入.我尝试了好几次,但总的来说还是差不多.
这是我的简单示例程序:
static void Main(string[] args)
{
Loop();
}
private static void Loop()
{
var list = new List<string>
{
@"C:\Users\Public\Music\Sample Music\Amanda.wma", // Size: 4.75 MB
@"C:\Users\Public\Music\Sample Music\Despertar.wma", // Size: 5.92 MB
@"C:\Users\Public\Music\Sample Music\Distance.wma", // Size: 6.31 MB
};
Console.WriteLine("before loop");
Console.ReadLine();
foreach (string pathname in list)
{
// ... code here ...
Console.WriteLine("in loop");
Console.ReadLine();
}
Console.WriteLine(GC.CollectionCount(1));
Console.WriteLine("end loop");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
对于每个测试,我只更改了foreach循环的内容.然后我运行程序,每次Console.ReadLine()停止并检查Windows任务管理器中进程的内存使用情况.我记下了已用过的内存,然后继续程序返回(我知道断点;)).在循环结束后,我写信GC.CollectionCount(1)给控制台,以便了解GC的频率是多少.
想象一下这样的User模型:
class User {
/**
* ...some mapping info...
*/
private $username;
/**
* ...some mapping info...
*/
private $password;
public function setUsername($username) {
$this->username = $username;
}
public function setPassword($password) {
$this->password = $password;
}
}
Run Code Online (Sandbox Code Playgroud)
提交新表格的示例表格User:
<form action="/controller/saveUser" method="post">
<p>Username: <input type="text" name="username" /></p>
<p>Password: <input type="text" name="password" /></p>
</form>
Run Code Online (Sandbox Code Playgroud)
目前在我的控制器中我保存了User这样一个新的:
public function saveUser() {
$user = new User();
$user->setUsername($_POST['username']);
$user->setPassword($_POST['password']);
$entityManager->persist($user);
}
Run Code Online (Sandbox Code Playgroud)
这意味着,为我通过表单收到的每个属性调用setter方法.
我的问题:Doctrine中是否有一个方法允许您自动将表单数据/数组结构映射到Doctrine模型?理想情况下,可以从具有类似结构的数组中填充嵌套对象图.
理想情况下,我可以将控制器代码更改为这些行(伪代码/示例):
public function saveUser() { …Run Code Online (Sandbox Code Playgroud) 我正在玩ASP.NET,并尝试在一个动作中设置一个cookie,这个动作将在另一个动作中读取.
奇怪的是:cookie被设置,但在访问另一个页面时失去了它的价值.这是我简单的控制器代码:
public class HomeController : Controller
{
public ActionResult About()
{
var cookie = Response.Cookies.Get("sid");
ViewData["debug"] = "Id: " + cookie.Value;
return View();
}
public ActionResult DoLogin()
{
var cookie = new HttpCookie("sid", Guid.NewGuid().ToString());
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
return RedirectToAction("About");
}
}
Run Code Online (Sandbox Code Playgroud)
流程是这样的:首先我访问/Home/DoLogin,然后我被重定向到/Home/About应该实际输出sidcookie 的值.但是cookie没有任何价值.
谢谢你的任何提示!
所以我有一个如下所示的json密钥文件:
{
"user_agent": null,
"_scopes": "https://www.googleapis.com/auth/bigquery",
"token_uri": "https://www.googleapis.com/oauth2/v4/token",
"refresh_token": null,
"_service_account_email": "...",
"assertion_type": null,
"_kwargs": {},
"revoke_uri": "https://accounts.google.com/o/oauth2/revoke",
"_private_key_pkcs8_pem": "-----BEGIN PRIVATE KEY----- ..."
...
}
Run Code Online (Sandbox Code Playgroud)
我想使用Golang将此文件登录到bigquery.我查看了https://github.com/GoogleCloudPlatform/google-cloud-go上的示例,但找不到任何与使用密钥文件创建新的bigquery客户端有关的内容.我错过了一些明显的东西吗
在python中,等价是:
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'keyfile.json',
'https://www.googleapis.com/auth/bigquery')
...
Run Code Online (Sandbox Code Playgroud) 在我目前的一个应用程序中,我需要通过Webservice/SOAP从远程服务(CRM)获取客户数据.但是我也希望将数据缓存在mysql数据库中,以便我下次不需要连接到webservice(数据不会经常更改,远程服务很慢并且有带宽限制 - 因此缓存可以/必须).
我非常确定这项任务的技术部分,但我不太确定如何在我的网络应用程序中实现这种干净透明.
我的所有其他数据都来自一个mysql数据库,因此我使用NHibernate从数据库中查询返回列表或单个实体的存储库.
我的想法到目前为止:
1合一
使用CustomerRepository,它通过Id查找客户,如果成功,则返回它,否则调用webservice并将检索到的数据保存到数据库.
控制器看起来像这样:
class Controller
{
private CustomerRepository Rep;
public ActionResult SomeAction(int id)
{
return Json(Rep.GetCustomerById(id));
}
}
Run Code Online (Sandbox Code Playgroud)
伪/简单代码中的存储库如下:
class CustomerRepository
{
public Customer GetCustomerById(int id)
{
var cached = Database.FindByPK(id);
if(cached != null) return cached;
var webserviceData = Webservice.GetData(id);
var customer = ConvertDataToCustomer(webserviceData);
SaveCustomer(customer);
return customer;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然上面看起来有些简单,但我认为CustomerRepository类会变得非常庞大和丑陋.所以我根本不喜欢这种方法.
存储库应该只加载数据库中的数据,至少应该是我应用程序中的"合同".
2在控制器中分离并粘在一起
对存储库(db访问)和webservice(远程访问)使用单独的类,让控制器完成工作:
控制器看起来像这样:
class Controller
{
private CustomerRepository Rep;
private Webservice Service;
public ActionResult SomeAction(int id)
{
var customer = Rep.GetCustomerById(id);
if(customer != …Run Code Online (Sandbox Code Playgroud) 因此,以这个 html 为例:
<ul>
<li>
<a href="#">Test</a>
<ul>
<li><a href="#">Test</a></li>
<li><a href="#">Test</a></li>
<li><a href="#">Test</a></li>
<li><a href="#">Test</a></li>
</ul>
</li>
<li>
<a href="#">Test</a>
<ul>
<li><a href="#">Test</a></li>
<li>
<a href="#">Test</a>
<ul>
<li><a href="#">Test</a></li>
<li><a href="#">Test</a></li>
<li><a href="#">Test</a></li>
<li><a href="#">Test</a></li>
</ul>
</li>
</ul>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我想找出这个结构的最大深度,在这个例子中它是 3,因为结构向下 3 层。但是该结构可以具有任意深度。
使用 DOM 扩展的 javascript/jquery 解决方案或基于 PHP 的解决方案都可以。我真的想不出有什么好的方法可以做到这一点。也许有一个 xpath 表达式完全符合我的要求?
编辑:澄清:在这种情况下,深度是ul元素的最大嵌套,在这种情况下为 3。
我使用express/formidable在node.js中创建了一个上传脚本.它基本上有效,但我想知道在何时何地检查上传的文件,例如最大文件大小或文件的mimetype是否实际允许.
我的程序看起来像这样:
app.post('/', function(req, res, next) {
req.form.on('progress', function(bytesReceived, bytesExpected) {
// ... do stuff
});
req.form.complete(function(err, fields, files) {
console.log('\nuploaded %s to %s', files.image.filename, files.image.path);
// ... do stuff
});
});
Run Code Online (Sandbox Code Playgroud)
在我看来,检查mimetype /文件大小的唯一可行的地方是complete我可以可靠地使用文件系统函数来获取上传文件大小的事件/tmp/- 但这似乎不是一个好主意,因为:
什么是实施这个的最佳实践?我在node.js中找到了很多文件上传的例子,但似乎没有人做我需要的安全检查.
给出这样的函数声明:
int base_address(zval *object, int add_prefix, char **base_address TSRMLS_DC) {
int result;
char *host;
long port;
char *prefix;
host = ... get host from object ...;
port = ... get port from object ...;
prefix = ... get prefix from object ...;
result = SUCCESS;
if (asprintf(base_address, "%s:%ld/%s", host, port, prefix) < 0) {
result = FAILURE;
}
return result;
}
void my_func() {
char *base_address;
char *ping_url;
if (base_address(getThis(), 0, &base_address TSRMLS_CC) == FAILURE) {
MALLOC_ERROR();
}
if (asprintf(&ping_url, …Run Code Online (Sandbox Code Playgroud) php ×4
c# ×3
asp.net-mvc ×2
architecture ×1
asp.net ×1
c ×1
caching ×1
cookies ×1
css ×1
doctrine ×1
dynamic ×1
file-upload ×1
frameworks ×1
go ×1
header ×1
jquery ×1
mocking ×1
node.js ×1