注意:我已经提出了SO问题,但它对我的情况没用,因为
1)我试图维持以前的边界,但截至目前它在缩放时重新计算边界.
我添加了下面的代码,以在缩放对象时自动停止增加边框.现在问题是我已经为对象添加了一个5px边框,但是当缩放对象时,它不会保留我之前添加的边框.
canvas.on('object:scaling', (e) => {
var o = e.target;
if (!o.strokeWidthUnscaled && o.strokeWidth) {
o.strokeWidthUnscaled = o.strokeWidth;
}
if (o.strokeWidthUnscaled) {
o.strokeWidth = o.strokeWidthUnscaled / o.scaleX;
}
});
Run Code Online (Sandbox Code Playgroud)
现在我想要的是防止在缩放对象时增加边框.边界应该保持原样.
这是片段/ Codepen
var canvas = new fabric.Canvas('canvas1');
$('.add_shape').click(function() {
var cur_value = $(this).attr('data-rel');
if (cur_value != '') {
switch (cur_value) {
case 'rectangle':
var rect = new fabric.Rect({
left: 50,
top: 50,
fill: '#aaa',
width: 50,
height: 50,
opacity: 1,
stroke: '#000',
strokeWidth: 1
});
canvas.add(rect);
canvas.setActiveObject(rect); …
Run Code Online (Sandbox Code Playgroud)我工作的一个项目中,管理员可以创建一个名片模板,使他们能够像插入占位符变量{first_name}
,{last_name}
,{website}
等于是一个卡将通过使用户填写自己的名字,姓氏等,所以基本上占位符创建将被用户提供的实际内容所取代.为此,我将从管理员创建的模板创建一个SVG图像,并将这些占位符变量替换为服务器端的用户数据.
问题在于,如果用户提供的内容太长,则可能会延伸到画布边界之外,因此在打印实际卡时可能会被切断.
有没有办法检测到,在替换占位符后,canvas元素会延伸到画布边界之外?如果是这样,有没有办法找到该元素并使其收缩直到它适合边界?基本上,我想类似这样,但在服务器端.
这是我用来生成SVG图像的一些示例代码:
$message_string = array('{first_name}','{last_name}');
$replace_string = array('Fist Name of User','Last Name Of User');
$front_svg_url = $svg_url.$res_code[0]['front_side_svg_image'];
$front_raw_svg = file_get_contents($front_svg_url);
$front_side_svg = str_ireplace($message_string, $replace_string, $front_raw_svg);
$file_name = uniqid($prefix).".svg";
$file_handle = fopen("$folder_name/".$file_name, 'w');
fwrite($file_handle, $front_side_svg);
fclose($file_handle);
Run Code Online (Sandbox Code Playgroud)
在服务器端我只是替换变量,所以我不知道如何在服务器上实现这一点.我愿意接受任何可以实现我预期产出的想法.
我使用下面的代码来查找Google对房产的评价.我想要做的是,我正在对财产进行审查,然后我会将其与该财产的旧审查(在数据库中)进行比较.如果它大于系统的属性,则它会发送电子邮件.
此文件每小时运行一次(作为cron文件),我在Google API中启用结算,因此最大限制为1,50,000.
但由于某种原因,API不会返回确切的评论数.例如:
我为具有4条评论的一个属性运行此文件,但API返回0 2或3次,然后在一段时间后返回4条评论.
我不知道背后的原因.我还注意到,我们可以在Google搜索页面和Google+中查看评论.同样,您可以在多个位置撰写评论,例如在Google+和Google地图中.
并检查评论,我使用谷歌加网址.那么评论是否可能存在,但在另一个领域(如Google搜索页面,但不在Google+中)?
/* call api to get review count of Google */
$url = "https://maps.googleapis.com/maps/api/place/details/json?";
$params = array(
"placeid" => $google_place_id,
"key" => $google_api_key
);
$url .= http_build_query($params);
$resjson = file_get_contents($url);
$msg = $resjson;
Yii::log($msg,'info', 'application');
$resjson = json_decode($resjson,true);
$review_count = $resjson['result']['user_ratings_total']=='' ? 0 : $resjson['result']['user_ratings_total'];
/* If review is greater than 0 then check old review and if it's not same then send email */
if($review_count>0)
{
if(sizeof($ressql)>0)
{
/* if google plus …
Run Code Online (Sandbox Code Playgroud) 我正在使用phpmailer在Yii1中发送邮件.我开发的系统每天发送数千封电子邮件.通常它的工作正常,但有时系统无法发送电子邮件.邮件成功发送一段时间后(如果系统第一次无法发送电子邮件,则会再次尝试).我有时会收到不同类型的电子邮件错误.不确定如何解决这些错误:
以下发件人地址失败:test@test.com:MAIL不接受服务器,xxxx SMTP; 客户端未通过身份验证,以便在MAIL FROM [MWHPR11CA0017.namprd11.prod.outlook.com] SMTP服务器错误期间发送匿名邮件:5.7.57 SMTP; 客户端未通过身份验证,无法在MAIL FROM [MWHPR11CA0017.namprd11.prod.outlook.com]期间发送匿名邮件
test@test.com:MAIL不接受服务器
数据未被接受.STP服务器错误:2.1.5收件人确定
test@test.com:MAIL不接受服务器,354,开始邮件输入; 以<CRLF>结束.<CRLF> SMTP服务器错误:启动邮件输入; 以<CRLF>结束.<CRLF> SMTP服务器错误:启动邮件输入; 以<CRLF>结束.<CRLF>
以下收件人失败:xxx@xxx.com
所以上面是我有时会遇到的不同类型的错误.对于#5,似乎收件人不正确,所以一个人没事.但其他人呢?怎么解决?
我使用fabric js创建了一个画布,用户可以在那里创建名片.现在我正在努力创建可缩放/可打印图像(SVG和PNG).
我正在尝试使用结构jS的toSVG数据在服务器端创建SVG和PNG图像的几种方法.因此,用户可以使用该SVG打印卡.
我尝试过以下选项(以下所有链接都是指我在SO中的问题,我要求找到合适的方法):
1)使用Canvas JSON在PHP端生成SVG
无成功
2)使用原始svg数据在服务器端生成png
部分成功:面临Word换行,字体问题等问题.也无法获得可打印的图像.(如果使用更高的DPI然后问题看起来像附加SS)检查下面的SS:
3)使用SVG原始数据生成可打印PDF
部分:无法获取可打印的PDF
4)在imagick中使用svg的原始数据生成svg
无成功:无法创建svg图像(BG问题,图像问题).
5)使用原始数据直接创建SVG
$file_name = uniqid($prefix).".svg";
$file_handle = fopen("$folder_name/".$file_name, 'w');
fwrite($file_handle, $raw_svg);
fclose($file_handle);
Run Code Online (Sandbox Code Playgroud)
NO Success:字体未加载,不可缩放(表示可打印质量)
所以我的问题是创建SVG和PNG的最佳方法是渲染BG Image,Uploaded Images,diff.具有可打印质量的字体等.
注意:我更关注SVG,因为客户更喜欢,如果我可以在PNG中获得可打印的质量,它也可以工作.我也用imagick来实现SVG到PNG的对话.但是无法获得可打印的质量(在SS上面出现更高的DPI问题).
我有一个表作为ad_banner_queue,我用它来根据广告的权重生成队列.广告被插入广告表中.如果队列中的所有现有广告都已传递给用户,则会生成队列.
现在的问题是,如果同时发出请求并且Rand()返回相同的记录,我应该如何阻止发送重复的广告?
以下是代码:
<?php
/* To Get the random Ad */
public function getBanner($params) {
/* Fetch the Random from table */
$ads_queue = (new \yii\db\Query())
->select('ad_quque_id, banner_image, unique_code')
->from('ad_banner_queue')
->join('inner join', 'advertisement', 'ad_banner_queue.ad_id = advertisement.ad_id')
->where('is_sent=0')
->orderBy('RAND()')
->one();
/* In case of queue is not there generate the new queue */
if ($ads_queue === false) {
$output = $this->generateAdQueue();
//In case of something went wrong while generating the queue
if ($output == false) {
return array();
}
//Now fetch …
Run Code Online (Sandbox Code Playgroud) 我正在尝试应用递归逻辑.
我在tbl_appointment
表中有以下数据(recur_type
:1 =每周,2 =每月,0 =不递归):
appointment_id user_id date recur_type .....
18 56 2014-06-02 1
19 56 2014-06-15 2
20 56 2014-06-20 0
21 56 2014-07-20 2
Run Code Online (Sandbox Code Playgroud)
我有以下标准来获取数据:如果我获取2014年7月(第7个月)的数据,那么
appointment_id(21)
获取(1行)并...appointment_id(18)
是每周递归,7月重复被提取(4行):
appointment_id user_id date recur_type .....
18 56 2014-07-07 1
18 56 2014-07-14 1
18 56 2014-07-21 1
18 56 2014-07-28 1
Run Code Online (Sandbox Code Playgroud)
注意:日期已更改,因为每周的约会是递归的,这意味着我会在每个日期添加7天.2014-06-02 + 7天= 2014-06-09等.因此,7月,日期是2014-07-07.
appointment_id(19)
是每月递归,7月重复获取(1行):
appointment_id user_id date recur_type .....
19 56 2014-07-15 2
Run Code Online (Sandbox Code Playgroud)
注意:日期已更改,因为每个月的约会是递归的,这意味着我会在该日期添加一个月.
最终输出是(总共6行):
appointment_id user_id date recur_type ..... …
Run Code Online (Sandbox Code Playgroud) 我有两个差异.我的项目XAMPP
就是Project1
和Project2
.
当我登录时Project1
,我检查身份验证,如果成功,则存储会话.会话名称是$_SESSION['username']
.
以上过程与之相同Project2
.
现在,为了防止直接访问,我使用这个代码(在两个项目中):
if($_SESSION['username']=="")
{
header("location:index.php");
}
Run Code Online (Sandbox Code Playgroud)
所以当我登录时Project1
,我也可以访问Project2
(无需登录).
为了防止这种情况,我知道如果我创建差异.两个项目的会话名称然后它被解决.
上面的内容是在我的本地服务器上.所以我可以创造差异.我所有项目的会话名称.
但是假设我的网站在线,如果我的会话名称与diff匹配会发生什么.现场?
有数百万个网站,我的会话名称有可能与其他网站的会话名称相匹配.然后,有些用户可能会使用其他网站(在同一浏览器中)访问我的网站而他可能无法访问我的网站登录.
那么如果两个差异的会话相同会发生什么.网站?用户无需登录即可访问我的网站吗?如果是,那么我应该怎么做才能防止它呢?
提前致谢.
UPDATE
根据@Let me see
的回答,如果两个站点在同一台服务器上运行,那么它们可能会共享数据.
所以假设服务器正在共享那么我应该怎么做以防止它呢?
我正在尝试使用svg原始数据创建svg图像,我从fabric js获取.我使用下面的代码使用svg原始数据生成svg但它无法正常工作.
public function generate_svg($raw_svg='',$prefix='',$folder_name='card_image')
{
$file_name = '';
if($raw_svg!='')
{
try{
$file_name = uniqid($prefix).".svg";
$image = new \Imagick();
$image->readImageBlob($raw_svg);
$image->setImageFormat("svg");
$image->writeImage($folder_name.$file_name);
} catch (ImagickException $ex) {
echo $ex->getMessage();
}
}
return $file_name;
}
Run Code Online (Sandbox Code Playgroud)
现在问题是背景图片有点像下面这样:
那我该怎么做才能解决这个问题呢?
它应该如下所示(忽略方形和圆形),问题是整个背景看起来像黑色而不是bg图像:
所以问题是背景图像没有加载,所以我必须添加额外的库来做那个或其他任何事情?
Imagick版本:6.7.7
convert -list delegate | grep svg
cdr => "uniconvertor' '%i' '%o.svg'; /bin/mv '%o.svg' '%o"
cgm => "uniconvertor' '%i' '%o.svg'; /bin/mv '%o.svg' '%o"
dot => "dot' -Tsvg '%i' -o '%o"
dxf => "uniconvertor' '%i' '%o.svg'; /bin/mv '%o.svg' '%o"
fig => "uniconvertor' '%i' …
Run Code Online (Sandbox Code Playgroud) 我已将策略附加到EC2 IAM角色以访问AWS服务.之后我在Yii 1控制器文件中使用了以下代码:
ExampleController.php
class ExampleController extends Controller
{
public function init()
{
require_once dirname(dirname(__FILE__)) . '/extensions/awsv3/vendor/autoload.php';
$config = array(
'version' => 'latest',
'region' => 'us-west-2',
);
$s3_instance = new \Aws\Ssm\SsmClient($config);
$result = $s3_instance->getParameters([
'Names' => array('host_name'),
'WithDecryption' => true
]);
//converting S3 private data to array to read
$keys = $result->toArray();
var_dump($keys);
exit("Exit");
}
}
Run Code Online (Sandbox Code Playgroud)
产量
PHP警告
包括(TestRole.php):无法打开流:没有这样的文件或目录
注意:TestRole是IAM角色名称.
我在单个PHP文件中使用了相同的代码(与Yii1不相关)
test.php的
require_once 'protected/extensions/awsv3/vendor/autoload.php';
$config = array(
'version' => 'latest',
'region' => 'us-west-2',
);
$s3_instance = new \Aws\Ssm\SsmClient($config);
$result = …
Run Code Online (Sandbox Code Playgroud)