长话短说,我想测试我的网站的反僵尸系统("僵尸"这里指的是游戏玩家欺骗程序,而不是蜘蛛等).
我用PHP的CLI编写了自己的机器人.大多数情况下,我的网站能够检测到僵尸网络活动并阻止它.
但是我需要测试处理动态IP,因为我有一个静态IP,据我所知,这不是一件容易的事.还有其他我想测试的涉及多个IP的东西.
那么,最重要的是,当我的PHP脚本连接到它时,是否可以隐藏/更改服务器看到的IP地址,如果是这样,我该怎么做?(我之前从未真正使用过代理,因此我对它们了解不多).
我正在加载一个由PHP动态生成的特别大的JSON字符串.为了向用户提供一些反馈,我想显示下载进度.
我已经找到了代码,它适用于静态内容,如图像,JS文件等.但是,它似乎不适用于动态文件.
这是有道理的,因为动态文件没有可预测的内容长度,但即使我在PHP中添加它:
ob_start(function($c) {
header("Content-Length: ".strlen($c));
return $c;
});
Run Code Online (Sandbox Code Playgroud)
它仍然不发送标题(但如果我添加任何其他标题,它工作正常).
有没有办法强制Apache发送Content-Length标题?目前我唯一的选择是将输出保存到临时文件并改为重定向到它.这可行,但它有点混乱,所以我宁愿避免它,如果可能的话.
请记住,我以前从未使用过网络工作者,而且在缠绕他们时遇到了一些麻烦.
这是对我正在做的简化版本的解释.
我的页面包含各种文件的链接 - 一些是文本,一些是图像等.每个文件都有一个显示通用文件图标的图像.
我希望脚本用文件内容的预览替换每个通用图标.
该脚本将从服务器请求文件(从而将其添加到缓存中,如预加载器),然后创建画布并在其上绘制预览(图像的缩略图,文本文件的摘录,更具体的图标)对于媒体文件...)最后使用数据URL用画布替换通用图标的源.
我很容易做到这一点.但是,我更喜欢在后台使用它,以便它在工作时不会干扰UI.
在我深入研究之前,我需要知道:工人可以使用画布,如果是这样,我将如何制作画布?我觉得document.createElement('canvas')不行,因为工作人员无法访问DOM,或者当我发现的所有引用都说他们"无法访问DOM"时我误解了吗?
我试图找出一个会生成纹理的脚本(然后可以将其与灰度图像相乘以"应用"它).到目前为止,我的方法包括播种RNG,然后在[0,3]范围内随机生成8x8整数矩阵,然后使用某种插值级别将该矩阵放大到256x256图像.
这是一个示例输出(种子值24):
示例http://adamhaskell.net/misc/texture/sample.png
左边是用最近邻插值缩放的矩阵.右边是我对双线性插值的尝试.在大多数情况下它似乎没问题,但是你得到的结构就像在中左边附近有两个对角相邻的橙色方块面对两个对角相邻的红色方块,结果是没有插入该区域.此外,它被视为更像热图(如左上角的橙色丰富所示),这会导致更多问题.
这是我的"双线性插值"代码:
<?php
$matrix = Array();
srand(24);
$dim = 256;
$scale = 32;
for($y=0;$y<=$dim/$scale;$y++) for($x=0;$x<=$dim/$scale;$x++) $matrix[$y][$x] = rand(0,3);
$img = imagecreate($dim,$dim);
imagecolorallocate($img,255,255,255);
$cols = Array(
imagecolorallocate($img,128,0,0),
imagecolorallocate($img,128,64,32),
imagecolorallocate($img,128,128,0),
imagecolorallocate($img,64,64,64)
);
for($y=0;$y<$dim;$y++) {
for($x=0;$x<$dim;$x++) {
$xx = floor($x/$scale); $yy = floor($y/$scale);
$x2 = $x%$scale; $y2 = $y%$scale;
$col = $cols[round((
$matrix[$yy][$xx]*($scale-$x2)*($scale-$y2)
+ $matrix[$yy][$xx+1]*$x2*($scale-$y2)
+ $matrix[$yy+1][$xx]*($scale-$x2)*$y2
+ $matrix[$yy+1][$xx+1]*$x2*$y2
)/($scale*$scale))];
imagesetpixel($img,$x,$y,$col);
}
}
header("Content-Type: image/png");
imagepng($img);
exit;
Run Code Online (Sandbox Code Playgroud)
实际上,这可能是一个XY问题.我特别想要做的是为我正在计划的游戏中的生物生成"毛皮图案".特别是我希望能够拥有它,以便繁殖混合来自两个父母的元素(无论是颜色还是图案的元素),所以只要有一个随机种子就不会真正削减它.理想情况下,我需要某种基于矢量的方法,但我离开了我的深度,所以任何帮助都将非常感激.
我有一张users桌子,我想在两个任意用户之间定义一个"朋友"关系.
到目前为止,我已经使用了两种不同的方法:
friends表包含user1和user2.搜索用户涉及的查询看起来... WHERE @userid IN (`user1`,`user2`)非常有效friends表包含from和to字段.启动朋友请求会在该方向上创建一行,如果已接受,则以相反方向插入第二行.还有一个status列表明发生了这种情况,使得搜索类似于:... WHERE `user1`=@userid AND `status`=1我对这些解决方案中的任何一个都不是特别满意.第一个IN看起来很混乱,第二个看起来很臃肿,有两行来定义一个链接.
所以这就是我在这里的原因.您对这样的链接有什么建议?请注意,我不需要再保存任何信息,我只需要两个相互关联的用户ID,最好是某种状态ENUM('pending','accepted','blocked'),但这是可选的,具体取决于最佳设计.
我想在页面上有一个动画角色,为不同的行为设置不同的动画.我目前有两个关于它如何工作的想法:
IDEA 1:将每个行为都设置为动画GIF,并在切换行为时使用JavaScript切换GIF文件.好处:动画在图像本身,为JS留下较少的工作.缺点:我不知道(我知道)JavaScript可以告诉GIF在什么帧,动画结束/循环等等.
IDEA 2:将每个动画的每个帧都作为PNG图像并使用JS在帧之间切换,使用一些预加载器确保在动画开始之前所有图像都准备就绪.上升:对动画序列的更多控制.缺点:很多帧...
这两个想法中的哪一个会更好?(我想避免使用Flash,顺便说一句)
我自己倾向于想法2,因为它提供了更好的控制.由于该站点已经有一个每50ms运行一次的计时器,因此将该动画添加到该计时器系统并不会太多.
我正在尝试在我的网站上添加键盘快捷键,以便使用键盘实现快速导航.但是,我尝试使用Alt + X快捷方式遇到了一个小问题.事件运行得很好并且false应该返回,但浏览器的"文件"菜单无论如何都会出现.我也试过这个preventDefault方法,但没有改变.
该脚本的简化版本是:
document.documentElement.onkeydown = function(e) {
e = e || window.event;
switch( e.keyCode || e.which) {
// some cases here - most notably:
case 116: // F5 key
if( activeFrame) {
activeFrame.contentWindow.location.reload();
// reloads an iframe if one is active
return false;
}
break;
// more cases...
case 88: // X key
if( e.altKey) {
// do something
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,覆盖F5键的默认操作可以正常工作 - 只有在没有iframe处于活动状态时,浏览器才会重新加载页面.我不太清楚如何在按下Alt + X时阻止显示菜单.
PHP 5.4带有一个用于开发目的的内置服务器.这是我几个月来一直在等待的事情,因为到目前为止,我不得不破解一个PHP脚本,它监听传入的连接并处理它们(因为我不想去麻烦和安装实际服务器的开销).
让我担心的主要问题是:如何分配端口?
在我的PHP脚本中,我曾经这样做:
socket_bind($sock,"localhost",0) or die("Could not bind socket");
socket_getsockname($sock,$ip,$port);
Run Code Online (Sandbox Code Playgroud)
$port 然后是操作系统根据可用内容分配的端口号.
我只是想知道PHP的内置服务器中是否存在任何此类功能,如果是这样,命令行应该是什么来访问它.
我一直在尝试为我的基于浏览器的游戏提供背景音乐.它工作得很好,但在Chrome中我经常将音乐剪短并出现此错误:
无法加载资源:net :: ERR_CONTENT_LENGTH_MISMATCH
我看了网络选项卡,看到音频文件正在加载,具有206 Partial Content状态,直到它遇到该错误并且刚刚停止.
重新加载页面通常会产生相同的结果,但在轨道中的不同点.我还没有在IE中遇到这个问题,似乎只有Chrome受到了影响.
有关可能发生的事情的任何建议吗?
示例请求/响应:
GET /music/___________.mp3 HTTP/1.1
Host: ____________.net
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
Accept: */*
DNT: 1
Referer: http://____________.net/
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Cookie: SID=XXXXXXXXXX
Range: bytes=0-
HTTP/1.1 206 Partial Content
Date: Tue, 26 Aug 2014 13:53:38 GMT
Server: Apache/2.2.26 (Unix) mod_ssl/2.2.26 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
Last-Modified: Fri, 13 Jun 2014 21:00:31 GMT
ETag: "219f1a-8ed344-4fbbdf7c339c0"
Accept-Ranges: bytes
Content-Length: 9360196
Content-Range: bytes 0-9360195/9360196
Connection: close
Content-Type: …Run Code Online (Sandbox Code Playgroud) 我最近了解到我可以控制运行程序的CMD窗口的大小mode x,y.然而,我刚刚注意到这设置了缓冲区大小,窗口将调整为匹配或最大屏幕大小.
我想mode 100,50用于窗口大小,但我也想保留一个arger缓冲区 - 至少我希望开发mode 100,9999.
有没有办法做到这一点?