在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/ PHP問答

看看是不是防火墻的問題,你試試telnet你的端口,看看能不能連接上,如果不能,那就開啟了防火墻,8080端口沒有對外開放。

厭惡我 回答

若只是為了匹配一二三...十,那么正則 /[一二三四五六七八九十]+/g足夠。
若想匹配的是必須在中括號(hào)里的一....十, 那么使用正則 /\[([一二三四五六七八九十]+)\]/g,遍歷得到的匹配,每個(gè)匹配取第一個(gè)group即可。

雨蝶 回答
但是這種情況如果多了會(huì)不會(huì)造成大量廢棄的接口同時(shí)在生產(chǎn)環(huán)境

首先這里其實(shí)是3件事,一件叫兼容以前的版本,一件叫新增一個(gè)功能,一件叫廢棄之前的版本。

  1. 如果你要兼容,那不叫廢棄的接口,當(dāng)然這里不符合題主需求。
  2. 樓主這里其實(shí)是新增一個(gè)功能(盡管他跟原有的功能可能很相似),直接新加就行了。
  3. 而如果你要廢棄,則可以屏蔽掉舊版本代碼(一般是幾次迭代之后,有足夠的警告說明你要廢棄此接口,而通常還不是很好用)

這是比較沒有辦法的事情。主要寫好文檔,每個(gè)系統(tǒng)版本的文檔里寫清楚接口的支持和廢棄。

墻頭草 回答

你是用循環(huán)來計(jì)算總價(jià)的嗎?你需要在每次循環(huán)的時(shí)候?qū)otal設(shè)置成0,這樣就沒問題了。

初念 回答

yii2-webuploader 此擴(kuò)展集成webuploader圖片上傳插件,旨在更好的處理 Yii2 framework 圖片上傳的前端問題,目前支持多圖多字段多modal的混合上傳。

綰青絲 回答

有兩個(gè)地方要修改.

前端頁面
把上傳控件修改成文本框. 類似這樣

<input type="file" name="file" />
<!-- 以上修改成以下 -->
<span>XLS 文件名(不帶擴(kuò)展名)</span>
<input type="text" name="xlsfilename" />

這樣你可以在網(wǎng)頁上輸入待導(dǎo)入的文件名, 而不是上傳本地文件了.

后臺(tái)代碼(你貼出來的 php 代碼)
把這部分

        $file = upload_file($_FILES['file'], 'excel');
        if(is_error($file)) {
            imessage(error(-1, $file['message']), '', 'ajax');
        }

修改成類似這樣的

        $base_name = $_POST["xlsfilename"];
        // 必須檢查文件名, 防止惡意輸入
        // 合理的文件名只含 a-z, A-Z, 0-9, 及 "-" 和 "_", 最多 30 個(gè)字符.
        if (!preg_match("/^[a-zA-Z0-9_-]{1,30}$/g", $base_name)) {
            die("invalid file name");
            return;
        }
        // 到 "/wwwroot/" 目錄下找指定的 xls 文件
        $file = fopen("/wwwroot/" . base_name . ".xls","r");
墨沫 回答

增加注釋 看行不行

$testClass = '\common\service\test';
/** @var \common\service\test $test */
$test = new $testClass;
$test->aa();
尐潴豬 回答

Preferences => Keymap
搜索Complete Current Statement,設(shè)置成ctrl + 回車

這樣當(dāng)你寫完一行后直接敲ctrl + 回車就會(huì)自動(dòng)加個(gè)分號(hào)。

而且無論你光標(biāo)在本行的哪里,敲一下自動(dòng)加。
如:
clipboard.png

心沉 回答

看一下兩個(gè)數(shù)據(jù)表引擎是不是一樣的

有你在 回答

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

骨殘心 回答

一般是后臺(tái)校驗(yàn)用戶名和密碼正確后,會(huì)生成用戶登錄態(tài)的一個(gè)code,服務(wù)器端用session保存,前端用cookie保存。這個(gè)是服務(wù)器操作的,前端不用管。因?yàn)槊總€(gè)http請求也會(huì)自動(dòng)帶上cookie,服務(wù)器取請求里cookie的值與session里的值比較,來確認(rèn)用戶的登錄態(tài)。這個(gè)就是登錄態(tài)的原理。跟vue.js寫spa應(yīng)用這些沒有關(guān)系。都是一樣的處理方法。

