我知道这个问题看起来很丑陋和奇怪,但是有没有办法在运行时删除PHP中的函数?
我有一个在"if"块中声明的递归函数,并希望该函数仅在"if"块中"有效".我不希望在此块之外调用此函数.
我发现了runkit_function_remove,但我的Web主机上没有启用runkit.还有另一种方法吗?
顺便说一下,我只支持PHP 5.1.0.
编辑:我知道我的问题是hacky,但这是我想要做的事情:
if (function_exists('get_magic_quotes_gpc') && @get_magic_quotes_gpc())
{
function stripslashes_deep($value)
{
return is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
}
$_POST = array_map('stripslashes_deep', $_POST);
$_GET = array_map('stripslashes_deep', $_GET);
$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
//runkit_function_remove('stripslashes_deep');
}
Run Code Online (Sandbox Code Playgroud)
由于"stripslashes_deep"只会活在魔术引号是,我想摆脱它,当我用它做.我不希望人们依赖一个并不总是存在的功能.我希望现在更清楚了.非hacky解决方案建议也是受欢迎的!
我正在尝试从表单上传doc文件并将其发送到电子邮件.我在用
$_FILES['file']['tmp_name'];
Run Code Online (Sandbox Code Playgroud)
问题是,它返回一个随机生成的文件名.因此,当它到达收件箱时,文件名为phpvwRGKN.dat(文件名每次都是随机的).
如何保留文件名和扩展名?
注意:我正在使用geekMail类
我研究了几个小时,我有点沮丧.也许我只是缺少一些东西,因为我不熟悉博客.
我不是自己的博客,我只是使用WordPress.com.我想要包含c#代码的片段,让它们看起来像在Visual Studio中,或者至少使它们看起来很好,当然还有行号和颜色.我见过的解决方案似乎都假设您正在托管自己的博客.我无法弄清楚如何安装插件.
是否有一个小部件可以使代码片段看起来不错,或者其他一些我可以轻松使用的解决方案?
谢谢
编辑:Sarfraz概述了解决我的问题的一种方法(谢谢!),我已经尝试了但是我有一个问题,即它没有着色我的大部分代码(较新的关键字,如var,from,where,选择等).有没有解决这个或是否有其他解决方案?
由于我们服务器上的PHP从7.0升级到7.2.如果完成新部署,我会收到以下警告(导致错误).原因可能是旧会话在部署后失效.
警告:session_name():在第137行的/var/www/html/model/login/lib/Session.class.php中,当会话处于活动状态时,无法更改会话名称
警告:session_set_cookie_params():当 第138行的/var/www/html/model/login/lib/Session.class.php中的会话处于活动状态时,无法更改会话cookie参数
警告:无法修改标头信息 - 已在/ var/www/html/model/login/lib /中发送的标头(在/var/www/html/model/login/lib/Session.class.php:137处开始输出)第142行的Session.class.php
似乎PHP 7.2在会话罪的上下文中得到了更严格的特定上下文.服务器似乎识别无效会话并尝试销毁这些会话.这是Session类的一部分:
/**
* Secure instant destruction of session. Must be called after session_start !
*/
public static function destroyAbsolute() {
self::checkInit(); // unimportant
session_name(self::$name); // this is line 137
session_set_cookie_params(0, COOKIEPATH, null, self::$force_ssl_cookie, true);
if(session_id()) {
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), "", time() - 42000, COOKIEPATH);
}
unset($_COOKIE[session_name()]);
session_destroy();
}
}
Run Code Online (Sandbox Code Playgroud)
关于会话,PHP有什么变化?
如果另一个会话处于活动状态,为什么不允许设置会话名称(根据具有session_name的文档,我可以更改会话并启动多个会话)?
我怎么可能适当地破坏正在运行的会话?
进一步研究我还在GitHub上找到了以下讨论(https://github.com/Icinga/icingaweb2/issues/3185).他们确认PHP 7.2引入了这个错误.不幸的是,也没有答案: - /
这是我的代码,对于除了空字符串,null和false之外的所有内容都是true:
if (routeinfo["no_route"] == "" || routeinfo["no_route"] == null || routeinfo["no_route"] == false) {
// do sth ...
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码,对于除了空字符串,null,false或零之外的所有内容都是true:
if (routeinfo["no_route"] == "" || routeinfo["no_route"] == null || routeinfo["no_route"] == false || routeinfo["no_route"] == 0) {
// do sth...
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在Dart写这个更短的?还是不可能?
ETag 标头的定义 ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag ):
ETag HTTP 响应标头是资源特定版本的标识符。它使缓存更加高效,并节省带宽,因为如果内容未更改,Web 服务器不需要发送完整响应。另一方面,如果内容发生更改,etag 有助于防止资源的同时更新相互覆盖(“空中冲突”)。
Cache-Control 标头的定义 ( https://developer.mozilla.org/de/docs/Web/HTTP/Headers/Cache-Control ):
Cache-Control 通用标头字段用于指定请求和响应中的缓存机制的指令。
因此,ETag 标头告诉资源浏览器向服务器发送单个 HTTP 请求,并询问文件哈希是否已更改。如果是,请下载一个新的。伟大的。那么,如果设置了 ETag 标头,为什么我还需要 Cache-Control(除了 Expires 标头,这可能有助于避免这个单一请求)?
因此,如果我必须设置 Cache-Control 标头,它只会有害,对吧?我认为最合适的值是:
Cache-Control: must-revalidate
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否会引发不必要的额外操作。
在这个问题中出现的同样问题对我来说发生了很多:在Netbeans 7.4 for PHP上警告"不要直接访问Superglobal $ _POST数组"
但是 - 当然我会关注$ _POST和用户输入等.但我使用NetBeans不理解的自定义函数来执行此操作,因此我的IDE充满了警告.
另一个恼人的例子:"函数声明中的嵌套块太多".当然你应该避免这种情况,但我认为这并不总是可行的.
如何在Netbeans IDE中禁用单个警告,同时仍保留所有其他警告?
嗨,我是Docker的新手.我有一个docker-compose.yml,它看起来像这样:
version: "3"
services:
lmm-website:
image: lmm/lamp:php${PHP_VERSION:-71}
container_name: ${CONTAINER_NAME:-lmm-website}
environment:
HOME: /home/user
command: supervisord -n
volumes:
- ..:/builds/lmm/website
- db_website:/var/lib/mysql
ports:
- 8765:80
- 12121:443
- 3309:3306
networks:
- ntw
volumes:
db_website:
networks:
ntw:
Run Code Online (Sandbox Code Playgroud)
我想在docker-compose文件中安装Yarn包管理器:
sudo apt-get update && sudo apt-get install yarn
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何宣布这个,我试过了
command: supervisord -n && sudo apt-get update && sudo apt-get install yarn
Run Code Online (Sandbox Code Playgroud)
它无声地失败了.我该如何正确声明?或者docker-compose.yml是错误的地方吗?
是否可以使用纯CSS仅显示字符串的前两个字母?
到目前为止,我已经尝试过(没有成功):
还有另外一种方法吗?
我正在使用gulp-connect-php尝试使用BrowserSync在本地运行php服务器.这是我的gulp配置文件:
var gulp = require('gulp'),
connect = require('gulp-connect-php'),
browserSync = require('browser-sync');
gulp.task('connect-sync', function() {
connect.server({}, function (){
browserSync({
server: {
baseDir: "app"
},
// proxy: '127.0.0.1:8000'
});
});
gulp.watch('**/*.php').on('change', function () {
browserSync.reload();
});
});
gulp.task( 'default', [ 'connect-sync' ] )
Run Code Online (Sandbox Code Playgroud)
当我在我的app目录中有一个index.html文件时,上面的代码有效,但当我用index.php文件替换它时,我得到以下消息:
不能获取 /
不完全确定我在这里做错了什么?