张居翰在唐懿宗咸通初年,被掖廷令张从玫养以为子,以恩荫走上仕途。广明元年(880年),唐僖宗逃命至成都时,授容南护军判官。唐昭宗乾宁中,授学士院承旨,加供奉官内侍,迁枢密承旨、内府令。他办事认真,丝毫不苟且。很得上峰赏识。天子为嘉奖他办事认真,特地赐以绯色衣服。不久,他奉命去监督幽州(今北京市西南)军事,与幽州节度使刘仁恭相处得很融洽。当天子调居翰回朝时,刘仁恭请求将居翰留下,唐僖宗答应了这个要求。天复三年(903年)军阀朱全忠(原名朱温)与宰相崔胤联名上奏昭宗说,国初承平之时,宦官不典兵预政,天宝年间宦官势力逐渐强大。贞元末年分羽林军为左右神策军,用来扈卫天子,以宦官掌管,从此宦官参与机密,夺百官之权,上下勾结,共为不法。大则构煽藩镇,倾危国家,小则卖官鬻爵,矗害朝政,王室袁乱,即是这个原因。不翦除这个祸根,祸患便不会停止,请陛下翻夺宦官所兼的职务,罢诸道宦官监军,悉数召还阴下。当时昭宗已在他们控制之下,身不由己,只得表示同意。次日,朱全忠便以兵驱逐宦官第五可范等效百人于内侍省杀之,只有河东监军张承业、幽州监军张居翰等数人得免于难。张居翰由于与刘仁恭有旧谊,刘仁恭接到命令后,将居翰藏匿在幽州西北的大安山中,另外杀了一名罪犯上报,居翰这才躲过了厄运。从此,张居翰便隐姓埋名在幽州住了下来。
天祐三年(906年)七月,梁太祖朱温率兵进攻沧州(今河北沧县东南)。沧州属刘仁恭辖区,刘仁恭亲自往救,但屡战屡败。刘仁恭眼看不能打败梁军,军情又急如星火,无奈只得派人向太原李克用求救,前后派出百余人之多。李克用采取围魏救赵之策,进攻潞州以解沧州之围,向刘仁恭征兵。仁恭遣部将李溥、夏候景、监军张居翰、书记马郁等以兵三万来会。李克用派大将周德威、李嗣昭,会合幽州之兵进攻泽(今山西晋城)、潞二州。这年年底,后梁潞州守将丁会开门迎降,围攻沧州的后梁军队听说潞州失守,便仓皇烧营而遁。在这次战役中,张居翰居中运筹,立下了功劳。李克用见他精明强干,便留而不遣,从此,张居翰又成了李克用的爱将。不久,李嗣昭受命节制昭义(即潞州),以张居翰为监军,并拨燕军三干归他指挥。他在潞州时,除了训练士兵外,每年春天还“课人育蔬种树,敦本惠农。”颇受百姓欢迎。天祐四年(907年)六月,后梁大将李思安将兵十万围攻潞州,想从李克用手中夺回这座失陷一年的城他。李思安修筑夹城,深沟高垒,内外重复;把潞州围了个水泄不通。张居翰与李嗣昭率领士卒,登城拒守。朱温多次给居翰、嗣昭写信,劝二人投降,并许诺如若来归,定不吝爵禄之赏。居翰、嗣昭不为所动,焚其诏书,斩其使者,固守经年。城中军民衣服不继,赖居翰等惨淡经营,多方运筹,民心才稍稍安定。由于晋军防守严密,梁军虽然在数量上占有优势,但在张居翰等的守御面前却一筹莫展。天祐五年(908年)正月,晋王李克用病逝,李存勖袭位于晋阳(今山西太原),时年二十四岁。李存勖在张承业等人的劝说下,亲自军兵从太原出发救援潞州,后梁军不意后唐军猝至,士无斗志,争先恐后向南逃审,一路上丢盔卸甲,道路为之堵塞。潞州城中的张居翰、李嗣昭等见救兵已到,便抖擞精神自城中杀出,里应外合,内外夹击,梁兵大败,死亡一万余人,生擒其副招讨使符道昭及将佐三百人,缴获当粟百万石。张居翰守城有功,又与李嗣昭配合默契,从此,嗣昭每次出征,便让居翰留后。居翰抚绥士卒,护理百姓,一切都治理得并并有条,得到了庄宗的赞扬。
同光元年(923年)李存勖灭梁称帝,大封群臣。当时宦官马绍宏与大将郭崇韬资格最老,功劳最大,二人当为掌兵权的枢密使,而马绍宏的资历高于崇韬,此人后来赐姓为李,他诬杀大臣,收受赌路,作威作福,天下人多怨之。郭崇韬恐伯他日后掌权难于驾驭,便奏请资历比自己低的张居翰同掌枢密,另委马绍宏为宣徽使,马绍宏怨望不已。崇韬专权跋扈,又嫉恨宦官,因此,居翰虽备位枢密使,不过是随人俯仰而已,手中没有任何权力。每次商议国家大事,居翰都不发表自己的意见,只是唯唯诺诺,十分低调,这样,他才得以保全性命,没有遭到郭崇韬的迫害。
同光三年九月,庄宗命太子李继岌、枢密使郭崇韬出征前蜀,蜀主王衍的养兄王宗弼暗地里向郭崇韬投降,请求封自己为兵马留后,崇韬许以节度使之职。后唐军至成都,宗弼迁王衍于西官,收成都尹韩昭、宦官宋光嗣等杀之,将首级送给李继岌,王衍自知抵挡不住,上表乞降。继岌入成都时,王衍身穿白衣,衔壁牵羊,以草绳系颈,迎降道左。庄宗召王衍赴洛阳,并赐诏书说:“固当列土而封,必不薄人于险,三辰(日、月、星为三辰)在上,一言不欺!”同光四年四月,当王衍行至秦川驿(陕西、甘肃渭水平原一带)时,突然传来了李嗣源在魏州(今河北大名东北)反叛的消息,庄宗李存勖慌忙东征平叛。大军将从洛阳出发时,伶人景进献计说,李嗣源来势凶猛,陛下应狮子搏兔,全力以赴。如今太子继岌远在成都未归,陛下跨河东征,国内必然空虚。王衍族党不少,一旦为乱,局势将不可收拾,不如将其杀掉,以免除后患。庄宗当下便派宦官向延嗣下敕诛杀王衍,并下诏说:“王衍一行,并宜杀戮。”张居翰在复查诏书时,认为王衍既己投降,现在又出尔反尔,把他斩首,实在不合天理人情,便将诏书贴在柱子上,将‘行’字涂掉,改为家’字,于是“王衍一行。便成了“王衍一家”。擅改诏书是要冒杀头风险的,所幸的是,向延嗣根本没有想到张居翰居然有勇气偷改诏书,因而接到诏书时并未怀疑。更何况当时军书旁午,羽檄飞驰,庄宗自顾不暇,当然也无心追究此事了。这样,前蜀百官及王衍的仆役等一千余人的生命,才得以保全。
后来庄宗李存勖被弑,明宗李亶进入洛阳,张居翰谒见于至德宫,请求免官放归田里,得到了明宗的批准。张居翰辞朝后归隐长安,于天成三年(928年)四月二十七日(5月19日)病逝,终年七十一岁。八月十日,葬于长安县龙门乡峦村。