google sheet如果不指定範圍就append只要輸入空格就會發生推移-Appending rows with empty cells results in increasing row indentation

使用google sheet api V4 with php

google sheet如果不指定範圍就寫append程式只要輸入空格就會發生推移如下

row

 

$rangeNOW=’代墊費’;

$values = [[date(‘Y/m/d’),$item, $money, ‘ ‘ ,’努狗巴弟巴弟紀錄’]]

$body = new \Google_Service_Sheets_ValueRange([
‘values’ => $values
]);

$params = [
‘valueInputOption’ => ‘USER_ENTERED’
];

$service->spreadsheets_values->append($spreadsheetId, $rangeNOW, $body, $params);

 

只要插入新的一行,會從你上一列最後出現值的欄位下方開始插入新一列的資料,
非常靠北

後來再github找到解
(這裡尾巴解)
https://github.com/burnash/gspread/issues/537

也就是你一定要"指定範圍"

$rangeNOW=’代墊費!:A60′;
//要指定代墊費這個工作表從A60格開始 append
‘工作表名稱!欄位點’

那很靠北的,也就是你要知道目前最後一列用到哪格了,
很抱歉sheet api沒有提供這個給php,不像mysql那樣方便

所以我自己用了很愚蠢的方式,先取得這工作表資料,再算出最後一列

//這邊算取得最後一ROW是第幾ROW
$range=’代墊費’;
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$value_all = $response->getValues();//所有資料
$lastRow_number=count($value_all); //取得最後一行,例如第111行

//$lastRow_number 這個就是目前最後一ROW囉

再回到上述程式

$rangeNOW=’代墊費!A’.$lastRow_number; //這樣就是 代墊費!A60 囉

$service->spreadsheets_values->append($spreadsheetId, $rangeNOW, $body, $params);

google sheet api wiht php 好多坑

 

 

php資料夾內的所有檔案數量總和包含第一層資料夾的所有檔案數量

目前能計算總合數量
以及第一層目錄 每一個目錄的內含檔案總量(包括第N層)
第二層以及第二層後的只會列出該資料夾內的數量

 

<?php

//此程式子資料夾內的數量不對
//但是第一層資料夾總和是正確的 (包括N層的總和)
//第二層後的只會秀該資料夾內的檔案數量 不會包含第二層到第三層的~~~~到N層的總和
//只花1小時寫沒有寫很好

$dirn = 0; //目錄數
$filen = 0; //檔案數
$filen_this=0;//第一層子資料夾內檔案總合數
$filen_this_now=0;
$timeplus=0;

