小编Dav*_*ain的帖子

即使我已编辑php.ini并且php_ldap.dll位于正确位置,仍无法启用PHP LDAP?

我已经使用WAMP安装了很长一段时间,现在启用了LDAP,一切顺利.现在虽然我必须设置另一台机器,但出于某种原因我无法启用LDAP.

我检查了输出,phpinfo()并且LDAP部分不存在.我编辑php.ini取消注释该行:

extension = php_ldap.dll
Run Code Online (Sandbox Code Playgroud)

我还检查了搜索扩展名的文件路径,文件php_ldap.dll位于正确的位置.

我很肯定我正在编辑正确的php.ini文件,因为我检查了显示的文件路径phpinfo(),并且我能够成功启用/禁用其他扩展.

每次更改后我都重新启动了Apache.

谷歌搜索这个,我发现的唯一解决方案是上面的那些,加上一两个提到编辑Windows PATH变量以包括路径php.ini?虽然它对我没有意义(我已经知道php.ini正在被解析)但尝试过它.我还在另一台机器上检查了我以前的安装,从我可以看到的,我从未PATH在该机器上添加任何PHP目录

编辑完整答案

弗兰克在下面的回答让我得到了解决方案,所以我想我现在要巩固一切.

在WAMP服务器上启用LDAP支持:

  1. 取消注释extension = php_ldap.dllphp.ini
  2. 重要提示:php.ini通过检查输出,确保您正在编辑右侧phpinfo()
  3. 检查php.ini文件以查找扩展目录的位置
  4. 检查php_ldap.dll该目录中的位置
  5. (I工序未接)找到文件libeay32.dll,并ssleay32.dll和其目录添加到Windows PATH
  6. 重启Apache.如果启用了LDAP,则会在输出中显示有关它的部分phpinfo()

php apache wamp ldap

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

从字符串中删除特定单词

我试图从某个字符串中删除特定单词使用功能replace()replaceAll()但这些删除即使它是一个字的一部分,这个词的所有出现!

例:

String content = "is not like is, but mistakes are common";
content = content.replace("is", "");
Run Code Online (Sandbox Code Playgroud)

输出: "not like , but mtakes are common"

期望的输出: "not like , but mistakes are common"

我怎样才能只替换字符串中的整个单词?

java replace

23
推荐指数
2
解决办法
8万
查看次数

报告产生了长期运行的Celery任务的结果

问题

我已将长时间运行的任务分段为逻辑子任务,因此我可以在完成时报告每个子任务的结果.但是,我正在尝试报告一个有效永远无法完成的任务的结果(而不是随着时间的推移产生值),并且我正在努力使用现有的解决方案.

背景

我正在为我编写的一些Python程序构建一个Web界面.用户可以通过Web表单提交作业,然后回来查看作业的进度.

假设我有两个函数,每个函数都通过不同的形式访问:

  • med_func:执行约1分钟,结果传递给render(),产生额外的数据.
  • long_func:返回一个生成器.每个yield大约30分钟,应该报告给用户.收益率如此之多,我们可以将此迭代器视为无限(仅在撤销时终止).

代码,当前实现

med_func,我报告结果如下:

在表单提交上,我保存AsyncResultDjango会话:

    task_result = med_func.apply_async([form], link=render.s())
    request.session["task_result"] = task_result
Run Code Online (Sandbox Code Playgroud)

结果页面的Django视图访问它AsyncResult.任务完成后,结果将保存到作为上下文传递给Django模板的对象中.

def results(request):
    """ Serve (possibly incomplete) results of a session's latest run. """
    session = request.session

    try:  # Load most recent task
        task_result = session["task_result"]
    except KeyError:  # Already cleared, or doesn't exist
        if "results" not in session:
            session["status"] = "No job submitted"
    else:  # Extract …
Run Code Online (Sandbox Code Playgroud)

python django celery

23
推荐指数
3
解决办法
7229
查看次数

太多标签会导致Git出现任何问题吗?

我必须每天在Git存储库中创建几个标签.
当我有很多标签时,它会使我的存储库缓慢或导致其他问题吗?

注意:我正在使用GitHub,但请回答一般问题.

git

22
推荐指数
3
解决办法
6679
查看次数

用Java编写的编译器:Peephole优化器实现

