我想调用require_once("test.php")但不显示结果并将其保存到变量中,如下所示:
$test = require_once('test.php');
//some operations like $test = preg_replace(…);
echo $test;
Run Code Online (Sandbox Code Playgroud)
解:
test.php的
<?php
$var = '/img/hello.jpg';
$res = <<<test
<style type="text/css">
body{background:url($var)#fff !important;}
</style>
test;
return $res;
?>
Run Code Online (Sandbox Code Playgroud)
main.php
<?php
$test = require_once('test.php');
echo $test;
?>
Run Code Online (Sandbox Code Playgroud) 我使用输出缓冲进行gzip压缩并访问以前在PHP脚本中输出的内容:
if(!ob_start("ob_gzhandler")) ob_start();
Run Code Online (Sandbox Code Playgroud)
现在,如果该脚本包含在另一个已经使用ob_start()的脚本中,我会收到警告:
警告:ob_start()[ref.outcontrol]:输出处理程序'ob_gzhandler'不能在第n行的文件名中使用两次
所以我想测试ob_start()已经被称为.我认为ob_get_status()应该是我需要的,但在测试中使用它的最佳方法是什么?
如果我们使用http链接标头很早就提供了一个链接到CSS文件的浏览器不会下载此链接,那么任何以这种方式提供CSS文件的浏览器都会阻止呈现"首屏内容"?
这将是HTTP标头:
Link: <style.css>; rel="stylesheet"
Run Code Online (Sandbox Code Playgroud)
这是一个未经测试的同一件事的PHP实现(如果没有像上面的链接中暗示的那样配置apache):
<?php
header('Link: <style.css>; rel="stylesheet"');
?>
Run Code Online (Sandbox Code Playgroud)
问题:跨浏览器兼容性和渲染阻止行为
我在PHP中使用XPATH处理XML兼容的XHTML输入,如下所示:
$xml=new DOMDocument();
$xml->loadXML(utf8_encode($temp));
[...]
$temp=utf8_decode($xml->saveXML());
Run Code Online (Sandbox Code Playgroud)
出现的问题是根据HTML5规范可能不会自动关闭的节点,例如
<textarea id="something"></textarea>
Run Code Online (Sandbox Code Playgroud)
或由JS利用的div
<div id="someDiv" class="whaever"></div>
Run Code Online (Sandbox Code Playgroud)
回来吧
<textarea id="something" />
Run Code Online (Sandbox Code Playgroud)
和
<div id="someDiv" class="whaever" />
Run Code Online (Sandbox Code Playgroud)
我目前通过使用来解决这个问题str_replace,但这是不可能的,因为我需要匹配个别情况.我怎么解决这个问题?
同时XPATH坚持要求推出
xmlns:default="http://www.w3.org/1999/xhtml
Run Code Online (Sandbox Code Playgroud)
在新创建的各个节点上,它会放置类似的东西<default:p>.如何在不诉诸愚蠢搜索的情况下停止此操作并替换为:
$temp=str_replace(' xmlns:default="http://www.w3.org/1999/xhtml" '," ",$temp);
$temp=str_replace(' xmlns:default="http://www.w3.org/1999/xhtml"'," ",$temp);
$temp=str_replace('<default:',"<",$temp);
$temp=str_replace('</default:',"</",$temp);
Run Code Online (Sandbox Code Playgroud)
?
编辑:我真的遇到麻烦的搜索和替换,我不打算用RegExp攻击输出XHTML.考虑这个例子:
<div id="videoPlayer0" class="videoPlayerPlacement" data-xml="video/cp_IV_a_1.xml"/>
Run Code Online (Sandbox Code Playgroud)
显然,自我关闭的div是非法的(至少在一个上下文中,我不能输出mime application/xhtml + xml但是我被迫使用mime text/html),而在所有其他情况下,他们肯定不会验证.
我在包含position:fixed元素的web应用程序中遇到Safari问题.当页面缩小(小于100%)时,事情就会中断,需要通过调用函数来修复.所以我想检测用户的缩放.我刚才发现了这个jQueryPlug:
http://mlntn.com/2008/12/11/javascript-jquery-zoom-event-plugin/
http://mlntn.com/demos/jquery-zoom/
它会检测可能导致页面缩放级别更改的键盘和鼠标事件.很公平.它适用于当前的FF和IE,但不适用于Safari.在当前的WebKit浏览器中,可以做些什么来做同样的事情?
我正在尝试mod-rewrite.我认为我想要的很简单,但我没有通过REQUEST_URI获得所请求文件的URI.而是传递提供的名称.
该手册说:
THE_REQUEST
浏览器向服务器发送的完整HTTP请求行(例如,"GET /index.html HTTP/1.1").这不包括浏览器发送的任何其他标头.与以下大多数其他变量不同,此值尚未转义(解码).
REQUEST_URI
HTTP请求行中请求的资源.(在上面的例子中,这将是"/index.html".)
但是这两个在我的测试中给出了不同的文件名.我有一个bootstrap.php,我想通过它发送所有请求.这是测试文件:
<?php
echo $_GET['requestedURI'];
?>
Run Code Online (Sandbox Code Playgroud)
在.htaccess文件我有:
### REWRITE RULES ###
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ bootstrap.php?requestedURI=%{REQUEST_URI} [L]
Run Code Online (Sandbox Code Playgroud)
请求http://localhost/test.htm发出:/bootstrap.php
如果我在.htaccess中放入THE_REQUEST而不是REQUEST_URI,我得到GET /test.htm HTTP/1.1
那么为什么不满足于THE_REQUEST?好吧,只要查询字符串存在就会中断.如果我要求:http://localhost/test.htm?x=1&y=2我得到GET /test.htm?x=1第一个&符打破了事情.我认为应该可以用%26替换查询字符串中的所有&符号,以便它可以工作,但到目前为止我没有管理...
那么有人能说出为什么REQUEST_URI失败以及如何修复它或如何在查询字符串中将&符号重写为%26?
谢谢.
编辑:以上报告适用于Win 7上的xampp 1.7.3.我同时在生产Linux系统上尝试过,REQUEST_URI返回它应该的内容.
我有一个程序用于创建批处理文件.我的问题是程序的输出是UTF-8,所以只要é,à,ö,Ä等任何变音标记在我的批处理文件中就会失败.在创建批处理文件的程序中,我似乎无法找到将输出转换为除UTF-8之外的任何内容的方法.
所以我想创建两个bach文件.实际的一个和另一个将实际的一个从UTF-8转换为ANSI(Windows代码页1252,或者可能是cp 850)然后在之后执行它.当然我会添加一个chcp xxxx作为实际批处理文件的第一个命令.
所以我的问题是Windows上有iconv的替代方案 - 或者如何使用第二个批处理文件将UTF-8文本文件转换为Windows代码页.是否有任何内置于Win XP及其中的内容我可以使用或者是否有可用于此的免费和可再发行工具?
注意:
chcp 65001
Run Code Online (Sandbox Code Playgroud)
不适用于批处理文件.
编辑1:
在Windows XP上,我创建了两个批处理文件来测试第一个答案.
1.bat编码为UTF-8而不包含BOM包含:
chcp 1252
cd üöä
Run Code Online (Sandbox Code Playgroud)
2.bat也编码为UTF-8而没有BOM - 但没有任何特殊字符包含:
chcp 1252
type "1.bat" >"ansi_file.bat"
Run Code Online (Sandbox Code Playgroud)
在执行2.bat时创建的结果ansi_file.bat仍将是utf-8编码而不是ansi编码.
编辑2:
提到的逆向过程有效.
chcp 1252
echo ü > ansi.txt
cmd /u /c type ansi.txt > unicode.txt
Run Code Online (Sandbox Code Playgroud)
但是以下几行都没有
cmd /a /c type unicode.txt > back2ansi.txt
type unicode.txt > back2ansi_v2.txt
Run Code Online (Sandbox Code Playgroud)
让我回到ANSI.我在Win XP和Win 7上都尝试了这个.任何人都可以帮忙吗?
注意:
我知道如何使用Windows脚本宿主和VBS.我想避免依赖脚本主机.VBS方法详述如下:http://msdn.microsoft.com/en-us/library/windows/desktop/aa368046%28v=vs.85%29.aspx
编辑3:
创建的包含unicodeü的文本文件不是utf-8
Windows unicode文件是HEX:
FC 00 20 00 0D 00 0A 00
Run Code Online (Sandbox Code Playgroud)
没有BOM的UTF-8将是HEX:
C3 BC 20 …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序在HiDPI模式中断,除非我在finder中选择"get Info"并勾选"低分辨率打开"复选框.修复应用程序不是一种选择,因为它是使用不再由其供应商实际维护的创作软件制作的.
现在就是这样:当我拿到应用程序时,将它放在桌面上,压缩它,然后将"低分辨率打开"复选框设置为true,删除应用程序并解压缩原始应用程序复选框保持选中状态.因此,无论OS X将属性"以低分辨率打开"存储在哪里,它都不与文件一起存储.这意味着在将应用程序分发到其他Retina Mac系统时,它将再次被破坏,直到手动检查每个系统上的复选框.
我发现Info.plist有一个NSHighResolutionCapable属性,我把它添加Boolean到我的应用程序Info.plist并设置为false但无济于事.这似乎不等同于"低分辨率开放"选项.
链接文档说:如果默认情况下选中"以低分辨率打开"复选框,则可以通过以下方式更改默认值:将NSHighResolutionCapable属性设置为YES,在Info.plist中,反之则不起作用...我是什么我想是一个开箱即用的解决方案.我想避免客户需要自己配置.它应该在解压缩应用程序时设置.
所以有两个问题:
a)是否可以配置等于"低分辨率打开"复选框和文件一起检查 - 例如在Info.plist?
b)OS X在哪里存储我通过Finder的信息屏幕进行的"低分辨率打开"复选框的选择?
编辑12月7日(添加plist详细信息):
如plist编辑器所示:

