小编Max*_*Max的帖子

动态css的缓存头(通过PHP生成)

我的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)

但没有运气.每次加载页面时仍会加载该文件.为了强制浏览器在一定时间内缓存文件,有哪些适当的标题?

css php caching header dynamic

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

好的PHP模拟框架

PHP有一个很好的独立模拟框架吗?目前我正在使用Simpletest框架进行单元测试.我喜欢这个框架,但我不喜欢你如何在其中创建和设置模拟.然后我尝试了PHPMock,我喜欢它可以如何使用,但是我遇到了一些随着时间推移而烦人的错误...或者最好切换到PHPUnit进行单元测试和模拟?

我真正喜欢的是简单但功能强大的东西,比如PHP中的C#Moq框架(当然没有泛型,lambdas等)).

php frameworks mocking

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

有人可以解释垃圾收集器的行为吗?

我正在玩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的频率是多少.


结果 …

c# garbage-collection

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

使用表单数据填充doctrine 2模型的简单方法?

想象一下这样的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)

php doctrine

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

为什么我的cookie没有设置?

我正在玩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没有任何价值.

  • 我的浏览器未禁用Cookie
  • 我知道ASP.NET有自己的会话处理机制,只是玩弄并偶然发现这个cookie问题

谢谢你的任何提示!

c# asp.net cookies asp.net-mvc

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

使用json keyfile从golang登录bigquery

所以我有一个如下所示的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)

go google-bigquery google-cloud-platform

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

如果未在数据库中缓存,则从远程服务获取数据 - 需要建议

在我目前的一个应用程序中,我需要通过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)

c# architecture asp.net-mvc

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

寻找嵌套深度

因此,以这个 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。

php jquery

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

何时在node.js上传脚本中检查文件大小/ mimetype?

我使用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中找到了很多文件上传的例子,但似乎没有人做我需要的安全检查.

file-upload node.js

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

发生错误时如何释放以前分配的内存?

给出这样的函数声明:

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)

c error-handling memory-management

5
推荐指数
3
解决办法
233
查看次数