我通过SSH从本地服务器在远程服务器上运行脚本.首先使用SCP复制脚本,然后在传递一些参数时调用,如下所示:
scp /path/to/script server.example.org:/another/path/
ssh server.example.org \
MYVAR1=1 \
MYVAR2=2 \
/another/path/script
Run Code Online (Sandbox Code Playgroud)
这工作正常,在远程服务器上,变量MYVAR1
和MYVAR2
可用的相应值.
问题是这些脚本处于不断发展状态,每次重命名,添加或删除变量时都需要更改SSH命令.
我正在寻找一种方法将所有本地环境变量传递给远程脚本(因为MYVAR1
并且MYVAR2
实际上是本地环境变量),这将解决SSH命令维护问题.
由于MYVAR1=1 \
和MYVAR1=1 \
是env
命令输出后面的行,我尝试用实际命令替换它们,如下所示:
ssh server.example.org \
`env`
/another/path/script
Run Code Online (Sandbox Code Playgroud)
这似乎适用于"简单" env
输出线(例如SHELL=/bin/bash
或LOGNAME=sysadmin
),但是我得到更多"复杂"输出线的LS_COLORS=rs=0:di=01;34:ln=01;[...]
错误(例如,它会产生错误-bash: 34:ln=01: command not found
).我可以通过在运行SSH命令之前取消设置与这些复杂输出行相对应的变量来消除这些错误(例如unset LS_COLORS
,然后ssh [...]
)但是我发现这个解决方案非常可靠.
问:有人知道如何通过SSH将所有本地环境变量传递给远程脚本吗?
PS:本地环境变量不是远程机器上可用的环境变量,因此我无法使用此解决方案.
用解决方案更新
我结束使用sed
的格式化env
命令输出VAR=VALUE
到VAR="VALUE"
(和连接到1中的所有行),其防止从解释某些输出的作为指令bash和修复我的问题.
ssh server.example.org \
`env | sed 's/\([^=]*\)=\(.*\)/\1="\2"/' | …
Run Code Online (Sandbox Code Playgroud) max_execution_time only affect the execution time of the script itself.
Any time spent on activity that happens outside the execution of the script
such as system calls using system(), stream operations, database queries, etc.
is not included when determining the maximum time that the script has been running.
This is not true on Windows where the measured time is real.
Run Code Online (Sandbox Code Playgroud)
测试证实了这一点:
不会超时
<?php
set_time_limit(5);
$sql = mysqli_connect('localhost','root','root','mysql');
$query = "SELECT SLEEP(10) FROM mysql.user;";
$sql->query($query) or die($query.'<br />'.$sql->error);
echo "You …
Run Code Online (Sandbox Code Playgroud) 我正在尝试测试wait_timeout
似乎被忽略的 MySQL 设置。
PHP 脚本:
<?php
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$sql = mysqli_connect('localhost','root','root','mysql');
$query = "SHOW VARIABLES WHERE Variable_name='wait_timeout';";
$result = $sql->query($query) or die($query.'<br />'.$sql->error);
$row = $result->fetch_object();
echo "wait_timeout = " . $row->Value . "<br/>\n";
$time_start = microtime_float();
$query = "SELECT SLEEP(2) FROM mysql.user;";
$sql->query($query) or die($query.'<br />'.$sql->error);
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "Query completed in $time seconds<br/>\n";
echo "You got the page"; …
Run Code Online (Sandbox Code Playgroud) 我负责监督网站的整个IT方面(包括基础设施和开发),而且我与领先的前端开发人员有不同的看法.他的方法是创建单独的类,每个类带来一个功能,并根据需要组合多个类来设置元素的样式:
HTML
<div class="float_left padding_10 width_60_percent"></div>
<div class="float_left width_30_percent"></div>
<div class="float_left padding_10 width_10_percent"></div>
CSS
.float_left { float: left; }
.padding_10 { padding: 10px; }
.width_60_percent { width: 60%; }
.width_30_percent { width: 30%; }
.width_30_percent { width: 10%; }
Run Code Online (Sandbox Code Playgroud)
优点:
- 通过HTML理解CSS:只需查看HTML中的类名,就可以了解CSS的作用.
- 易于创建:一旦定义了一组类,只需将它们组合在HTML中,您就不必经常编写新的CSS.
- 易于维护:与上述相同的原因.
- 可移植性:您可以对您工作的任何网站使用相同的方法(这对他来说是有意义的,因为他是一个从事不同项目的承包商).
- 较小的CSS:只要你的布局达到一定的临界尺寸,同时一次又一次地重复使用相同的类(这将是适当布局的情况,但显然由于简洁性而未在上面反映出来)例).
缺点:
- 更大的HTML.
- 如果您对CSS部分(我的后端开发人员创建视图不感兴趣)不感兴趣,则难以阅读HTML.
- 更难集成基于类选择器的Javascript(我们使用的是jQuery).
我的方法不是由编写/维护CSS本身的容易程度决定的,而是由于担心我们的HTML代码的很大一部分将仅用于集成我们的CSS,这将影响性能:我相信它是最好有一个更大的CSS,它可以提供服务和缓存一次,而更小的HTML可以节省每个页面视图的带宽,而不是相反.因此,我会选择以下方法:
HTML
<div id="column_left"></div>
<div id="column_middle"></div>
<div id="column_right"></div>
CSS
#column_left { float: left; padding: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试ZendDeveloperTools
为ZF2
beta5 安装模块.以下是我目前采取的步骤:
- 安装成功ZendSkeletonApplication
.
- 将模块下载到我的./vendor
目录中.
- 启用模块./config/application.config.php
:
<?php
return array(
'modules' => array(
'Application',
'ZendDeveloperTools', // Added this line
),
'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
'module_paths' => array(
'./module',
'./vendor',
),
),
);
Run Code Online (Sandbox Code Playgroud)
-copied ./vendor/ZendDeveloperTools/config/zenddevelopertools.local.php.dist
到./config/autoload/zenddevelopertools.local.php
.
- 编辑zenddevelopertools.local.php
如下:
<?php
return array(
'zdt' => array(
'profiler' => array(
'enabled' => true,
'strict' => true,
'verbose' => true,
'flush_early' => false,
'cache_dir' => 'data/cache', …
Run Code Online (Sandbox Code Playgroud) 我正在使用Doctrine
它并且它INSERT
第一次执行时无法数据persist/flush
但是第二次工作,并且第3次失败:
// there is no code executed between any of the attempts
$entity = new My\Entity();
$entity->setTag('A'); // just a random field
$em->persist($entity);
$em->flush();
// INSERT not performed
// if I exit here and check the database, no entry is added
$entity = new My\Entity();
$entity->setTag('B');
$em->persist($entity);
$em->flush();
// INSERT performed
// if I exit here and check the database, 1 entry has been added
// and I can see it's "B"
$entity = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试设置PHP
mysqlnd_ms
扩展,我遇到了一些问题.到目前为止,我所做的就是:
- 安装mysqlnd_ms
(如果我运行,pecl info mysqlnd_ms
我会获得有关mysqlnd_ms
插件的信息):
$ sudo pecl install mysqlnd_ms
Run Code Online (Sandbox Code Playgroud)
- 修改PHP.ini
(并在之后重新启动):
mysqlnd_ms.enable=1
mysqlnd_ms.disable_rw_split=0 ; for good measure
mysqlnd_ms.config_file=mysqlnd_ms_config.ini
Run Code Online (Sandbox Code Playgroud)
- mysqlnd_ms_config.ini
使用以下内容创建(在官方文档中作为示例提供)
{
"myapp": {
"master": {
"master_0": {
"host": "127.0.0.1",
"port": "3306"
}
},
"slave": {
"slave_0": {
"host": "localhost",
"socket": "\/var\/run\/mysqld\/mysqld.sock"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据文件:
该插件在配置的MySQL从服务器上执行只读语句,在MySQL主服务器上执行所有其他查询.如果语句以SELECT,SQL提示/ ms = slave/开头,或者如果选择了从属服务器运行上一个查询并且查询以SQL提示/ ms = last_used/开头,则语句被认为是只读的.在所有其他情况下,查询将被发送到MySQL复制主服务器
所以在这一点上我期待我的SELECT
语句被发送到slave
和其他语句(例如UPDATE …
我想整合JSON Editor Online
与phpMyAdmin
以编辑包含在JSON格式编码的PHP阵列某些表中的字段.
CharEditing: Which editor should be used for CHAR/VARCHAR fields
Run Code Online (Sandbox Code Playgroud)
我读到了这个问题指出tbl_change.php
但却看不到任何简单的定制方法.
我希望我们能做到这样的事情:
DB
.有没有人知道只为某些字段添加自定义编辑器到phpMyAdmin的方法?
我有以下代码:
dataLayer.push({event: 'A',eventAttributes: { attrA: 'a' }});
dataLayer.push({event: 'B',eventAttributes: { attrB: 'b' }});
dataLayer.push({event: 'C',eventAttributes: { attrC: 'c' }});
Run Code Online (Sandbox Code Playgroud)
和一个完全空的 GTM 容器(没有标签、没有触发器、没有变量)。
当我检查Data Layer
GTM 调试选项卡时,我看到以下内容:
{
gtm: {start: 1448552543040, uniqueEventId: 1448552543091},
event: 'A',
eventAttributes: {attrA: 'a'}
}
{
gtm: {start: 1448552543040, uniqueEventId: 1448552543092},
event: 'B',
eventAttributes: {attrA: 'a', attrB: 'b'}
}
{
gtm: {start: 1448552543040, uniqueEventId: 1448552543092},
event: 'C',
eventAttributes: {attrA: 'a', attrB: 'b', attrC: 'C'}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,GTM 将值合并到eventAttributes
对象而不是覆盖对象。
Q1:GTM为什么要这么做?
Q2:有没有办法可以防止这种情况发生(除了将每个对象属性定义为单独的变量之外)?
仅供参考,我eventAttributes
在数据层中使用该对象,因为我想简单地重新使用其中的任何内容作为我的基于事件的工具(Mixpanel、KISSmetrics...)的属性。对于上述问题,如果我必须显式声明 DataLayer 和 …
我是新手D3js
,在开始之前,我想了解核心和插件的版本是如何管理的,所以我发现自己不会遇到旧的不受支持的版本或使用过于实验性的东西.
如果我看的发布历史我看到,v4
在引回Jun 2016
(https://github.com/d3/d3/releases?after=v4.1.0),并v5
在Jan 2018
(https://github.com/d3/d3/发布?after = v5.0.1).
然而,当我查看D3js
图库中的代码(https://github.com/d3/d3/wiki/Gallery)时,我发现其中大部分是基于v3
哪些是2
主要版本.
例如,如果我在2018年5月更新了一个Sankey示例,它仍然基于v3
,如果我尝试用它来替换它v5
.
另一个例子:有人v4
在2017年2月遇到了一个问题,当时和2017年4月的答案仍然无法解决(尽管它已经v4.8
发布时间差不多1年了v4
):
所以它似乎v4/v5
是完全不同的分支,v3
甚至不向后兼容.
因此我的问题:
v5
向后兼容到什么程度v3
?v3
支持多长时间?