即时通讯使用PHPExcel读取.xls文件.我见面的时间很短
Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 730624 bytes) in Excel\PHPExcel\Shared\OLERead.php on line 93
Run Code Online (Sandbox Code Playgroud)
经过一些谷歌搜索,我尝试chunkReader来防止这种情况(甚至在PHPExcel主页上提到),但我仍然坚持这个错误.
我的想法是,通过大块阅读器,我将逐个阅读文件,我的记忆不会溢出.但是必须有一些严重的记忆漏洞?或者我释放一些记忆力不好?我甚至试图将服务器ram提升到1GB.我试图阅读的文件大小约为700k,这不是那么多(我也读取~20MB pdf,xlsx,docx,doc等文件没有问题).所以我假设我可能会忽略一些小的巨魔.
代码看起来像这样
function parseXLS($fileName){
require_once dirname(__FILE__) . './sphider_design/include/Excel/PHPExcel/IOFactory.php';
require_once dirname(__FILE__) . './sphider_design/include/Excel/PHPExcel/ChunkReadFilter.php';
$inputFileType = 'Excel5';
/** Create a new Reader of the type defined in $inputFileType **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
/** Define how many rows we want to read for each "chunk" **/
$chunkSize = 20;
/** Create a new Instance of our Read Filter **/
$chunkFilter = …
Run Code Online (Sandbox Code Playgroud) 我正在研究PHP + MySQL应用程序,它将抓取硬盘/共享驱动器并将所有文件和目录索引到数据库中,以提供"全文"搜索.到目前为止,我做得很好,但即时通讯问题,如果我选择如何将数据存储到数据库的好方法.
在下图中,您可以看到我的数据库的部分模式.我认为,我正在保存域名(代表我想要索引的磁盘的一部分)然后有一些链接(代表文件和文件夹(包含内容,文件路径等)然后我有桌面存储鞋底(uniq)关键字,我在文件/文件夹名称或内容中找到.
最后,我有16个表linkkeyword来存储链接和关键字之间的关系.我有16个因为我认为制作像hashtable这样的东西可能会很好,因为我期望链接 < - > 关键字之间存在大量关系.(到目前为止,对于15k链接和400k关键词,我有大约2.5百万的linkkeyword记录).因此,为了避免将如此多的数据存储到一个表中(以及稍后在它们上面搜索),我认为这个hastable可以更快.它的工作方式就像我想搜索单词一样,我计算它md5并查看md5的第一个字符,然后我知道我应该使用哪个linkkeyword表.因此每个linkkeyword表中只有大约150~200k记录(相对于2.5milions)
所以,好奇,如果这种方法可以有任何用途,或者如果将所有linkkeyword信息存储到单个表更好,mysql会处理它(以及它可以工作多少链接 < - > 关键字?)
到目前为止,这对我来说是一个很好的解决方案,但是当我尝试实现正则表达式搜索时,我很努力.因此,用户可以使用例如"tem*",这可能导致临时,临时,寺庙等...在搜索单词时,我将以md5哈希进行争议,然后我知道我需要查看哪个linkkeyword表.但是对于正则表达式,我需要从关键字表中获取所有关键字(与正则表达式匹配),然后逐个处理它们.
我还附加了正常关键字搜索的部分代码
private function searchKeywords($selectedDomains) {
$searchValues = $this->searchValue;
$this->resultData = array();
foreach (explode(" ", $searchValues) as $keywordName) {
$keywordName = strtolower($keywordName);
$keywordMd5 = md5($keywordName);
$selection = $this->database->table('link');
$results = $selection->where('domain.id', $selectedDomains)->where('domain.searchable = ?', '1')->where(':linkkeyword' . $keywordMd5[0] . …
Run Code Online (Sandbox Code Playgroud) 我试图通过和(pdftotext.exe)解析PDF到文本.在我的本地主机上,每个人都运行良好,但是当我试图在服务器上移动所有东西时,我陷入了麻烦.PHP
XPDF
首先,我检查了服务器上的一些设置,并且safe_mode已关闭,exec未被禁用且权限为rwxrwxrwx
.
然后我试试这个
$command = "\\\\149.223.22.11\\cae\\04_Knowledge-base\\tools\\pdftotext.exe -enc UTF-8 ". $fileName . " \\\\149.223.22.11\\cae\\04_Knowledge-base\\output.txt";
$result = exec($command,$output,$args);
echo shell_exec($command);
Run Code Online (Sandbox Code Playgroud)
哪个不起作用.当我调查$result, $output,
是空的,但$ args返回1,它与本文档Windows系统错误代码对应的不正确的函数
整个命令看起来像\\149.223.22.11\cae\04_Knowledge-base\tools\pdftotext.exe -enc UTF-8 \\149.223.22.11\cae\04_Knowledge-base\testpdf\04_egerland_final_paper.pdf \\149.223.22.11\cae\04_Knowledge-base\output.txt
什么时候直接输入命令行,它的工作.
所以我有点想法.有人提示吗?
编辑20160201 - aditional尝试所以我做了aditional测试,当我尝试使用来自localhost的exec运行类似的命令(目标.exe文件,输入和输出文件在同一位置,只有我使用localhost而不是服务器)它的工作.我现在正在检查服务器设置的差异.那么这里可能有问题,localhosts Server Api是Apache 2.0 Handler,服务器是CGI/FASTCGI吗?
我有ICollectionView
private ICollectionView _snapshotList;
public ICollectionView SnapshotList {
get { return _snapshotList; }
}
Run Code Online (Sandbox Code Playgroud)
我在ViewModel构造函数中设置,this.smapshotListModel.SnapshotItems
返回ObservableCollection
_snapshotList = CollectionViewSource.GetDefaultView(this.snapshotListModel.SnapshotItems);
_snapshotList.Filter = ErrorMsgFilter;
_snapshotList.CollectionChanged += OnCollectionChanged;
Run Code Online (Sandbox Code Playgroud)
后来在collectionChanged事件我试图获取此集合中的项目数,
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) {
this.ItemCount = _snapshotList.Count();
}
Run Code Online (Sandbox Code Playgroud)
但它的抛出错误,就是没有定义Count方法.
我可能有一个简单的问题,但它让我大吃一惊.我有一些代码可以对它进行一些重构,但是无法弄清楚作者在这句话中的想法
If (j > 0) Then greatThanPrec = greatThanPrec And (signalAmplArray(i) > signalAmplArray(j))
Run Code Online (Sandbox Code Playgroud)
我想我知道基本的If Then else
工作原理,但是不能意识到为什么会像A = A
之后那样,然后AND
可能是像C/C++这样的短暂状态?