


添加完报上述错误,该执行如何指令:
eval "$(ssh-agent -s)" >> /dev/null
ssh-add >> /dev/null
如果不将输出输至空设备或其它文件时,会导致SFTP无法登录。
第一种方法:在 vim ~/.bashrc文件尾部添加如下代码,可永久解决问题。
export SSH_AUTH_SOCK=0 #这样则可以永久屏蔽gnome-key的SOCK_AUTH_SOCK的干扰,此时执行ssh xxx@yyy.com时,则可以成功登录。
Qt的LocalSocket是基于PIPE实现的,且PIPE的缓冲区被设置为0。
为什么被设置为0呢?它文档说是数据在管道没有被关闭前取出,会导致数据丢失,故在创建时设置其缓冲区为0。那它是如何优化性能呢?它是利用OVERLAPPED_COMPLETION_ROUTINE的能力实现的。无限异步调用ReadFileEx(PIPE),当数据到达缓冲区后,取回数据又再调用,从而实现数据的快速读取。写入数据呢?也是相似的方法。
那它与QTcpSocket混用是否会影响性能吗?在实际P2P模式压测试下,PIPE的传输效率为每秒5M字节左右,QTcpSocket为14M字节,这压测是在发送1M数据回复一个ACK然后再发送1M数据下取得的结果。
QTcpSocket虽效率高,但占用CPU也相应高,QLocalSocket虽然是低很多,但CPU占用低。
在实际的复杂的网络环境下,其也满足使用。
Qt的LocalSocket在Window中是基于Pipe实现的,而Linux中是基于UnixSocket实现的。
按说pipe的性能是不错的,但Qt比较坑,它的内部缓冲区是0,故形成一个阻塞操作,再加上是基于Event事件唤醒,性能整体就比较低下,没有Socket的高。
此事件的使用是与窗口消息共用同一个线程的,为了不影响其它消息的正常处理,它采用WaiForMutipleObject的方法,但等待时间为0,故会出现缓慢。
那Linux呢,是否可以使用呢?也不建议使用,原因是它的缓存只有64K,小数据传送,其效率是比较高的,但大数据传输时,就会出现阻塞的情况,这也影响的整体性能表现。
正则表达式如下:
^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$
目前匹配号段
中国电信号段
133、149、153、173、177、180、181、189、199
中国联通号段
130、131、132、145、155、156、166、175、176、185、186
中国移动号段
134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、178、182、183、184、187、188、198
其他号段
14号段以前为上网卡专属号段,如中国联通的是145,中国移动的是147等等。
虚拟运营商
电信:1700、1701、1702
移动:1703、1705、1706
联通:1704、1707、1708、1709、171
在Window中执行管道命令时,由于双引号或参数分割或合并的原因是无法执行的,例如以下这条命令:
cmd.exe /c netstat -ano|find “80”|find “62499”
也正因为Window的差异,故Qt提供了一个特殊函数:void QProcess::setNativeArguments(const QString &arguments)
具体执行如下:
#if defined(Q_OS_WIN)
QString cmd = QString("/c netstat -ano|find \"80\"|find \"%1\"").arg(port);
qDebug() << "onConnected" << cmd;
proc->setNativeArguments(cmd);
proc->start("cmd.exe");
#elif defined(Q_OS_MAC)
QStringList args;
args << "-c" << QString("netstat -nat|grep %1|grep 80").arg(port);
proc->start("/bin/bash", args);
#else
QStringList args;
args << "-c" << QString("netstat -ntp|grep %1|grep 80").arg(port);
proc->start("/bin/bash", args);
#endif
macro(qt5_generate_myrepc outfiles infile outputtype)
# get include dirs and flags
get_filename_component(abs_infile ${infile} ABSOLUTE)
get_filename_component(infile_name "${infile}" NAME)
string(REPLACE ".rep" "" _infile_base ${infile_name})
if(${outputtype} STREQUAL "SOURCE")
set(_outfile_base "rep_${_infile_base}_source")
set(_repc_args -o source)
elseif(${outputtype} STREQUAL "MERGED")
set(_outfile_base "rep_${_infile_base}_merged")
set(_repc_args -o merged)
else()
set(_outfile_base "rep_${_infile_base}_replica")
set(_repc_args -o replica)
endif()
set(_outfile_header "${CMAKE_CURRENT_BINARY_DIR}/${_outfile_base}.h")
add_custom_command(OUTPUT ${_outfile_header}
DEPENDS ${abs_infile}
COMMAND ${Qt5RemoteObjects_REPC_EXECUTABLE} ${abs_infile} ${_repc_args} ${_outfile_header}
VERBATIM)
set_source_files_properties(${_outfile_header} PROPERTIES GENERATED TRUE)
qt5_get_moc_flags(_moc_flags)
# Make sure we get the compiler flags from the Qt5::RemoteObjects target (for includes)
# (code adapted from QT5_GET_MOC_FLAGS)
foreach(_current ${Qt5RemoteObjects_INCLUDE_DIRS})
if("${_current}" MATCHES "\\.framework/?$")
string(REGEX REPLACE "/[^/]+\\.framework" "" framework_path "${_current}")
set(_moc_flags ${_moc_flags} "-F${framework_path}")
else()
set(_moc_flags ${_moc_flags} "-I${_current}")
endif()
endforeach()
set(_moc_outfile "${CMAKE_CURRENT_BINARY_DIR}/moc_${_outfile_base}.cpp")
qt5_create_moc_command(${_outfile_header} ${_moc_outfile} "${_moc_flags}" "" "" "")
list(APPEND ${outfiles} "${_outfile_header}" ${_moc_outfile})
endmacro()
qt5_generate_repc是不支持MERGED特性的,但命令行是已经支持了。故自定议qt5_generate_myrepc函数。
字符串为 < 和 > 在以前的键盘中,映射方式是不一样的。因此可能需要重新设备键位,解决不一致的问题。在老的键盘中,<和>两个字符是在同一个键上的,故在XDisplay中容易出现输入<却显示>的奇怪问题。
xmodmap -e ‘keycode 94 = comma less’
基于remi的安装源,创建出容器和wordpress开发环境,在运行wordpress是存在差别的。具体差别描述如下:
曾深入对比这两个环境差异包括环境变量或某些参数等,最终无法定位出具体原因。
故最终只能使用官方的容器。
假如中英文的表前缀分别为cn_和en_,其站点目录也分别为cn和en,假设帐号初始化是以cn_前缀创建的,则其它语言则只需要克隆cn的数据库即可。
第一步:将cn目录复制一份改为en。
第二步:修改wp_config.php文件,使其共享相同的用户数据表ayd_users和ayd_usermeta。
define('WP_TEMP_DIR',ABSPATH.'wp-content/tmp');
define("FS_METHOD","direct");
define("FS_CHMOD_DIR",0777);
define("FS_CHMOD_FILE",0777);
define('CUSTOM_USER_TABLE', 'ayd_users');
define('CUSTOM_USER_META_TABLE', 'ayd_usermeta');
第三步:在ayd_usermeta表中复制相关前缀表项,需要复制的表前项有:
en_capabilities
en_user_level
en_user-settings
en_user-settings-time
en_dashboard_quick_press_last_post_id
en_persisted_preferences
第四步:复制cn_xxx的数据表,并改名为en_xxx。
第五步:修改en_options表中的原cn_user_roles字段,并改为en_user_roles。
此时,应该完成的新的英文版创建了,然后就可以打开这个子站进行相关的编辑了。
——————————————–
1.其登录后台的权限关键代码在【wp-admin/includes/menu.php】中,如下所示:
wordpress是支持多语言站点,但如果希望多站点实现单点登录的话,需要修改如下几项。
// 不同的语言的站点均配置相同的用户表。
define('CUSTOM_USER_TABLE', 'ayd_users');
define('CUSTOM_USER_META_TABLE', 'ayd_usermeta');
共享的用户表,ayd_usermeta表需要添加管理员权限,否则是无法登录后台的。其字段格式是以表前缀开头的,如下:
$table_prefix . _capabilities和 $table_prefix ._user_level,假如$table_prefix是cn,则如下内容为【key, value】
cn_capabilities = a:1:{s:13:"administrator";b:1;}
cn_user_level = 10
如果还有另外其个项也顺便修改它,如:cn_user-settings / cn_user-settings-time
如果在登录后台时,仍然报错,则可能是表前缀是由其它前缀修改过来的,此时仍需要修改【$table_prefix .option】表的cn_user_roles,如下所示:
cn_user_roles的值如下:
a:5:{s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:65:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;s:17:"unfiltered_upload";b:1;s:14:"edit_dashboard";b:1;s:14:"update_plugins";b:1;s:14:"delete_plugins";b:1;s:15:"install_plugins";b:1;s:13:"update_themes";b:1;s:14:"install_themes";b:1;s:11:"update_core";b:1;s:10:"list_users";b:1;s:12:"remove_users";b:1;s:13:"promote_users";b:1;s:18:"edit_theme_options";b:1;s:13:"delete_themes";b:1;s:6:"export";b:1;s:11:"smartslider";b:1;s:18:"smartslider_config";b:1;s:16:"smartslider_edit";b:1;s:18:"smartslider_delete";b:1;}}s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:34:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;}}s:6:"author";a:2:{s:4:"name";s:6:"Author";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:11:"Contributor";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:10:"Subscriber";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}