我们正在处理一个以前从未发生过的Joyent Solaris服务器中的奇怪错误(不会发生在localhost或其他两个具有相同php配置的Solaris服务器上).实际上,我不确定我们是否必须查看php或solaris,以及它是否是软件或硬件问题......
我只是想发布这个,以防有人指出我们正确的方向.
所以,问题似乎是在var_export()处理奇怪的角色时.在CLI中执行此操作,我们在localhost机器和两个服务器中获得预期结果,但不在第三个服务器中获得.所有这些都配置为使用utf-8.
$ php -r "echo var_export('ñu', true);"
Run Code Online (Sandbox Code Playgroud)
在旧服务器和localhost (预期)中给出:
'ñu'
Run Code Online (Sandbox Code Playgroud)
但是在服务器中我们遇到了问题(PHP版本=> 5.3.6),\0每当遇到"不常见"的字符时它会添加空字符:è,á,ç,......你给它命名.
'' . "\0" . '' . "\0" . 'u'
Run Code Online (Sandbox Code Playgroud)
关于应该在哪里看的任何想法?提前致谢.
更多信息:
PHP version 5.3.6.setlocale() 没有解决任何问题.default_charset是UTF-8在php.ini.mbstring.internal_encoding被设置为UTF-8在php.ini.mbstring.func_overload = 0.iconv 编码也是 UTF-8utf-8编码.system('locale') 收益:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
到目前为止完成的一些测试(CLI):
正常行为:
$ php …Run Code Online (Sandbox Code Playgroud) 我有一个Django View,它使用查询参数进行一些内容过滤.像这样的东西:
/page/?filter=one+and+two
/page/?filter=one,or,two
Run Code Online (Sandbox Code Playgroud)
我注意到Django将其转换+为空格(request.GET.get('filter')返回one and two),我就可以了.我只需要相应地调整split()我在View中使用的功能.
但...
当我尝试测试此视图时,我打电话给:
from django.test import Client
client = Client()
client.get('/page/', {'filter': 'one+and+two'})
Run Code Online (Sandbox Code Playgroud)
request.GET.get('filter')返回one+and+two:加号,没有空格.为什么是这样?
我想认为这Client().get()模仿了浏览器的行为,所以我想了解的是为什么调用client.get('/page/', {'filter': 'one+and+two'})不像浏览/page/?filter=one+and+two.出于测试目的,它在我看来应该是相同的,并且在两种情况下,视图应该为过滤器接收一致的值:be with with +或with space.
我没有得到的是为什么有两种不同的行为.
我正在尝试将Apache配置为在同一个域下拥有不同的symfony项目(每个项目都有自己的框架安装),但我无法使用文件夹来使用它.
这就是我想要的:
我可以使用子域工作,但不是我的首选解决方案,因为我最终有疯狂的子域名,如:
我在Apache中使用此配置使其适用于子域:
<VirtualHost 127.0.0.1:8080>
ServerName projectone.mydomain.com
DocumentRoot "/home/projectone/web"
DirectoryIndex frontend.php
<Directory "/home/projectone/web">
Options -Indexes IncludesNOEXEC FollowSymLinks -MultiViews
AllowOverride None
Allow from All
RewriteEngine On
# we check if the .html version is here (caching)
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
# no, so we redirect to our front web controller
RewriteRule ^(.*)$ frontend.php [QSA,L]
</Directory>
Alias /sf /home/projectone/lib/vendor/symfony/data/web/sf
<Directory "/home/projectone/lib/vendor/symfony/data/web/sf">
AllowOverride All
Allow from All …Run Code Online (Sandbox Code Playgroud) 我正试图检测onFlush事件中多对多关系的变化.
如果将新实体添加到关系中或更新关系(始终保持元素),我可以使用$unitOfWork->getScheduledCollectionUpdates()然后检查getInsertDiff()或检测更改getDeleteDiff().到现在为止还挺好.
当我从关系中取出所有实体时出现问题:"之前有两个相关实体,但现在没有相关实体."
当关系为空时我可以访问$unitOfWork->getScheduledCollectionDeletions(),但无法知道删除了哪些实体:
getDeleteDiff() 这个系列没有任何说明.getSnapshot() 并没有告诉我之前有哪些实体我怎么知道哪些实体被从多对多关系中取出?
我添加了一个完整实现的Gist:一切正常(可能需要一些优化),除了$uow->getScheduledCollectionDeletions()(第101行)
apache ×1
django ×1
doctrine ×1
doctrine-orm ×1
joyent ×1
localization ×1
php ×1
python ×1
symfony ×1
symfony1 ×1
utf-8 ×1
virtualhost ×1