由于我的问题越来越长,我决定重新编写整个问题,以使其更好更短.
我在具有8GB内存的专用服务器上运行我的网站.我完全清楚我需要提高php.ini设置的内存限制.我把它从128M设置为256M并设置为-1.问题仍然是持久性.
致命错误:第81行的D:\ www\football\views\main.php内存不足(分配786432)(试图分配24576个字节)
内存不足没有意义,因为它说只分配了786432个字节,它需要24576个字节.
786432字节只有768千字节,相当小.
echo memory_get_peak_usage();
操作系统:Windows 2008 R2 64位
CPU:Intel Core i5 - 4核
RAM:8 GB
Apache 2.2
PHP 5.3.1
存储:2 x 1 TB硬盘
带宽:每月10 TB
我终于调整并解决了问题,我想在此分享我所做的改进:
favicon.ico
失踪了我的路线引擎搞砸了.虽然我的路由引擎非常小,但通过包含favicon.ico
,它有助于通过不运行我的路由引擎来减少内存使用.我的网站的大部分内容都有它,我忘了把它放在这个新的部分.限制有MaxRequestPerChild
帮助.在我的其他专用服务器中,我MaxRequestPerChild
有限.对于这台服务器,我将其设置为0.我一直认为每个脚本都是隔离的.让我们说如果我的脚本运行800kb.完成后,Apache或PHP应该释放800kb内存.看起来它不会这样工作.有限MaxRequestPerChild
确实有助于防止内存泄漏,通过在有限MaxRequestPerChild
的旧进程死亡后创建新进程.这是我的新设置.
ThreadsPerChild 1500
MaxRequestsPerChild 10000
Run Code Online (Sandbox Code Playgroud)ob_flush();
确实减少了更多的内存.它没有多大帮助,但每一点优化都有帮助.
xdebug
尝试回答这个问题的人建议我使用过以前从未使用过的东西.我不得不说这是一个很好的工具,我已经优化了一些东西,使它运行得更快.假设我有一个数字S = [6,2,1,7,4,3,9,5,3,1]的数组.我想分成三个数组.数组的顺序和这些数组中的项目数无关紧要.
假设A1,A2和A3是子阵列.我想最小化功能
f(x) = ( SUM(A1) - SUM(S) / 3 )^2 / 3 +
( SUM(A2) - SUM(S) / 3 )^2 / 3 +
( SUM(A3) - SUM(S) / 3 )^2 / 3
Run Code Online (Sandbox Code Playgroud)
为什么我需要解决这个问题?我希望将盒子很好地排列成三列,这样每列的总高度就不会相差太大.
我的第一直觉是使用贪心.结果并不是那么糟糕,但它无法确保最佳解决方案.有没有更好的办法?
s = [6, 2, 1, 7, 4, 3, 9, 5, 3, 1]
s = sorted(s, reverse=True)
a = [[], [], []]
sum_a = [0, 0, 0]
for x in s:
i = sum_a.index(min(sum_a))
sum_a[i] += x
a[i].append(x) …
Run Code Online (Sandbox Code Playgroud) Shellsort是一个有趣的排序算法,我刚才遇到过.最令人惊讶的是,不同的间隙序列可以显着提高算法的速度.我做了一些阅读(不广泛),似乎Tokuda的序列被推荐用于实际应用.
另一个有趣的部分是比率2.20~2.25的顺序往往更有效.所以我做了一个小搜索,考虑了从2.20到2.50的比率序列,并尝试搜索哪个比率可以表现平均好.我遇到了这个比例:2.48在许多不同的试验中看起来平均表现良好.
然后,我想出了序列发生器:2.48 k-1(让它称之为248序列)并试图将它与Tokuda的序列进行比较.事实证明,它们的平均速度相等.248个序列倾向于使用稍多的比较数.
我知道我可能错了,这就是为什么我来这里寻求更有经验的程序员的更多意见.如果你没有得到问题,这是我的问题:
248 Sequence: ROUNDUP ( 2.48(k-1) ) eg: 1, 3, 7, 16, 38, 94, 233, 577, 1431, 3549, 8801, 21826, ... Tokuda's Sequence ROUNDUP ( (9k - 4k) / (5 * 4k - 1) ) eg: 1, 4, 9, 20, 46, 103, 233, 525, 1182, 2660, …
从我的理解OUTFILE
和INFILE
启用是非常危险的.任何允许其他人从系统中写入和读取文件的东西对我来说都是危险的,因为我的服务器正在托管一个公共网站.我知道最好的解决方案是使用我的代码来防止SQL注入,但人类有时会犯错误.所以,我想限制我的PHP中使用的用户访问非常有限.如果出现问题,损害将最小化.
如何禁用OUTFILE
和INFILE
?
说实话,我对使用PHP的Google云端存储文档缺乏感到非常沮丧.我在这里发现的大部分内容(Stackoverflow)都已过时.
这是我的尝试:
$postbody = array('data' => file_get_contents('e.png'));
$gso = new Google_Service_Storage_StorageObject();
$gso->setName('testing');
$gso->setContentType('images/png');
$service->objects->insert($bucket_name, $gso, $postbody);
Run Code Online (Sandbox Code Playgroud)
错误消息
(400)上传请求必须发送到/ upload/*.将请求重新发送到同一路径,但使用/ upload前缀.
从谷歌云存储JSON API,我知道我需要使用upload/storage/v1/b/bucket_name/o
而不是storage/v1/b/bucket_name/o
,但我如何使用谷歌云存储PHP客户端API?
以下是我的目录结构:
admin\
controls\
images\
media\
lib\
models\
views\
index.php
.htaccess
Run Code Online (Sandbox Code Playgroud)
以下是我的.htaccess
RewriteEngine On
RewriteRule /admin/images/(.*) /images/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
Run Code Online (Sandbox Code Playgroud)
我希望/ admin/images中的所有内容都等于根目录中的/ images.例如:http://www.example.com/admin/images/example.png与http://www.example.com/images/example.png相同
我的.htaccess问题是: 它转到index.php而不是将管理员/图像镜像到images /
解
RewriteEngine On
RewriteRule /admin/images/(.*) /images/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
Run Code Online (Sandbox Code Playgroud) 我试图了解MyISAM如何实际存储其记录以及在记录插入和记录删除后如何维护其结构.我看过以下链接:
我想确定我是否理解正确,如果不对,请纠正我.
再回顾一下这个问题
我想确定我是否理解正确,如果不对,请纠正我.
其他问题
我有返回 0 到 6 之间的三个随机元素数组的函数。它确保所有元素不能具有相同的值(您可以有两个具有相同值的元素,但不能是三个)。下面是一个示例代码。
public function getRandom() {
$array = array(0, 0, 0);
do {
$array[0] = rand(0, 6);
$array[1] = rand(0, 6);
$array[2] = rand(0, 6);
} while(($array[0] == $array[1]) && ($array[0] == $array[2]));
return $array;
}
Run Code Online (Sandbox Code Playgroud)
我对单元测试有点陌生,唯一能想到的就是测试这个
我想知道是否有任何方法或我的哪种方法更适合这种情况。
我不知道我做错了什么.记录没有添加.
这是我的代码:
$ch = curl_init("http://127.0.0.1:8983/solr/collection1/update/json?commit=true");
$data = array(
"add" => array( "doc" => array(
"id" => "HW132",
"name" => "Hello World"
))
);
$data_string = json_encode($data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
$response = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)
这是我从索尔得到的回应:
{"responseHeader":{"status":0,"QTime":4}}
Run Code Online (Sandbox Code Playgroud) 如何将 Jest expect 与 Detox expect 混合使用?这是我尝试做的。似乎expect
已经盖过了笑话expect
。
await mockServer.mockAnyResponse({
httpRequest: {
method: 'POST',
path: '/api/register',
},
httpResponse: {
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
token: 'xxx',
}),
}
});
await element(by.id('name')).typeText('Robert');
await element(by.id('password')).typeText('123456');
await element(by.id('register')).tap();
// Check if endpoint has been called
let result = await mockServer.checkIfRegisterEndPointHasBeenCalled();
expect(result).toBe(true); // <-- how to do something like this?
Run Code Online (Sandbox Code Playgroud) 我可以使用匿名函数执行此操作
$func = function() {
return "Hello World";
};
var_dump($func());
Run Code Online (Sandbox Code Playgroud)
但是,我不能这样做
$namespace->func = function() {
return "Hello World";
};
var_dump($namespace->func());
Run Code Online (Sandbox Code Playgroud)
我会得到这个错误
调用未定义的方法stdClass
到目前为止我发现的解决方法是使用另一个变量
$temp = $namespace->func;
var_dump($temp());
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在一行中完成?
这个问题有很多有趣的讨论让我想知道我们是否对算法设置了一些门限,是否会改变Big-O的运行时间复杂度?例如:
void someAlgorithm(n) {
if (n < SOME_THRESHOLD) {
// do O(n^2) algorithm
}
}
Run Code Online (Sandbox Code Playgroud)
它是O(n 2)还是O(1).