鍍金池/ 問答/ PHP問答
安于心 回答

/^\d+\.\d+\.\d+$/

/^\d+\.\d+\.\d+$/.test('1.45.3'); // true
/^\d+\.\d+\.\d+$/.test('1.45.0'); // true
不討喜 回答

json_encode加個(gè)參數(shù)

json_encode([],JSON_UNESCAPED_UNICODE);

js解析json

JSON.parse('["12u670818u65e5","12u670819u65e5","12u670820u65e5","12u670821u65e5","12u670822u65e5","12u670823u65e5","12u670824u65e5","12u670825u65e5","12u670826u65e5","12u670827u65e5"]');
拼未來 回答

LAMP里面的A指的是Apache HTTP Server(簡稱Apache),這是web中間件;
Apache Commons Collections是是Apache軟件基金會(huì)的Apache Commons項(xiàng)目中的集合工具類部分,這是java的一個(gè)第三方庫,與web中間件不是一個(gè)層面的東西。

維基百科:LAMP,Apache Commons

傲嬌范 回答

解決:先查詢并設(shè)置用戶組 然后就可得出相應(yīng)客戶組的正確價(jià)格

...
# @ Customer GroupId
$Int_Customer_GroupId = $customer -> getGroupId();
# @ Set Group
$product -> setCustomerGroupId( $Int_Customer_GroupId );
# @ Final Price
$finalPrice = $product -> getFinalPrice();
...
貓館 回答

excel使用這個(gè)phpexcel

至于數(shù)據(jù)就需要分片寫入excel文件,一次寫入1000條或者2000條啊,一次數(shù)據(jù)太多,會(huì)導(dǎo)致內(nèi)存溢出導(dǎo)致錯(cuò)誤,每一1000位一個(gè)文件,最后在合并文件就可以了,一次寫入50000條,這種做法是不支持的(除非你服務(wù)器很好)

懶豬 回答

與其這樣,不如把自增的ID,改成自定義的ID。比如可以用 redis 的inc生成自增ID。

夏木 回答

32位為1行,這樣子排好對齊,長度也一目了然

尛憇藌 回答

從你下面這個(gè)圖打印的內(nèi)容可以看出來,nodemon 的配置文件是從 /OVE/package.json 中讀取的 nodemonConfig 。
ignoring 表示忽略監(jiān)測的文件
watching 表示監(jiān)測的文件
watching extensions 表示監(jiān)測文件的擴(kuò)展名
之所以會(huì)重啟肯定是因?yàn)楸O(jiān)測到了文件的改變,這里的 files triggering change check: model/video.js 也已經(jīng)告訴你了是 model/video.js 這個(gè)文件發(fā)生了改變。(當(dāng)然nodemon本身也可能是有bug)。

你把代碼自動(dòng)跟蹤打開 xdebug.auto_trace=on 配置完要重啟PHP,看有輸出嗎

陌離殤 回答

老鐵你好,我認(rèn)為這個(gè)錯(cuò)誤頁面信息量太少,只能表示出錯(cuò)了。
你可以從apache的日志內(nèi),找到error日志,把日志貼上來,我們可以更多的幫助你解決。

如果你的登錄認(rèn)證用的是自帶的Auth,那么就有這種可能。
Auth是分guard的,guard就是用來解決這種前后端不同賬戶系統(tǒng)登錄的。
看看是不是用到的guard不一樣。

毀了心 回答

會(huì)員上線將狀態(tài)改變,之后增加心跳檢測!

拮據(jù) 回答
select a.name, b.total from mer_content a 
inner join
(select id, count(url) as total from mer_imgurl group by id) b
on a.id = b.id

就是把表二先按做個(gè)group,再和表一用id來join。
如果表二的id和url會(huì)有重復(fù)情況的話,那么b中需要改成count(distinct url)

希望能夠幫到你。

久舊酒 回答

不知道你說的是不是這個(gè)
clipboard.png

這個(gè)叫導(dǎo)航,通常是配合路由實(shí)現(xiàn)的。如果不打算采用完整的路由系統(tǒng)(比如ReactRouter),也可以根據(jù)頁面路徑中的path來判斷

北城荒 回答

把 composer.lock 刪除了試試重新執(zhí)行試試, 或者用phpstorm一類的IDE將composer.lock 文件轉(zhuǎn)為UTF-8 字符編碼再試試

舊言 回答

個(gè)人觀點(diǎn):不推薦,在case后面做公式,直接case單一的值就好。
為什么不推薦? 、邋遢。

