我在一个大型项目上遇到了一些问题,归结为某个特定类以某种方式被多次实例化,这导致了不必要的复制/开销。
有没有办法自动找出它正在实例化的文件/行号?
我在这里看到了这个问题 -查找类的实例化位置,但我没有因为它被重新声明而收到致命错误,所以我认为 include / require 不是问题所在。
在构造函数中,我已将其输出到带有时间戳的 txt 文件,只需要知道有问题的代码在哪里并删除/简化它
所以我正在编写一个简单的网站爬虫来维护内部网站.它将遍历每个链接,在找到它们时添加新链接,记下标题和h1标签等.
有时它会复制标题和H1标签,当我手动检查它时,源中只有一个.
发生这种情况的原因是因为爬网脚本是通过cron运行的,并且它似乎是重叠的,因此处理同一页面两次.
该脚本将基本上抓取一个未被抓取的页面,然后如果http响应为200,它将标记为已爬行,并处理它需要的内容.
因此,在SELECT和UPDATE之间,脚本的另一个线程在SELECTed的同一行上运行.
有没有办法在同一个查询中使用SELECT和UPDATE,或者锁定SELECT中返回的行,这样在完成之前它不能再在另一个线程的另一个查询中返回?
看过 - http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html和一般SELECT FOR UPDATE的东西,但我仍然不确定.
编辑
我正在使用这样的东西
START TRANSACTION;
SELECT .. FOR UPDATE;
UPDATE .... ;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
但它不喜欢它.我在该表上使用InnoDB.我认为这可能不是前进的方式,因为它只是在提交之后推迟行的处理,当我希望它在物理上不能再次选择行时.
我已经通过执行SELECT来覆盖它,然后执行UPDATE以在处理之前将字段标记为已爬行,但事实上这不是无缝的,这似乎导致了问题.我需要一种方法来无缝地选择和更新字段,或SELECT并再次停止它被选中,直到我这样说.
好吧,有一个相当庞大的内部系统.我们有一个友好的友好主人,他们通常与我们合作,如果出现问题,保持工作正常,或者至少指出我们正确的方向.
不久之前,我们不得不拿一份代码并将其托管在一个托管Rackspace的客户外部专用服务器上.考虑到一切都运行良好了几个月,突然间服务器不断抛出混乱和分段错误,例如
[注意]儿童pid 8628退出信号分段故障(11)
即使没有更改代码,主机也说它可能是一个PHP问题,开发人员(我们)将不得不调查它.我甚至没有看到一个问题,只是在apache日志旋转的某些时候(深夜),这导致它倒下.
我让他们启用了核心转储,我有一堆它们,并修复由PHP引起的Apache分段错误,但是机架空间似乎已经将所有的php和apache源dirs移动到上帝知道在哪里,我找不到.gdbinit使用'find'在服务器上的任何地方,以及我可以从gdb中获取的所有内容
Program terminated with signal 11, Segmentation fault.
#0 0x00002b8d6fc36c60 in ?? ()
Run Code Online (Sandbox Code Playgroud)
......如果试过的话,那就没那么有用了!
关于在我的代码中跟踪这个假设的问题从哪里开始的任何想法?
所以我有一个定制的CMS,允许动态创建表单和列表等.我注意到一个问题,它抓取列表的数据,这与数据库中的批准表冲突.
问题是,如果带有数据的表的字段名称与批准表中的字段名称相同,那么当我mysql_fetch_array并返回数组中的值时,它将只返回一个字段名称
这是一个返回的例子
Array
(
[id] => 1
)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望它返回为
Array
(
[approvals.id] => 1
[affiliates.id] => 2
)
Run Code Online (Sandbox Code Playgroud)
那么如何才能使表名前缀到结果数组以抵消称为同一事物的字段名称呢?我不想通过更改字段名称作为其非常嵌入.
处理前端网站错误的最佳方法是什么?类似于twitter,reddit等,有一个很好的'出错了'页面.我想要:
理想情况下,任何阻止用户查看网站的内容,如致命错误,自定义异常,mysql停机,随机500错误等,都应显示自定义错误页面.
PHP:自定义错误处理程序 - 处理解析和致命错误 - 工作正常,但如果这发生在脚本的末尾,并且它已经输出了一些东西,这将不起作用
http://davidwalsh.name/custom-error-handling-php
理想情况下需要涵盖从简单查询错误到服务器不存在的所有内容.想象一下它就像检测我的数据库类中的错误并调用重定向到/调用错误方法一样简单
这是我应该在PHP或Apache或两者中做的事情吗?
目前我从各种其他SO的混合中得到以下内容,但是在页面的其余部分加载后才会报告致命错误.
任何人都有任何想法可以使用上述所有内容吗?
<?
function xhandler($number,$string,$file,$line,$context)
{
//log to text file?
//log to xml file?
//store in database?
//whatever you want to do!
echo "<h1>here be dragons!</h1>";
echo "$number,$string,$file,$line,$context";
exit();
}
function fatal_handler() {
$errfile = "unknown file";
$errstr = "shutdown";
$errno = E_CORE_ERROR;
$errline = 0;
$error = error_get_last();
if( $error !== NULL) {
$errno = $error["type"]; …Run Code Online (Sandbox Code Playgroud) 所以这是一个更大的应用程序的一部分,我试图与集群和socket.io-redis一起运行,这样如果我将来需要扩展,它可以跨多个节点和机器工作。
我似乎遇到了一些客户无法维持连接的严重问题。一些客户端持续执行此操作(主要是 iOS 设备,我想它们必须使用轮询传输),但其他客户端有时有效,有时无效(我再次将其归因于使用轮询)。
我剥离了所有内容,结果发现集群不是问题所在。
无论如何我的 server.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 3800;
/* -------------------------------- */
io.on('connection', function(socket){
var datetime = new Date().toLocaleString();
console.log(datetime+' - '+'a user connected - '+socket.id);
});
/* -------------------------------- */
http.listen(port, function() {
var datetime = new Date().toLocaleString();
console.log(datetime+' - '+'listening on *:' + port);
});
Run Code Online (Sandbox Code Playgroud)
并在控制台输出
Wed Mar 11 2015 16:22:53 GMT+0000 (GMT) - listening on *:3800
Wed Mar 11 2015 16:22:54 GMT+0000 …Run Code Online (Sandbox Code Playgroud) 我正在尝试让 Kafka 在 AWS ECS 容器上运行。我已经有了这个设置/在我的本地 docker 环境中工作正常,使用spotify/kafka 图像
为了在本地工作,我需要确保设置了ADVERTISED_HOST 环境变量。ADVERTISED_HOST需要设置为容器的外部 IP,否则当我尝试连接时,它只会给我connection refused.
我的本地人docker-compose.yaml有这个用于 kafka 容器:
kafka:
image: spotify/kafka
hostname: kafka
environment:
- ADVERTISED_HOST=192.168.0.70
- ADVERTISED_PORT=9092
ports:
- "9092:9092"
- "2181:2181"
restart: always
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我不知道 IP 将是什么,因为我不知道这将在哪个实例上运行。那么如何设置该环境变量呢?
所以我想使用全文搜索来实现更好的搜索功能,但是它没有按预期运行.它将不返回任何结果,或者我认为不会相关的结果.
首先我查了一下:
显示'ft_min%'等变量
...返回4
所以我有一个充满游戏标题的数据库.搜索的一个很好的例子是"刺客信条".在数据库中,它们实际上存储为"刺客信条"(注释撇号).所以,如果我执行以下查询:
SELECT g_name,MATCH(g_name)AGAINST('assassins creed')AS得分FROM tgmp_games WHERE MATCH(g_name)AGAINST('assassins creed')LIMIT 15
返回结果很好(下面有些)
...但是使用搜索脚本,它使用JqueryUI自动完成下拉列表,并且当为任何字符数少于整个单词的内容提交查询时,它返回空
SELECT g_name,MATCH(g_name)AGAINST('assass')AS得分FROM tgmp_games WHERE MATCH(g_name)AGAINST('assass')LIMIT 15
我还读过,如果数据库中的行数太低,那么数据库中的行数会有效,但是那里有25k行,所以应该没问题.我究竟做错了什么?
输出结果我可以得到,但更感兴趣的是如何让部分搜索术语返回一些结果.
Array
(
[g_name] => Assassins Creed III
[score] => 15.406005859375
)
Array
(
[g_name] => The Witcher 2: Assassins of Kings
[score] => 8.46316719055176
)
Array
(
[g_name] => Tenchu: Shadow Assassins
[score] => 8.46316719055176
)
Array
(
[g_name] => The Witcher 2: Assassins of Kings - Enhanced Edition
[score] => 8.27909851074219
)
Array
(
[g_name] => …Run Code Online (Sandbox Code Playgroud) 尝试将facebook登录添加到我正在处理的项目的现有登录系统上.使用FB JS SDK构建角度.这主要是为了允许无摩擦登录,目前还没有使用访问令牌来使用FB API进行进一步调用.
所以作为一个新用户,他们点击FB登录,接受权限等,然后它会激活我一个访问令牌等.新用户是在我的数据库中创建的,还有accesstokenFB userid,等等.
我现在如何使用userid和accesstoken现在存储在我的数据库中对用户进行身份验证?据我所知,访问令牌实际上每个页面加载/请求都会改变,因此下次用户点击FB登录时,或者我检查FB登录状态时,我唯一不变的就是userid.
已经对SO和FB文档进行了各种阅读,例如:
https://developers.facebook.com/docs/facebook-login/web https://developers.facebook.com/docs/facebook-login/multiple-providers https://developers.facebook.com/docs/facebook-登录/手动集结一个登录流#checktoken
......虽然这只会让事情进一步混乱.
我想我会把那个存储accesstoken然后检查它的有效性,但是由于访问令牌的各种实例到期和失效,这似乎也是一个不完整的解决方案.
所以我的问题是:如何在我自己的数据库中与对方用户安全地验证我的FB用户?
authentication facebook login facebook-graph-api facebook-javascript-sdk
所以我一直在使用Minify来压缩我的JS和CSS,这些都很好,直到我需要压缩一些动态的php样式表.
我试图使用htaccess来欺骗它以为它是一个css文件,但我意识到它使用的绝对文件路径不会受到mod_rewrite的影响
无论如何,每当我指向一个php文件时,它总是返回'400 Bad Request'.除了编写自己的压缩脚本之外,还有任何想法可以解决这个问题吗?
只需制作一个小的Android应用程序,我需要保存一组数据,并不确定我是否应该使用对象,数组,listarray,hashmap等.
它需要能够存储字符串和整数(例如,tamename,score,category,turn of number).
它需要能够存储可变数量的团队.
目前我有尝试将其存储为对象的问题,但它不会增加得分int值.
我应该为这个实例使用哪个集合,何时应该在其他实例中使用每个集合?
编辑
确实如此,但是当我尝试访问/增加它时,我一直收到NullPointerException.我只能假设它无法从upScore正确访问团队var
所以我的onCreate是这样的
public ArrayList<Team> teams;
public int currentTeam;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
currentTeam = 0;
List<Team> teams = new ArrayList<Team>();
teams.add(new Team("Team 1"));
teams.add(new Team("Team 2"));
}
Run Code Online (Sandbox Code Playgroud)
然后在按下按钮时调用upScore.致命的例外是在这条线上
public void upScore(int team_key) {
teams.get(0).score++;
}
Run Code Online (Sandbox Code Playgroud)
这是我的Team对象
class Team {
public String name;
public int score;
public String category;
public int turns;
public Team (String teamName) {
name = teamName;
}
}
Run Code Online (Sandbox Code Playgroud)