我正在为Pascal的子集编写一个编译器.编译器为成型机器生成机器指令.我想为这种机器语言编写一个窥视孔优化器,但是我无法替换一些更复杂的模式.

窥孔优化器规范

我研究了几种不同的编写窥视孔优化器的方法,并且我已经确定了一种后端方法:

  • emit()每次生成机器指令时,编码器都会调用一个函数.
  • emit(Instruction currentInstr) 检查窥视孔优化表:
    • 如果当前指令与模式的尾部匹配:
      1. 检查先前发出的匹配说明
      2. 如果所有指令都与模式匹配,则应用优化,修改代码存储的尾端
    • 如果未找到优化,则照常发出指令

目前的设计方法

这个方法很简单,这是我遇到麻烦的实现.在我的编译器中,机器指令存储在一个Instruction类中.我写了一个InstructionMatch类存储正则表达式,用于匹配机器指令的每个组件.如果模式匹配某些机器指令,则其equals(Instruction instr)方法返回.trueinstr

但是,我无法完全应用我的规则.首先,我觉得根据我目前的做法,我最终会得到一堆不必要的物品.鉴于窥视孔优化数字的完整列表可以编号大约400个模式,这将快速失控.此外,我实际上无法使用这种方法进行更难的替换(参见"我的问题").

替代方法

我读过的一篇论文将先前的指令折叠成一个长字符串,使用正则表达式匹配和替换,并将字符串转换回机器指令.这对我来说似乎是一个糟糕的方法,如果我错了,请纠正我.

示例模式,模式语法

x: JUMP x+1; x+1: JUMP y  -->  x: JUMP y
LOADL x; LOADL y; add     -->  LOADL x+y
LOADA d[r]; STOREI (n)    -->  STORE (n) d[r]
Run Code Online (Sandbox Code Playgroud)

请注意,这些示例模式中的每一个都只是以下机器指令模板的人类可读表示:

op_code register n d
Run Code Online (Sandbox Code Playgroud)

(n通常表示字数,d表示地址位移).语法x: <instr>指示该指令存储在x代码存储区中的地址处.

因此,当操作码为5(并且在该指令中未使用)时,该指令LOADL 17等效于整机指令5 0 0 17LOADLnr

我的问题

所以,考虑到这个背景,我的问题是:当我需要将先前指令的部分包含在替换中的变量时,如何有效地匹配和替换模式?例如,我可以简单地用LOADL …

java compiler-construction compiler-optimization

20
推荐指数
1
解决办法
1209
查看次数

用字符串计算每个字母的频率

这是来自pyschools的问题.

我确实做对了,但我猜测会有一个更简单的方法.这是最简单的方法吗?

def countLetters(word):
    letterdict={}
    for letter in word:
        letterdict[letter] = 0
    for letter in word:
        letterdict[letter] += 1
    return letterdict
Run Code Online (Sandbox Code Playgroud)

这应该是这样的:

>>> countLetters('google')
{'e': 1, 'g': 2, 'l': 1, 'o': 2}
Run Code Online (Sandbox Code Playgroud)

python dictionary

19
推荐指数
2
解决办法
5万
查看次数

在Celery中使用Python标准日志记录

我必须在预先存在的系统中实现Celery.该系统的先前版本已使用Python标准日志记录.

我的代码类似于下面的代码.进程一和进程二是非Celery函数,它们在任何地方都是日志记录.如果出现问题,我们正在使用日志记录来跟踪数据丢失.

@task
def add(x,y):
    process_one(x,y)
    process_two(x,y)
Run Code Online (Sandbox Code Playgroud)

我如何实现Celery并使用Python标准日志记录代替Celery日志记录,这样我们的旧日志系统不会丢失?

我试图import logging从Python改为:logger = add.get_logger()并传递logger给所有函数,但我认为这不是一个好习惯.我需要另一个解决方案

更新:要在Celery日志记录中添加应用程序日志记录,您可以执行:

$ manage.py celeryd -v 2 -B -s celery -E -l debug --traceback \
  --settings=settings --logfile=/(path to your log folder)/celeryd.log
Run Code Online (Sandbox Code Playgroud)

使用-l(logging)as debug,我们的应用程序/ Python日志记录将自动包含在我们的Celery日志记录中:无需执行logger = add.get_logger().