switch( $search ) {
    case 'like':
        $key.=' like';
        $this->_datas[$key] = '%' . $value . '%';
        break;
    case 'greater':
        $key.=' >=';
        $value = strtotime( $value );
        $this->_datas[$key] = $value;
        break;
    case 'less':
        $key.=' <=';
        $value = strtotime( $value . " +1 day" );
        $this->_datas[$key] = $value;
        break;
    case 'lessthan':
        $key .= ' <=';
        $value = strtotime($value);
        $this->_datas[$key] = $value;
        break;
    case 'big':
        $key.=' >';
        $this->_datas[$key] = $value;
        break;
    case 'small':
        $key.=' <';
        $this->_datas[$key] = $value;
        break;
    case 'in':
        $key.=' in';
        $this->_datas[$key] = '(' . implode( ',', $value ) . ')';
        break;
    case 'notequal':
        $key.=' <>';
        $this->_datas[$key] = $value;
        break;
    case 'noteq':
        $key.=' !=';
        $this->_datas[$key] = $value;
        break;
    default:
        $this->_datas[$key] = $value;
}

如果case下面拼裝sql的代碼一致,可以這樣寫:

case 'big':
case 'small':
case 'noteq':
    $this->_datas[$key] = $value;
有你在 回答

在select標(biāo)簽中加上autocomplete="off"試試

萌小萌 回答

經(jīng)過一個(gè)下午的折騰,上周五還是發(fā)現(xiàn)出現(xiàn)該異常情況的原因。概括來說還是中文轉(zhuǎn)編碼的問題,即utf-8轉(zhuǎn)gbk出現(xiàn)的小部分行缺少空格或者雙引號的問題。
出現(xiàn)問題的原因:
在進(jìn)行導(dǎo)出的過程中,接收其他程序傳過來的數(shù)組參數(shù),均為utf-8編碼,我這邊在調(diào)用fwrite或者fputcvs寫入文件的過程中并沒有進(jìn)行 iconv("UTF-8", "GB2312//IGNORE", $header),而是將文件保存在了 export目錄下,然后由vuejs做的后臺(tái)調(diào)用位于同application下的一個(gè)共用類的 export方法,該方法是這樣的:

public function export()
{
    $file = \Request::get('file');
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename=export.csv');
    header('Cache-Control: max-age=0');
    $contents = file_get_contents(\Env::get('runtime_path') . '/export/' . $file);
    echo iconv("UTF-8", "GB2312//IGNORE", $contents);
    @unlink(RUNTIME_PATH . '/export/' . $filename);
    exit;
}

問題就出在 echo iconv("UTF-8", "GB2312//IGNORE", $contents); 這句代碼上面,這里看到是對傳入的整個(gè)文件進(jìn)行轉(zhuǎn)編碼的,這里未進(jìn)行測試到底多少行的數(shù)據(jù)會(huì)出現(xiàn)缺少逗號引號的問題。
最終的解決思路是,把共用類中對整個(gè)文件的轉(zhuǎn)編碼放到寫入方法中,逐條轉(zhuǎn)編碼就解決了該問題。

更改后的代碼:

public static function createCsv($data, $header = [], $filename = '')
{
    // 參數(shù)判斷
    $data = is_object($data) ? $data->toArray() : $data;
    $header = is_array($header) ? $header : [];
    $filename = (1 > strlen(trim($filename))) ? 'csv-' : trim($filename);
    if (empty($data)) {
        return false;
    }

    // 文件名/目錄
    $filename = $filename . date("YmdHis", time()) . rand(1000, 9999) . ".csv";
    $dir = Env::get('runtime_path') . '/export/';
    if (!is_dir($dir) && !mkdir($dir)) {
        return false;
    }

    // 打開文件指針資源
    $handle = fopen($dir . $filename, 'w+');
    if (!$handle) {
        return false;
    }

    // 寫入文件header頭
    if (!empty($header)) {
        foreach ($header as $key => $item) {
            $header[$key] = iconv("UTF-8", "GB2312//IGNORE", $item);
        }
        $res = fputcsv($handle, $header);
        if (!$res) {
            return false;
        }
    }

    // 判斷header是索引數(shù)組還是關(guān)聯(lián)數(shù)組
    $is_assoc = array_keys($header) !== range(0, count($header) - 1);

    // 寫入文件內(nèi)容
    $frequency = 0; // 頻率
    $limit = 100000;
    foreach ($data as $datum) {
        $frequency++;
        if ($limit == $frequency) {
            // 刷新輸出buffer
            ob_flush();
            flush();
            $frequency = 0;
        }
        // 如果是關(guān)聯(lián)數(shù)組,則獲取內(nèi)容中和頭部key相對應(yīng)的值
        if ($is_assoc) {
            $csv = "";
            foreach(array_keys($header) as $item) {
                $datum[$item] = iconv("UTF-8", "GB2312//IGNORE", $item);
                $val = str_replace('"', '""', $datum[$item]); // 將單個(gè)雙引號替換為兩個(gè)雙引號
                $csv .= '"' . $val . '",'; // 為每個(gè)字符增加雙引號,并添加逗號分割符
            }
            $csv = substr($csv, 0, -1); // 去掉每行最后一個(gè)逗號
            $csv .= "\n"; // 添加換行符
            $res = @fwrite($handle, $csv);
        } else {
            $res = fputcsv($handle, $datum);
        }

        if (!$res) {
            return false;
        }
    }

    // 關(guān)閉指針資源
    fclose($handle);
    return Url::build('erp/Common/export', 'file=' . $filename);
}