//打開目錄
$dir = opendir(“./"); // ./代表目前目錄
//$dir = opendir(“qq123″); // ./代表目前目錄

//列出 目錄中的文件
while($file = readdir($dir)) {
if($file!="." && $file !="..")
{
$filen_this=0;

if(is_dir($file)) {

getdirnum($file);
echo ‘<p style="background-color:#ffe58f;">’.$file."資料夾-總檔案數為:{$filen_this}<br></p>";
}

}
}

closedir($dir);
//用來統計一個目錄下的檔案和目錄的個數
function getdirnum($file) {

global $dirn;
global $filen;
global $filen_this;

global $filen_this_now;

$filen_this_now=0;
//算目前資料夾下檔案數
$FileNum=count(glob(“$file/*.*"));
$filen=$filen+$FileNum;

$filen_this=$filen_this+$FileNum;
$filen_this_now=$filen_this_now+$FileNum;

$dir = opendir($file);
echo " -“.$file."資料夾-檔案數為:{$filen_this_now}<br>";

while($filename = readdir($dir)) {

if($filename!="." && $filename !="..")
{

$filename = $file."/".$filename; //因為子資料夾要加路徑/符號

if(is_dir($filename)) {

//echo " -“.$filename."資料夾-檔案數為:{$filen_this_now}<br>";

getdirnum($filename); //遞迴,就可以檢視所有子目錄

}
// else {}
}
}

closedir($dir);

}//getdirnum()END
//echo “全部-目錄數為:{$dirn}<br>";
echo “全部-檔案數為:{$filen}<br>";

?>

wp contact form7 reacptchaV3 無效改用ReCaptcha v2 for Contact Form 7

嘗試了contact form7裡面自帶的reacptchaV3  整合

但是啟用 表單就會一直驗證失敗不知為何

後來索性找了外掛ReCaptcha v2 for Contact Form 7

也去google recaptcha啟用了 v2金鑰

停用原本自帶的reacptchaV3  整合(就是移除整合那邊V3金鑰就好)

然後選擇reacptcha版本 V2,

最重要一步 在表單設計裡 也就是表單HTML設計裡 加入 [recaptcha]

就可以看到recaptcha V2 那個要打勾才能送出的 大框框了

1611779599097

虛擬主機 出去ip 跟進來ip 不一樣用php curl測試

測試端
ip-t.php
<?php
//請另存成ip-t.php 然後上傳server網路上跑,會送去ip.php看 進與出的IP
//init curl
$ch = curl_init();
//curl_setopt可以設定curl參數
//設定url
curl_setopt($ch , CURLOPT_URL , “https://yourdomain.com/ip.php");
//設定header
curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-type: application/x-www-form-urlencoded’));
//啟用POST
curl_setopt($ch, CURLOPT_POST, true);
//傳入POST參數
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( array( “name"=>"johnson") ));
//執行,並將結果存回
$result = curl_exec($ch);
//關閉連線
curl_close($ch);
?>

接收端
ip.php
<?php
echo $_SERVER[“HTTP_REFERER"];
echo ‘<br>’;
//echo $_SERVER[‘HTTP_X_FORWARDED_FOR’];
//echo ‘<br>’;
echo $_SERVER[‘REMOTE_ADDR’]; //使用者出去的ip
echo ‘<br>’;
echo $_SERVER[‘SERVER_ADDR’]; //進來的ip
?>

使用情境:
因為有時候會需要由server發向另一台主機程式
而另一台總是擋掉ip 才發現虛擬主機給的ip 只是進去,發出的ip是不同的
原理:
而使用者 如果用$_SERVER[‘REMOTE_ADDR’]; 去看 只會看到使用者自己電腦的IP,
所以需要用server主機 使用curl模擬post出去 就會是server端送出了。

[坑] wordpress用ajax變數過去總是回傳404-WordPress via POST data and return the 404 errors

wordpress用ajax變數過去總是回傳

404-WordPress via POST data and return the 404 errors

如果你確定網址輸入不是404,東西存在,ajax過去的網頁內容檢查也沒錯誤,

那你有可能是使用了 wordpress 裡的 變數

請查看妳有沒有用到裡面得變數 有的話請改變數名稱,

https://codex.wordpress.org/WordPress_Query_Vars

例如

我用 ajax 使用post方式 變數是用了 page,但總是回傳404,可是檢查被ajax那頁完全沒問題,後來變數改成pageQQ就可以了,

真實踩坑血淚實例。

感謝此國外神人踩過的坑

WordPress POST data and the 404 errors: The mystery of the restricted query variables

wordpress http強制轉https wordpress http force to https

找到 .htaccess 檔案 加入下列兩行 程式

插入於RewriteEngine On 跟 RewriteBase / 之間

 

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

WP code 自建主題常用的code

<?php while (have_posts()) : the_post(); //要這個才能帶出 the_title()….等使用函數 ?>

<?php the_title();?>

<?php endwhile; //while1 END ?> //有While就要有 end

//網頁標題   呈現->  關於我們(網站目前頁面) | 小事一樁(網站標題)
<title><?php wp_title(‘ | ‘, ‘echo’, ‘right’); ?><?php bloginfo(‘name’); ?></title>

G suit gmail設定

TXT驗證

如果是Cpanel後台

就去網域管理(Zone edit)管理你的網址,

第一步

新增一個TXT 值裡面輸入gsuit提供的

至於前面Domain那邊就輸入你自己的網址,例如我的網址是goods-design.com.tw就輸入這個

第二步

等他驗證完成,然後輸入google的mx紀錄(請參閱這裡https://support.google.com/a/answer/140034?hl=zh-Hant),記得先把裡面原有的mx紀錄先全部刪除

第三步

驗證完成後,他會發一封成功的信件到你新的mail,這時候,這個email都能收信,但是有可能無法發信,請不要緊張,因為我也緊張過,一小時後,