python django standards logging celery

18
推荐指数
1
解决办法
5262
查看次数

如何用Python Popen做多个参数?

我正在尝试制作一个有按钮的PyGtk Gui.当用户按下此按钮时,gnome-terminal提示用户输入密码.

然后它将为JQuery片段克隆这个Git存储库gedit.

然后,它将js.xml文件复制到/usr/share/gedit/plugins/snippets/js.xml

最后,它强制删除了Git存储库.

命令:

gnome-terminal -x sudo git clone git://github.com/pererinha/gedit-snippet-jquery.git && sudo cp -f gedit-snippet-jquery/js.xml /usr/share/gedit/plugins/snippets/js.xml && sudo rm -rf gedit-snippet-jquery
Run Code Online (Sandbox Code Playgroud)

它在我的终端工作正常.

但是,通过它刚打开的GUI,我添加了我的密码,按回车键,然后再次关闭.

我只想将命令运行到第一个命令 &&

这是我的Python函数(带命令):

    def on_install_jquery_code_snippet_for_gedit_activate(self, widget):
        """ Install Jquery code snippet for Gedit. """
        cmd="gnome-terminal -x sudo git clone git://github.com/pererinha/gedit-snippet-jquery.git && sudo cp -f gedit-snippet-jquery/js.xml /usr/share/gedit/plugins/snippets/js.xml && sudo rm -rf gedit-snippet-jquery"
        p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT,
                 close_fds=False)
        self.status.set_text(p.stdout.read()) #show response in 'status
Run Code Online (Sandbox Code Playgroud)

python subprocess pygtk popen gnome-terminal

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

emacs临时文件的奇怪.gitignore行为

如果我编辑new_file.txt使用Emacs,会出现类似的临时文件#new_file.txt#,并.#new_file.txt在文件未保存,并且new_file.txt~在保存时.我想要排除这些文件.所以我这样写.gitignore:

#This is a comment line
*~
[#]*[#]
.\#*
Run Code Online (Sandbox Code Playgroud)

这完美无缺.但后来我添加了一些注释行:

#This is a comment line
*~
[#]*[#]     # this is a comment
.\#*     # this is another comment
Run Code Online (Sandbox Code Playgroud)

之后git status,我看到两者#new_file.txt#并被.#new_file.txt列为未跟踪文件.

我认为.gitignore可能会将#角色作为评论行的开头而感到困惑.所以我删除了这两个注释行.然而,层出不穷git status,我仍然看到 #new_file.txt#.#new_file.txt为未跟踪文件中列出.

我做 :

git rm -r --cached .
Run Code Online (Sandbox Code Playgroud)

正如".gitignore not working"所述,但它没有帮助.

有人可以告诉我发生了什么,以及如何.gitignore按我的意愿工作?非常感谢你!

git emacs

15
推荐指数
1
解决办法
4057
查看次数

使用有序相关模型的第一个值来注释QuerySet

我有QuerySet一些对象.对于每一个,我希望用相关模型的最小值进行注释(在几个条件下加入,按日期排序).我可以在SQL中巧妙地表达我想要的结果,但很好奇如何翻译成Django的ORM.

背景

假设我有两个相关的模型:BookBlogPost每个都有一个外键Author:

class Book(models.Model):
    title = models.CharField(max_length=255)
    genre = models.CharField(max_length=63)
    author = models.ForeignKey(Author)
    date_published = models.DateField()

class BlogPost(models.Model):
    author = models.ForeignKey(Author)
    date_published = models.DateField()
Run Code Online (Sandbox Code Playgroud)

我试图找到一个给定作者在他们写的每篇博文之后发表的第一本神秘书.在SQL中,这可以通过窗口很好地实现.

PostgreSQL 9.6中的工作解决方案

WITH ordered AS (
  SELECT blog_post.id,
         book.title,
         ROW_NUMBER() OVER (
            PARTITION BY blog_post.id ORDER BY book.date_published
         ) AS rn
    FROM blog_post
         LEFT JOIN book ON book.author_id = blog_post.author_id
                       AND book.genre = 'mystery'
                       AND book.date_published >= blog_post.date_published
)
SELECT id,
       title
  FROM ordered
 WHERE rn …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-queryset django-1.10

15
推荐指数
1
解决办法
793
查看次数