public function export()
{
    $file = \Request::get('file');
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename=export.csv');
    header('Cache-Control: max-age=0');
    $contents = file_get_contents(\Env::get('runtime_path') . '/export/' . $file);
    echo $contents;
    exit;
}

調(diào)用步驟:

先調(diào)用createCsv生成文件,再調(diào)用export下載。

———————————————————————分割線——————————————————————

另外一種解決思路:

csv文件直接存儲(chǔ) UTF-8 編碼:
即不需要進(jìn)行 iconv 轉(zhuǎn)編碼,這樣會(huì)有個(gè)小問題就是MacOS中的Excel無法自動(dòng)識(shí)utf-8編碼,中文會(huì)出現(xiàn)亂碼的情況。

原因:

Excel在讀取csv的時(shí)候是通過讀取文件頭上的bom來識(shí)別編碼的,如果文件頭無bom信息,則默認(rèn)按照unicode編碼讀取。(這個(gè)bom是微軟自己定義的一種文件頭部協(xié)定,顧名思義存儲(chǔ)在文件頭部,存儲(chǔ)內(nèi)容就是標(biāo)識(shí)文件編碼的信息。)而我們生成csv的平臺(tái)不一定遵循微軟的bom協(xié)議,導(dǎo)致如果輸出非unicode編碼的csv文件(例如utf-8),并且沒有生成bom信息的話,Excel自動(dòng)按照unicode編碼讀取,就會(huì)出現(xiàn)亂碼問題了。

作者:李蛟 鏈接:https://www.zhihu.com/questio...
來源:知乎 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

根據(jù)知乎查到的答案,原來是這里未遵循微軟的bom協(xié)議。原因找到了,解決方案就能出了。

解決方法:
fopen 方法下寫入bom頭,這里簡單寫一下步驟

function createCsv($filename, $header, $data) {
    $handle = fopen($filename, 'w+');
    // 添加BOM,標(biāo)識(shí)為UTF-8格式
    fwrite($handle, chr(0xEF).chr(0xBB).chr(0xBF));
    // 寫入頭部
    fputcsv($handle, $header);
    // 逐行寫入內(nèi)容
    foreach ($data as $datum) {
        fputcsv($handle, $datum);
    }
    // 關(guān)閉指針資源
    fclose($handle);
}

另外再補(bǔ)充一下 Bom 簡介

  • 在UCS 編碼中有一個(gè)叫做”ZERO WIDTH NO-BREAKSPACE”的字符,它的編碼是FEFF。
  • FFFE在UCS中是不存在的字符,所以不應(yīng)該出現(xiàn)在實(shí)際傳輸中。
  • UCS規(guī)范建議我們在傳輸字節(jié)流前,先傳輸字符”ZERO WIDTH NO-BREAK SPACE”。
  • 這樣如果接收者收到FEFF,就表明這個(gè)字節(jié)流是Big-Endian的;
  • 如果收到FFFE,就表明這個(gè)字節(jié)流是Little-Endian的。
  • 因此字符”ZERO WIDTH NO-BREAK SPACE”又被稱作BOM。
  • UTF-8不需要BOM來表明字節(jié)順序,但可以用BOM來表明編碼方式。
  • 字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8編碼是EF BB BF。
  • 所以如果接收者收到以EF BB BF開頭的字節(jié)流,就知道這是UTF-8編碼了。
  • Windows就是使用BOM來標(biāo)記文本文件的編碼方式的。

該內(nèi)容來自 http://blog.csdn.net/chaozhi_... 這篇博客