正如小牛队的现代Xcode中所见:

唯一的区别是显示的名称.Xcode称之为"高分辨率能力",而在文件中它仍然是"NSHighResolutionCapable"
这是我们关心的文件信息对话框的一部分:

我想这将是一个愚蠢的问题,但我不知道这里发生了什么.我想通过.htaccess文件中的正则表达式匹配一组特定的URI.
我想要以下内容
所以:
^[^.]+$
Run Code Online (Sandbox Code Playgroud)
用于匹配URI中没有点的所有文件.
\.html?$
Run Code Online (Sandbox Code Playgroud)
匹配所有.html/.htm文件
(^[^.]+$)|(\.html?$)
Run Code Online (Sandbox Code Playgroud)
似乎结合两者
(^[^.]+$)|(\.html?$)|(\.php$)
Run Code Online (Sandbox Code Playgroud)
无法将事物与以php结尾的匹配文件组合在一起.例如test.jpg匹配,而不应该匹配.
我一定错过了一些明显的东西.它是什么?谢谢.
更新:这是我使用的整个上下文:
### REWRITE RULES ###
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (^[^.]+$)|(\.html?$)|(\.php$) bootstrap.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
bootstrap.php包含:
echo "testing bootstrap";
Run Code Online (Sandbox Code Playgroud)
查询不存在的.jpg
http://localhost/test.jpg
Run Code Online (Sandbox Code Playgroud)
给我这个输出:
testing bootstrap
...
Run Code Online (Sandbox Code Playgroud)
更新2:
在测试下面的第一个答案后,我发现使用简单的:
RewriteRule \.php$ bootstrap.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
以与上述相同的方式失败.它匹配test.jpg.虽然服务器配置或.htaccess文件中没有什么疯狂的...这就是.htaccess文件中的全部内容,除了我已发布的内容:
AddType application/x-httpd-php .html
AddType application/x-httpd-php .xml
DirectoryIndex index.php
ErrorDocument 404 /errors/404.php
Run Code Online (Sandbox Code Playgroud)
答案:(无法再将我自己的问题再提出8个小时......)
谢谢大家帮助我.
特别感谢@mario,他通过下面的评论帮我解决了这个问题.
这确实是一个愚蠢的问题.以下是发生的事情:
rewrite.log:
strip per-dir prefix: D:/Web_Root/test.jpg -> test.jpg
applying pattern '\.php$' to uri 'test.jpg'
pass through …Run Code Online (Sandbox Code Playgroud) 我正在构建最新的dcraw.c的跨平台OS X版本.我在OS X 10.6.8上执行此操作以获得PPC兼容性.现在我的问题是strnlen似乎在最新版本的程序中使用,它在10.6.8上不存在,gcc给我这样的消息:
Undefined symbols for architecture i386:
"_strnlen", referenced from:
...
Undefined symbols for architecture ppc:
"_strnlen", referenced from:
...
Run Code Online (Sandbox Code Playgroud)
所以,我想定义strnlen但不太清楚如何.
问:任何人都可以在dcraw.c中提供strnlen的工作定义吗?
我的gcc编译命令是这个btw:
gcc -o dcraw -O4 -Wall -force_cpusubtype_ALL -mmacosx-version-min=10.4 -arch i386 -arch ppc dcraw.c -lm -DNODEPS
Run Code Online (Sandbox Code Playgroud) php ×5
.htaccess ×2
apache ×2
macos ×2
batch-file ×1
browser ×1
c ×1
c++ ×1
cocoa ×1
command-line ×1
css ×1
file ×1
gcc ×1
http ×1
javascript ×1
jquery ×1
mod-rewrite ×1
plist ×1
regex ×1
validation ×1
windows ×1
xhtml ×1
xml ×1
xpath ×1