萌小萌 回答

經(jīng)過一個(gè)下午的折騰,上周五還是發(fā)現(xiàn)出現(xiàn)該異常情況的原因。概括來說還是中文轉(zhuǎn)編碼的問題,即utf-8轉(zhuǎn)gbk出現(xiàn)的小部分行缺少空格或者雙引號(hào)的問題。
出現(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)缺少逗號(hào)引號(hào)的問題。
最終的解決思路是,把共用類中對整個(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è)雙引號(hào)替換為兩個(gè)雙引號(hào)
                $csv .= '"' . $val . '",'; // 為每個(gè)字符增加雙引號(hào),并添加逗號(hào)分割符
            }
            $csv = substr($csv, 0, -1); // 去掉每行最后一個(gè)逗號(hào)
            $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_... 這篇博客

伐木累 回答

一個(gè)form只需一個(gè)hidden input 存放scrf隨機(jī)數(shù),每次載入form 或提交失敗後都會(huì)讀取新的scrf隨機(jī)數(shù)放入這個(gè)input,而這個(gè)scrf隨機(jī)數(shù)應(yīng)交由你的框架生成(當(dāng)然你自己創(chuàng)造一個(gè)生成器也行)。方便的做法是每次載入form或提交失敗時(shí)用ajax取得這個(gè)scrf然後放入input,確保每次提交時(shí)都是正確的scrf隨機(jī)數(shù)。

*這個(gè)scrf應(yīng)該有時(shí)效性,比如設(shè)置成7000,就代表從提交form一刻數(shù)7秒,如超過7秒仍未提交成功則scrf隨機(jī)數(shù)會(huì)過期,form提交失敗。

毀憶 回答

一個(gè)插入語句只能插入一張表。

老梗 回答

問題的問題

  1. 看問題有三點(diǎn),但第三點(diǎn)確實(shí)疑問,不是場景
  2. 人家那邊?誰家,是前端小程序,還是第三方?
  3. 后臺(tái)將數(shù)據(jù)存取一份,是說存儲(chǔ)一份?

我理解到的問題(直接看這里吧):
端: 后端(題主開發(fā)的),小程序前端,第三方接口,
場景:第三方接口數(shù)據(jù)直接提供給前端,但是因?yàn)樾枰灻紤]安全問題,不能直接給前端,所以經(jīng)過了你所開發(fā)的后端(PHP)簽名,再轉(zhuǎn)給小程序前端。

問題是這樣嗎?是的話我再回答,不是那就呃,呃

淡墨 回答

根據(jù) 官方文檔中對 mongo uri 的介紹, uri 后面指定的那個(gè) database, 是用來指定授權(quán)數(shù)據(jù)庫的, 而不是用來指定連接成功后選擇的數(shù)據(jù)庫的.

/database : Optional. The name of the database to authenticate if the connection string includes authentication credentials in the form of username:password@. If /database is not specified and the connection string includes credentials, the driver will authenticate to the admin database.

之所以需要指定授權(quán)數(shù)據(jù)庫, 是因?yàn)槭跈?quán)數(shù)據(jù)庫并不總是會(huì)被起名為 admin, 這個(gè)名字只是大多數(shù)人都會(huì)起的名字, 也是 mongo 默認(rèn)會(huì)連接的授權(quán)數(shù)據(jù)庫名. 你真把授權(quán)數(shù)據(jù)庫起名成 test 也是可以的, 那連接時(shí)就需要指定授權(quán)庫為 test : mongo://user:pass@localhost:27017/test .

回到你的問題, 你的授權(quán)庫應(yīng)該不叫 phptest 吧. 把這個(gè)數(shù)據(jù)庫名去掉, 應(yīng)該就可以連接成功. 連接成功后, 再用 MongoClient 選擇庫就是了. php 的 mongo 語法還是超級(jí)簡單的:

$mongo_client->phptest